クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ovs-ofctlでフローを書く

このレッスンのあとで: 通信の方針を、ovs-ofctl のフローの行に書き直せる。

60分のレッスンコマンド9件SDN のラボ:Open vSwitch、Mininet、OpenFlow コントローラーを1台の VM で

方針をフローの行に直す

ovs-ofctl add-flow は、Open vSwitch のフローテーブルに規則を1行足すコマンドです。文章で決めた方針を、フローの行に直す作業に使います。

方針を行に直せれば、SDN の管理者の基本の仕事ができます。このレッスンでは、通すものと止めるものを書き分けます。

このレッスンのゴール

メモ

通信の方針を、ovs-ofctl のフローの行に書き直せる。

重要な言葉

ことばいみれい
add-flowスイッチにフローを1行足すコマンド
ARPIP アドレスから MAC アドレスを聞く仕組み
ドロップ合った枠を捨てるアクションactions=drop
既定の拒否許していない通信は、すべて止める考え方
TCP ポート1台の中で、使うサービスを分ける番号80

学生が入力するセルは、このプレビューでは空白です。

方針の例: ウェブだけを通す

次の方針を、フローにします。ポート1のノートパソコンは、ポート2のサーバのウェブ(TCP の80番)だけを使えます。それ以外は、すべて止めます。

ノートパソコンの IP アドレスは 10.0.1.1、サーバは 10.0.1.2 とします。

方針とフローの対応

方針フローの行
ARP を通す(1番から2番)priority=100,arp,in_port=1,actions=output:2
ARP を通す(2番から1番)priority=100,arp,in_port=2,actions=output:1
ウェブの依頼を通すpriority=90,tcp,in_port=1,nw_dst=10.0.1.2,tp_dst=80,actions=output:2
ウェブの返事を通すpriority=90,tcp,in_port=2,nw_dst=10.0.1.1,tp_src=80,actions=output:1
ほかはすべて捨てるpriority=10,actions=drop

学生が入力するセルは、このプレビューでは空白です。

ARP を通さないと IP の通信は始まらない

ノートパソコンは、サーバの MAC アドレスを知らないと、枠を送れません。そこで最初に ARP で、「10.0.1.2 の MAC アドレスは?」と聞きます。

この ARP の枠を止めると、ウェブの依頼は1つも出ません。IP のフローだけを書いて「つながらない」と悩むのは、よくある失敗です。

sw1 に5行を入れて試す

前のレッスンの sw1 を使います。なければ、最初の Run で作ります。次に、表を空にしてから、5行をまとめて入れます。

printf が5行を作り、add-flows が標準入力の - から読みます。フローの書き方に誤りがあれば、足す前に、エラーで教えてくれます。

sw1 を作る

コマンド
sudo ovs-vsctl --may-exist add-br sw1 -- set bridge sw1 datapath_type=system protocols=OpenFlow13 fail-mode=secure -- --may-exist add-port sw1 p1 -- set interface p1 type=internal ofport_request=1 -- --may-exist add-port sw1 p2 -- set interface p2 type=internal ofport_request=2 -- --may-exist add-port sw1 p3 -- set interface p3 type=internal ofport_request=3 -- --may-exist add-port sw1 p4 -- set interface p4 type=internal ofport_request=4

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

規則表を空にする

コマンド
sudo ovs-ofctl -O OpenFlow13 del-flows sw1

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

5行をまとめて入れる

コマンド
printf 'priority=100,arp,in_port=1,actions=output:2\npriority=100,arp,in_port=2,actions=output:1\npriority=90,tcp,in_port=1,nw_dst=10.0.1.2,tp_dst=80,actions=output:2\npriority=90,tcp,in_port=2,nw_dst=10.0.1.1,tp_src=80,actions=output:1\npriority=10,actions=drop\n' | sudo ovs-ofctl -O OpenFlow13 add-flows sw1 -

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

入った行を見る

コマンド
sudo ovs-ofctl -O OpenFlow13 --no-stats dump-flows sw1

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

わざと間違える

コマンド
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 priority=5,nonsense=3,actions=drop

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

trace で方針どおりか確かめる

入れた5行が方針どおりに働くかを、ofproto/trace で確かめます。ウェブの依頼、別のポートへの依頼、ARP、ウェブの返事の4つを試します。

1つ目は優先度90、2つ目は優先度10、3つ目は優先度100、4つ目は優先度90のフローに当たるはずです。

ウェブの依頼

コマンド
sudo ovs-appctl ofproto/trace sw1 tcp,in_port=1,nw_src=10.0.1.1,nw_dst=10.0.1.2,tp_dst=80 | grep -E "No match|priority"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

22番への依頼

コマンド
sudo ovs-appctl ofproto/trace sw1 tcp,in_port=1,nw_src=10.0.1.1,nw_dst=10.0.1.2,tp_dst=22 | grep -E "No match|priority"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ARP の問い合わせ

コマンド
sudo ovs-appctl ofproto/trace sw1 arp,in_port=1 | grep -E "No match|priority"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ウェブの返事

コマンド
sudo ovs-appctl ofproto/trace sw1 tcp,in_port=2,nw_src=10.0.1.2,nw_dst=10.0.1.1,tp_src=80 | grep -E "No match|priority"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

IP の通信を通すフローだけで足りる、と思いがちです。実際は、IP の前に ARP があります。ARP を通すフローがないと、IP の枠は1つも出ません。返事の向きの流れも、別のフローが要ります。

このラボとソースについて: SDN のラボ:Open vSwitch、Mininet、OpenFlow コントローラーを1台の VM で

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。