◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク
Linux のネットワークネームスペースと、Open vSwitch、ip link コマンドを組み合わせたら仮想ネットワークを Linux 内に作って遊べそうだと思ってシェルスクリプトを作って確認してみました。
今回は1例を試しただけですが、さらに色々な仮想ネットワークを Linux 内に作って遊べそうだという感触を得ることができました。Open vSwitch を OpenFlow スイッチとして用いるのも面白いでしょう。
■確認に用いた環境
Lubuntu 12.04 (i386)
Lubuntu 12.10 で試される場合は、NetworkManagerが邪魔すると思うので停止しておいた方がよいと思います。以下の記事の「■回避策」を参考にしてくださ:
記事: 「Lubuntu 12.10 で Trema の仮想ネットワーク機能を使うときはネットワークマネージャーを止めましょう」
http://ranosgrant.cocolog-nifty.com/blog/2013/01/lubuntu-1210-tr.html
■今回作成する仮想ネットワークの構成図
VLAN スイッチが2つ、ホストは4台。
VLAN スイッチは Open vSwitch を使用。
ホストは、ネットワークネームスペースを使用。
vhost1 と vhost3 は、tag=10 の VLAN に接続。
vhost2 と vhost4 は、 tag=20 の VLAN に接続。
Open vSwitch のインストール方法は以下の記事の「■ステップ3. OpenVSwitch のインストール」を参照ください:
記事: 「2万円で OpenFlow スイッチを自作しよう」
http://ranosgrant.cocolog-nifty.com/blog/2013/02/2-openflow-4b98.html
■動作確認結果
vhost1 からは、同じ VLAN タグを持つ vhost3 としか通信できないことを確認してみます。
まずは、vhost1 から vhost3 へ ping で通信できることを確認。
$ sudo ip netns exec vhost1 ping 192.168.1.3
PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
64 bytes from 192.168.1.3: icmp_req=1 ttl=64 time=1.29 ms
64 bytes from 192.168.1.3: icmp_req=2 ttl=64 time=0.121 ms
64 bytes from 192.168.1.3: icmp_req=3 ttl=64 time=0.100 ms
^C
--- 192.168.1.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.100/0.504/1.292/0.557 ms
vhost1 から vhost4 への ping は VLAN が異なるので通信ができず、Ctrl-C で中断。
$ sudo ip netns exec vhost1 ping 192.168.1.4
PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.
^C
--- 192.168.1.4 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2001ms
■仮想ネットワークの作成用シェルスクリプト
引数は、delete で削除、add で作成。
#!/bin/sh delete() { sudo ovs-vsctl del-br vswitch1 sudo ovs-vsctl del-br vswitch2 sudo ip netns delete vhost1 sudo ip netns delete vhost2 sudo ip netns delete vhost3 sudo ip netns delete vhost4 sudo ip link delete vlink5-0 sudo ip link delete vlink5-1 } add() { sudo ovs-vsctl add-br vswitch1 sudo ovs-vsctl add-br vswitch2 sudo ip link add name vlink1-0 type veth peer name vlink1-1 sudo ip link add name vlink2-0 type veth peer name vlink2-1 sudo ip link add name vlink3-0 type veth peer name vlink3-1 sudo ip link add name vlink4-0 type veth peer name vlink4-1 sudo ip link add name vlink5-0 type veth peer name vlink5-1 sudo ip link set vlink1-0 up sudo ip link set vlink2-0 up sudo ip link set vlink3-0 up sudo ip link set vlink4-0 up sudo ip link set vlink1-1 up sudo ip link set vlink2-1 up sudo ip link set vlink3-1 up sudo ip link set vlink4-1 up sudo ip netns add vhost1 sudo ip netns add vhost2 sudo ip netns add vhost3 sudo ip netns add vhost4 sudo ip netns exec vhost1 ifconfig lo 127.0.0.1 sudo ip netns exec vhost2 ifconfig lo 127.0.0.1 sudo ip netns exec vhost3 ifconfig lo 127.0.0.1 sudo ip netns exec vhost4 ifconfig lo 127.0.0.1 sudo ip link set vlink1-0 netns vhost1 sudo ip link set vlink2-0 netns vhost2 sudo ip link set vlink3-0 netns vhost3 sudo ip link set vlink4-0 netns vhost4 sudo ip netns exec vhost1 ifconfig vlink1-0 192.168.1.1 sudo ip netns exec vhost2 ifconfig vlink2-0 192.168.1.2 sudo ip netns exec vhost3 ifconfig vlink3-0 192.168.1.3 sudo ip netns exec vhost4 ifconfig vlink4-0 192.168.1.4 sudo ovs-vsctl add-port vswitch1 vlink5-0 sudo ovs-vsctl add-port vswitch2 vlink5-1 sudo ovs-vsctl add-port vswitch1 vlink1-1 tag=10 sudo ovs-vsctl add-port vswitch1 vlink2-1 tag=20 sudo ovs-vsctl add-port vswitch2 vlink3-1 tag=10 sudo ovs-vsctl add-port vswitch2 vlink4-1 tag=20 sudo ip link set vlink5-0 up sudo ip link set vlink5-1 up } case "$1" in add) set -x add ;; delete) delete > /dev/null 2>&1 ;; *) echo "usage: $0 {add|delete}" esac
« Trema のコントローラと仮想ネットワークをそれぞれ別々に動かす | トップページ | ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(ルータ追加) »
「仮想ネットワーク」カテゴリの記事
- ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク: STP(Spanning Tree Protocol)(2013.08.10)
- ◆ 【Open vSwitchのみで OpenFlowプログラミング】VLAN ID コンバータ 改(2013.08.10)
- ◆ 【Open vSwitchのみで OpenFlowプログラミング】VLAN ID コンバータ(2013.08.05)
- ◆ 【TremaでOpenFlowプログラミング】VLAN ID コンバータ(2013.05.12)
- ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(OpenFlowスイッチとTrema)(2013.05.11)
この記事へのコメントは終了しました。
« Trema のコントローラと仮想ネットワークをそれぞれ別々に動かす | トップページ | ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(ルータ追加) »
コメント