文書の表示以前のリビジョンバックリンク文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== 仮想化に関係する Linux のネットワーク関連機能 ====== メモです.そのうちブログのネタに. ===== veth ===== * Virtual Ethernet Device.元々 OpenVZ/Virtuozzo の機能. * 仮想的なネットワーク I/F のペアを作成し,その間を通信する. {{:linux:kernel:network:veth.png?300|}} ==== 軽く実験 ==== - 作成 <code># ip link add type veth</code> - 確認 <code># 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</code> - アドレスを振る <code># 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 </code> - (続く) ==== 参考 ==== * http://d.hatena.ne.jp/defiant/20100630 * http://d.hatena.ne.jp/defiant/20100702 * http://chamaken.blogspot.jp/2009/06/veth-ping.html * http://diary.atzm.org/20120416.html * http://wiki.openvz.org/Veth * http://d.hatena.ne.jp/enakai00/20110529/1306658627 ===== TAP===== * レイヤ 2 トンネリング * ユーザ空間のアプリケーションから送信したイーサフレームは OS から見ると外部から TAP デバイスにイーサフレームが到達したように見える * 外部から受信したイーサフレームは OS のネットワークスタックを通って TAP デバイスに送られ,ユーザ空間のアプリケーションで受信する. ==== 参考 ==== * http://gihyo.jp/admin/serial/01/ibm_kvm/0003 * man にないけどこんなのがあるみたいなので要調査 <code>ip tuntap help</code> ===== macvlan ===== ipalias を使えば,1 つのインターフェースに複数のアドレスを振ることは可能ですが,元のインターフェースと MAC Address は同じなので,例えば DHCP でもう 1 個アドレスを,ということは出来ません.そこで macvlan ですよ (という用途ではないと思うけど :p ) <code> 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 </code> 別の MAC Address が付与されています. <code> 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 </code> 当然別のアドレスを振ることが可能です. <code> 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 </code> macvlan インターフェースと,macvlan を付与したインターフェースの間の通信はできません. ===== macvtap ===== ==== Tap ==== こんな感じで使うのかな. * Linux (kernel) がプロセスと通信を行う. * プログラムから仮想的なネットワークインターフェースを作成 * 作成したインターフェースをブリッジに接続 * プログラムからはファイルディスクリプタ経由で読み書き ==== Macvtap ==== linux/kernel/network/仮想化に関係する_linux_のネットワーク関連機能.txt 最終更新: 2013/09/27 16:42by tenforward