labs.beatcraft.com OpenFlow

OpenFlow/Open vSwitch_x86

PC(x86マシン)を2台使用し、それぞれをOpenFlow ControllerとOpenFlow Switchに
設定してOpenFlowTutorial 1,2の動作確認手順について記載します。

OpenFlow ControllerとOpenFlow Switchとして使用するPCは共に
mininetの環境を設定している前提で記載をします。
使用するOSはUbuntu 12.04(32bit版)です。

mininetの設定についてはこちらを参照してください。

ホストに使用するマシンはLinux OSをインストールしたマシンを使用します。
本稿ではUbuntu 12.04(32bit版)をインストールしたx86 PCとbc10を使用しています。

インストール完了後、各機器のIPアドレスは下図のような固定設定にしています。
動作確認環境の概要は以下の図のとおりです。

SwithEnv.png

OpenFlow Switchの起動

PC(Switch)上でOpen vSwitchを使用しOpenFlow Switchを設定、起動します。

PC起動後ovsdb-server,ovs-vswitchdが起動しているか確認します。
起動していない場合は、/etc/init.d/openvswitch-swtich startを実行します。

$ sudo /etc/init.d/openvswitch-switch start

以下はopenvswitch-switch start実行後の「ps axu | grep ovs」の結果です。

$ ps axu | grep ovs
root      1360  0.0  0.0   4780   416 ?        S<   16:12   0:03 ovsdb-server: monitoring pid 1361 (healthy)                                                                                                                         
root      1361  0.0  0.1   4904  1652 ?        S<s  16:12   0:01 ovsdb-server /etc/openvswitch/conf.db -vANY:CONSOLE:EMER -vANY:SYSLOG:ERR -vANY:FILE:INFO --remote=punix:/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,manager_options --private-key=db:SSL,private_key --certificate=db:SSL,certificate --bootstrap-ca-cert=db:SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor
root      1388  0.0  0.0   5464   692 ?        S<   16:12   0:03 ovs-vswitchd: monitoring pid 1389 (healthy)                                                                                                                        
root      1389  0.0  0.1   5468  1692 ?        S<s  16:12   0:01 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vANY:CONSOLE:EMER -vANY:SYSLOG:ERR -vANY:FILE:INFO --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
beat      3713  0.0  0.0   5364   840 pts/3    S+   17:14   0:00 grep --color=auto ovs

必要のないブリッジデバイスが存在していないか確認をします。

注:前回起動時にOpen vSwitchのブリッジデバイスを作成し削除せずに終了させた場合、
そのブリッジデバイスは作成されたままになります。

# ovs-vsctl show

もし必要のないブリッジデバイスが存在している場合はそのブリッジデバイスを削除します。
ここではブリッジデバイスはbr0とします。

# ovs-vsctl del-br br0

新規にブリッジデバイス(br0)を作成し、eth2,eth3をbr0に含めます。

# ovs-vsctl add-br br0
# ovs-vsctl add-port br0 eth2
# ovs-vsctl add-port br0 eth3

各デバイスを起動します。

# ifconfig eth2 up
# ifconfig eth3 up
# ifconfig br0 up

ブリッジデバイスにOpenFlow Controllerの設定を追加します。
ここではコントローラはtcp接続でアドレスは192.168.1.10、ポートは6633、
スイッチはtcp 6634ポートを設定します。

# ovs-vsctl set-controller br0 tcp:192.168.1.10:6633 ptcp:6634

fail-modeをsecureに設定し、無設定時のhost間の通信を遮断します。

# ovs-vsctl set-fail-mode br0 secure

上記までの設定が以下のように反映されているか確認します。

# ovs-vsctl show
b8c00762-8c74-455b-9c96-3a9e9c8cf275
    Bridge "br0"
        Controller "ptcp:6634"
        Controller "tcp:192.168.1.10:6633"
        fail_mode: secure
        Port "eth2"
            Interface "eth2"
        Port "eth3"
            Interface "eth3"
        Port "br0"
            Interface "br0"
                type: internal
    ovs_version: "1.4.0+build0"

これでSwitchの設定は完了です。

OpenFlow Switchの動作確認

OpenFlow Switchの動作確認を行います。

OpenFlow Tutorial 1

OpenFlow/OpenFlow Turorial 1で行った動作確認と同様の手順でOpenFlow Switchの動作確認を行います。

PC(Controller)からdpctlコマンドでスイッチの状態を確認します。
port1,2に各ethが割り当てられていることが解ります。

$ dpctl show tcp:192.168.1.1:6634
features_reply (xid=0x23ede000): ver:0x1, dpid:d0b6a5b34
n_tables:255, n_buffers:256
features: capabilities:0xc7, actions:0xfff
1(eth3): addr:00:0d:0b:6a:5b:34, config: 0, state:0x1
     current:    10MB-HD AUTO_NEG
     advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-FD COPPER AUTO_NEG AUTO_PAUSE
     supported:  10MB-HD 10MB-FD 100MB-HD 100MB-FD 1GB-HD 1GB-FD COPPER AUTO_NEG
2(eth2): addr:00:1d:73:2e:91:94, config: 0, state:0x1
     current:    10MB-HD AUTO_NEG
     advertised: 10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER AUTO_NEG AUTO_PAUSE
     supported:  10MB-HD 10MB-FD 100MB-HD 100MB-FD COPPER AUTO_NEG
LOCAL(br0): addr:00:0d:0b:6a:5b:34, config: 0, state:0
get_config_reply (xid=0x272fb894): miss_send_len=0

スイッチにflowテーブルが存在しないことを確認します。

$ dpctl dump-flows tcp:192.168.1.1:6634
stats_reply (xid=0x3c4353aa): flags=none type=1(flow)

Host1、Host2間でpingを実行しそれぞれのホストへ到達しないことを確認します。

$ ping -c3 192.168.11.1
PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
From 192.168.11.2 icmp_seq=1 Destination Host Unreachable
From 192.168.11.2 icmp_seq=2 Destination Host Unreachable
From 192.168.11.2 icmp_seq=3 Destination Host Unreachable

PC(Controller)からport1,2間のパケットを通すflowテーブルを追加します。

$ dpctl add-flow tcp:192.168.1.1:6634 in_port=1,actions=output:2
$ dpctl add-flow tcp:192.168.1.1:6634 in_port=2,actions=output:1

flowテーブルが追加されていることを確認します。

$ dpctl dump-flows tcp:192.168.1.1:6634stats_reply (xid=0x52955575): flags=none type=1(flow)
  cookie=0, duration_sec=9s, duration_nsec=443000000s, table_id=0, priority=32768, n_packets=0, n_bytes=0, idle_timeout=60,hard_timeout=0,in_port=1,actions=output:2
  cookie=0, duration_sec=2s, duration_nsec=309000000s, table_id=0, priority=32768, n_packets=0, n_bytes=0, idle_timeout=60,hard_timeout=0,in_port=2,actions=output:1

再度Host1、Host2間でpingを実行しそれぞれのホストへ到達することを確認します。

$ ping -c3 192.168.11.1
PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
64 bytes from 192.168.11.1: icmp_req=1 ttl=64 time=6.89 ms
64 bytes from 192.168.11.1: icmp_req=2 ttl=64 time=2.07 ms
64 bytes from 192.168.11.1: icmp_req=3 ttl=64 time=1.74 ms

--- 192.168.11.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 1.740/3.570/6.897/2.357 ms

一定時間経過後追加したflowテーブルが消えていることを確認します。

$ dpctl dump-flows tcp:192.168.1.1:6634
stats_reply (xid=0x68565278): flags=none type=1(flow)

OpenFlow Tutorial 2

OpenFlow/OpenFlow Turorial 2で行った動作確認と同様の手順でOpenFlow Switchの動作確認を行います。

PC(Switch)上の別ターミナルでWiresharkを起動しFilterに「of」を設定します。

$ sudo wireshark

PC(Controller)上の別ターミナルでcontrollerコマンドを実行します。

$ controller ptcp:

その際PC(Switch)上のWireshark上でOpenFlow Packetがキャプチャされていることを確認します。

OVS.png

Host1、Host2間でpingを実行しそれぞれのホストへ到達することを確認します。

$ ping -c3 192.168.11.1
PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
64 bytes from 192.168.11.1: icmp_req=1 ttl=64 time=11.3 ms
64 bytes from 192.168.11.1: icmp_req=2 ttl=64 time=2.86 ms
64 bytes from 192.168.11.1: icmp_req=3 ttl=64 time=2.41 ms

--- 192.168.11.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 2.410/5.534/11.323/4.097 ms

またPC(Controller)上からPC(Switch)のフローテーブルが増加していることを確認します。

$ dpctl dump-flows tcp:192.168.1.1:6634
stats_reply (xid=0xac113424): flags=none type=1(flow)
 cookie=0, duration_sec=11s, duration_nsec=597000000s, table_id=0, priority=65535, n_packets=3, n_bytes=294,idle_timeout=60,hard_timeout=0,icmp,in_port=1,dl_vlan=0xffff,dl_vlan_pcp=0x00,dl_src=4c:e6:76:55:44:d0,dl_dst=00:0f:b0:f7:28:07,nw_src=192.168.11.2,nw_dst=192.168.11.1,nw_tos=0x00,icmp_type=8,icmp_code=0,actions=output:2
  cookie=0, duration_sec=11s, duration_nsec=594000000s, table_id=0, priority=65535, n_packets=3, n_bytes=294,idle_timeout=60,hard_timeout=0,icmp,in_port=2,dl_vlan=0xffff,dl_vlan_pcp=0x00,dl_src=00:0f:b0:f7:28:07,dl_dst=4c:e6:76:55:44:d0,nw_src=192.168.11.1,nw_dst=192.168.11.2,nw_tos=0x00,icmp_type=0,icmp_code=0,actions=output:1
  cookie=0, duration_sec=6s, duration_nsec=592000000s, table_id=0, priority=65535, n_packets=1, n_bytes=60,idle_timeout=60,hard_timeout=0,arp,in_port=2,dl_vlan=0xffff,dl_vlan_pcp=0x00,dl_src=00:0f:b0:f7:28:07,dl_dst=4c:e6:76:55:44:d0,nw_src=192.168.11.1,nw_dst=192.168.11.2,nw_proto=1,actions=output:1
  cookie=0, duration_sec=6s, duration_nsec=588000000s, table_id=0, priority=65535, n_packets=1, n_bytes=60,idle_timeout=60,hard_timeout=0,arp,in_port=1,dl_vlan=0xffff,dl_vlan_pcp=0x00,dl_src=4c:e6:76:55:44:d0,dl_dst=00:0f:b0:f7:28:07,nw_src=192.168.11.2,nw_dst=192.168.11.1,nw_proto=2,actions=output:2
  cookie=0, duration_sec=11s, duration_nsec=599000000s, table_id=0, priority=65535, n_packets=1, n_bytes=60,idle_timeout=60,hard_timeout=0,arp,in_port=2,dl_vlan=0xffff,dl_vlan_pcp=0x00,dl_src=00:0f:b0:f7:28:07,dl_dst=4c:e6:76:55:44:d0,nw_src=192.168.11.1,nw_dst=192.168.11.2,nw_proto=2,actions=output:1

以上でOpenFlow Tutorial1,2と同様の動作確認は完了です。
(性能差については本稿では省略しています)

Topic: OpenFlow Reference実装との差異

本稿のOpenFlowの動作確認バージョンは1.0で、既に更新されていない
OpenFlow ReferenceをControllerとして使用しています。

OpenFlow Reference実装を使用したOpenFlow Switchを作成した際、
Open vSwitchと異なる点があります。

Open vSwitchを使用したOpenFlow SwitchではActionsが0x00000fffとなりますが、
OpenFlow Reference実装を使用したOpenFlow SwitchではActionsが0x00000effとなります。
これはOpenFlow Reference実装を使用したOpenFlow SwitchではSet IP TOS bitがNoになるためです。

Open vSwitchではこの修正、改良が含まれているためSet IP TOS bitがYesになっています。

OpenFlow Reference実装を使用したOpenFlow Switchの作成は以下の
コマンドにて確認しています。(Controller側は上記と同じコマンドで確認しています)

# ofdatapath punix:/var/run/dp0.sock -i eth2,eth3 --local-port=tap:tap0 -D
# ofprotocol unix:/var/run/dp0.sock tcp:192.168.1.10:6633 --out-of-band --fail=closed --listen=ptcp:6634
OpenVswitch.png

図1. Open vSwitchを使用したOpenFlow SwtichのActions

OpenFlow.png

図2. OpenFlow Referenceを使用したOpenFlow SwitchのActions


添付ファイル: fileOVS.png 1985件 [詳細] fileOpenVswitch.png 1918件 [詳細] fileOpenFlow.png 1945件 [詳細] fileSwithEnv.png 2003件 [詳細]

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2013-04-30 (火) 21:23:23 (4015d)