layout | title |
---|---|
default |
network namespace をつかってる? |
network namespace を使っていますか? メモですが、trema 開発の参考にしてください。phost では物足りないときとかに。。。
network namespace の説明は、省略します。 unshare(2)、clone(2) や ip(8) を参考にしてください。 ubuntu 12.04 で動作確認しました。
ここでは、新規に network namespace (ns) を2つ作成して、 仮想イーサネットインターフェースでつないで ping してみます。 trema とかはそのあとで
unshare(3)コマンドでも作れますが、ここでは ip コマンドで作ります。 network namespace の名前を ns0 とします。
$ sudo ip netns add ns0
$ sudo ip netns add ns1
$ sudo ip netns
ns0
ns1
$
これは trema で使っている方法と同じです
仮想イーサネットインターフェースのペアを作成して、そのあと 作成した network namespace に仮想イーサネットインターフェースを追加します。
$ sudo ip link add name veth0 type veth peer name veth1
ifconfig で追加されたのを確認してください
$ sudo ip link set dev veth0 netns ns0
veth0 を ns0 に設定すると、カレントの network namespace から消えます。 ifconfig で確認してください。 ns0 に追加されたかの確認は、sudo ip netns exec ns0 ifconfig -a で確認できます。
$ sudo ip link set dev veth1 netns ns1
アドレスは、自分の環境に合わせてください
$ sudo ip netns exec ns0 /bin/bash
# ifconfig lo 127.0.0.1
# ifconfig veth0 192.168.0.1
できれば新しいウィンドウで
$ sudo ip netns exec ns1 /bin/bash
# ifconfig lo 127.0.0.1
# ifconfig veth1 192.168.0.2
# ping 192.168.0.1
...
ip netns exec で起動した bash は、両方とも exit してください。
$ sudo ip netns delete ns0
$ sudo ip netns delete ns1
ns0 を削除すると veth0 も削除され、ペアで作成された veth1 も削除されます。
とりあえずこんな感じ。
+-----+ +-----+
| ns0 | | ns1 |
+-----+ +-----+
| veth0-1 | veth1-1
| 192.168.0.1 | 192.168.0.2
| |
| veth0-0 | veth1-0
+----------------------+
| Openvswitch |
+----------------------+
|
+----------------------+
| Trema |
+----------------------+
| learning-switch |
+----------------------+
$ sudo ip netns add ns0
$ sudo ip netns add ns1
$ sudo ip link add name veth0-0 type veth peer name veth0-1
$ sudo ip link add name veth1-0 type veth peer name veth1-1
$ sudo ip link set dev veth0-1 netns ns0
$ sudo ip link set dev veth1-1 netns ns1
$ sudo ip netns exec ns0 ifconfig lo 127.0.0.1
$ sudo ip netns exec ns0 ifconfig veth0-1 192.168.0.1
$ sudo ip netns exec ns1 ifconfig lo 127.0.0.1
$ sudo ip netns exec ns1 ifconfig veth1-1 192.168.0.2
src/examples/learning_switch/learning_switch.conf をベースに修正しました。
$ cat ns_test.conf
vswitch("lsw") {
datapath_id "0xabc"
}
link "lsw", "veth0-0"
link "lsw", "veth1-0"
$
$ ./trema run ./src/examples/learning_switch/learning-switch.rb -c ns_test.conf -d
$ sudo ifconfig veth0-0 up
$ sudo ifconfig veth1-0 up
learning-switch に負荷をかけてみる
$ sudo apt-get install nmap
$ sudo ip netns exec ns1 /bin/bash
# nmap -p1-65535 192.168.0.1
...
いろいろコマンドが使えるので、ちょっと試すには便利だと思います。
エンジョイ
ubuntu 11 では、ip netns が使えない。そのかわり unshare(1) をつかって下さい。名前が使えないので pid をつかいます。 unshare から bash を起動して bash の pid を調べてください。
$ sudo unshare --net /bin/bash
# echo $$
123
#
仮想ネットワーク作る ip link の使い方は同じです。 ネームスペースに仮想ネットワークインターフェースの設定も同じです。名前のところは、 bash の pid にしてください。 ip アドレスの設定は、 bash のプロンプトから設定してください。