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アドレスは下図のような固定設定にしています。
動作確認環境の概要は以下の図のとおりです。
#ref(): File not found: "" at page "OpenFlow/OpenvSwitch_x86"
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/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/OpenFlow Turorial 2で行った動作確認と同様の手順でOpenFlow Switchの動作確認を行います。
PC(Switch)上の別ターミナルでWiresharkを起動しFilterに「of」を設定します。
$ sudo wireshark
PC(Controller)上の別ターミナルでcontrollerコマンドを実行します。
$ controller ptcp:
その際PC(Switch)上のWireshark上でOpenFlow Packetがキャプチャされていることを確認します。
#ref(): File not found: "" at page "OpenFlow/OpenvSwitch_x86"