仮想化に関係する Linux のネットワーク関連機能
メモです.そのうちブログのネタに.
veth
軽く実験
- 作成
# ip link add type veth
- 確認
# ip link ls veth0 11: veth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 52:97:55:24:e0:e3 brd ff:ff:ff:ff:ff:ff # ip link ls veth1 12: veth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether aa:bf:82:77:71:48 brd ff:ff:ff:ff:ff:ff
- アドレスを振る
# ip link set veth0 up # ip link set veth1 up # ip addr add 10.100.0.1/24 dev veth0 # ip addr add 10.100.0.2/24 dev veth0 # ip addr show : (snip) 11: veth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:97:55:24:e0:e3 brd ff:ff:ff:ff:ff:ff inet 10.100.0.1/24 scope global veth0 inet 10.100.0.2/24 scope global secondary veth0 inet6 fe80::5097:55ff:fe24:e0e3/64 scope link valid_lft forever preferred_lft forever 12: veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether aa:bf:82:77:71:48 brd ff:ff:ff:ff:ff:ff inet6 fe80::a8bf:82ff:fe77:7148/64 scope link valid_lft forever preferred_lft forever
- (続く)
参考
TAP
- レイヤ 2 トンネリング
- ユーザ空間のアプリケーションから送信したイーサフレームは OS から見ると外部から TAP デバイスにイーサフレームが到達したように見える
- 外部から受信したイーサフレームは OS のネットワークスタックを通って TAP デバイスに送られ,ユーザ空間のアプリケーションで受信する.
参考
- man にないけどこんなのがあるみたいなので要調査
ip tuntap help
macvlan
ipalias を使えば,1 つのインターフェースに複数のアドレスを振ることは可能ですが,元のインターフェースと MAC Address は同じなので,例えば DHCP でもう 1 個アドレスを,ということは出来ません.そこで macvlan ですよ (という用途ではないと思うけど :p )
root@precise:~# ip link add dev macvlan0 link eth0 type macvlan mode bridge root@precise:~# ip link show : (snip) 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:f3:28:a0 brd ff:ff:ff:ff:ff:ff : (snip) 4: macvlan0@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN link/ether 66:83:ba:90:95:39 brd ff:ff:ff:ff:ff:ff
別の MAC Address が付与されています.
root@precise:~# dhclient macvlan0 root@precise:~# ip addr show : (snip) 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:f3:28:a0 brd ff:ff:ff:ff:ff:ff inet 192.168.122.14/24 brd 192.168.122.255 scope global eth0 inet6 fe80::5054:ff:fef3:28a0/64 scope link valid_lft forever preferred_lft forever : (snip) 4: macvlan0@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 66:83:ba:90:95:39 brd ff:ff:ff:ff:ff:ff inet 192.168.122.152/24 brd 192.168.122.255 scope global macvlan0 inet6 fe80::6483:baff:fe90:9539/64 scope link valid_lft forever preferred_lft forever
当然別のアドレスを振ることが可能です.
root@precise:~# ping -I macvlan0 192.168.122.14 PING 192.168.122.14 (192.168.122.14) from 192.168.122.152 macvlan0: 56(84) bytes of data. From 192.168.122.152 icmp_seq=1 Destination Host Unreachable From 192.168.122.152 icmp_seq=2 Destination Host Unreachable From 192.168.122.152 icmp_seq=3 Destination Host Unreachable ^C --- 192.168.122.14 ping statistics --- 5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4009ms pipe 3 root@precise:~# ping -I eth0 192.168.122.152 PING 192.168.122.152 (192.168.122.152) from 192.168.122.14 eth0: 56(84) bytes of data. From 192.168.122.14 icmp_seq=1 Destination Host Unreachable From 192.168.122.14 icmp_seq=2 Destination Host Unreachable From 192.168.122.14 icmp_seq=3 Destination Host Unreachable ^C --- 192.168.122.152 ping statistics --- 4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3016ms
macvlan インターフェースと,macvlan を付与したインターフェースの間の通信はできません.
macvtap
Tap
こんな感じで使うのかな.
- Linux (kernel) がプロセスと通信を行う.
- プログラムから仮想的なネットワークインターフェースを作成
- 作成したインターフェースをブリッジに接続
- プログラムからはファイルディスクリプタ経由で読み書き