« ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク | トップページ | ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(VLANホスト追加) »

2013年4月25日 (木)

◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(ルータ追加)

前回の記事の仮想ネットワークに仮想ルータを追加してみました。仮想ルータといってもネットワークネームスペースを1つ追加してそこに2つの仮想ネットワークインターフェースをつなげただけ。

こんなに簡単に仮想ルータができて驚いた。

■今回作成した仮想ネットワークの論理構成図

Kousei2_2


■今回作成した仮想ネットワークの構成図(物理?)

各 vhost のIPアドレスは振りなおした上で、vrouter1を追加しています。

Kousei1_6

■動作確認

(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

« ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク | トップページ | ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(VLANホスト追加) »

仮想ネットワーク」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

« ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク | トップページ | ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(VLANホスト追加) »

最近のトラックバック

無料ブログはココログ