◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(ルータ追加)
前回の記事の仮想ネットワークに仮想ルータを追加してみました。仮想ルータといってもネットワークネームスペースを1つ追加してそこに2つの仮想ネットワークインターフェースをつなげただけ。
こんなに簡単に仮想ルータができて驚いた。
■今回作成した仮想ネットワークの論理構成図
■今回作成した仮想ネットワークの構成図(物理?)
各 vhost のIPアドレスは振りなおした上で、vrouter1を追加しています。
■動作確認
(1) vhost1(192.168.1.1) から vhost2(192.168.2.1)へ
$ sudo ip netns exec vhost1 ping 192.168.2.1 -c 3 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. 64 bytes from 192.168.2.1: icmp_req=1 ttl=63 time=0.720 ms 64 bytes from 192.168.2.1: icmp_req=2 ttl=63 time=0.145 ms 64 bytes from 192.168.2.1: icmp_req=3 ttl=63 time=0.117 ms --- 192.168.2.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.117/0.327/0.720/0.278 ms
(2) vhost1(192.168.1.1) から vhost3(192.168.1.2)へ
$ sudo ip netns exec vhost1 ping 192.168.1.2 -c 3 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. 64 bytes from 192.168.1.2: icmp_req=1 ttl=64 time=0.122 ms 64 bytes from 192.168.1.2: icmp_req=2 ttl=64 time=0.095 ms 64 bytes from 192.168.1.2: icmp_req=3 ttl=64 time=0.120 ms --- 192.168.1.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.095/0.112/0.122/0.015 ms
(3) vhost1(192.168.1.1) から vhost4(192.168.2.2)へ
$ sudo ip netns exec vhost1 ping 192.168.2.2 -c 3 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data. 64 bytes from 192.168.2.2: icmp_req=1 ttl=63 time=1.32 ms 64 bytes from 192.168.2.2: icmp_req=2 ttl=63 time=0.183 ms 64 bytes from 192.168.2.2: icmp_req=3 ttl=63 time=0.131 ms --- 192.168.2.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 0.131/0.545/1.323/0.550 ms
■今回の仮想ネットワークの作成・削除用シェルスクリプト
引数 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 sudo ip netns delete vrouter1 } 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 add name vlink6-0 type veth peer name vlink6-1 sudo ip link add name vlink7-0 type veth peer name vlink7-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 vlink6-0 up sudo ip link set vlink7-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 link set vlink6-1 up sudo ip link set vlink7-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 add vrouter1 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 netns exec vrouter1 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 link set vlink6-0 netns vrouter1 sudo ip link set vlink7-0 netns vrouter1 sudo ip netns exec vhost1 ifconfig vlink1-0 192.168.1.1 netmask 255.255.255.0 sudo ip netns exec vhost2 ifconfig vlink2-0 192.168.2.1 netmask 255.255.255.0 sudo ip netns exec vhost3 ifconfig vlink3-0 192.168.1.2 netmask 255.255.255.0 sudo ip netns exec vhost4 ifconfig vlink4-0 192.168.2.2 netmask 255.255.255.0 sudo ip netns exec vrouter1 ifconfig vlink6-0 192.168.1.3 netmask 255.255.255.0 sudo ip netns exec vrouter1 ifconfig vlink7-0 192.168.2.3 netmask 255.255.255.0 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 ovs-vsctl add-port vswitch1 vlink6-1 tag=10 sudo ovs-vsctl add-port vswitch1 vlink7-1 tag=20 sudo ip link set vlink5-0 up sudo ip link set vlink5-1 up sudo ip netns exec vhost1 route add default gw 192.168.1.3 sudo ip netns exec vhost2 route add default gw 192.168.2.3 sudo ip netns exec vhost3 route add default gw 192.168.1.3 sudo ip netns exec vhost4 route add default gw 192.168.2.3 } case "$1" in add) set -x add ;; delete) delete > /dev/null 2>&1 ;; *) echo "usage: $0 (add|delete)" esac
最近のコメント