猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

OpenVSwitch上でのOpenFlowの手動設定

 OpenVSwitchはOpenFlowコントローラと接続することでOpenFlowスイッチとして動作させられます。しかしコントローラと接続せずに手動でフローエントリを設定することも可能です。

以下に手動でフローエントリを設定するまでの流れをまとめました。

1.「ブリッジを作成」
2.「作成したブリッジにポートを追加」
3.「追加したポートからのパケットを制御するためのフローエントリの設定」

の順で設定します。

 「ブリッジの作成」および「作成したブリッジにポートを追加」に関してはこちら

OpenVSwitchの基本設定 - 猫型エンジニアのブログ
を参照してください。

フローエントリの設定

 以下のルールおよびアクションを組み合わせる事でL1-L4まで含めた柔軟なトラフィックの制御が可能になります。詳細な情報はここを参考にしてください。ブリッジとしてはbr100を作成済みの状態出始めています。

設定したフローエントリの確認

以下のコマンドでブリッジbr100に設定されているフローエントリを使用できます。

# ovs-ofctl dump-flows br100

L1のルールおよびアクションの設定

入力ポート番号および出力ポート番号を指定できます。他に含めようがないのでポート番号の入出力の制御はL1の扱いにしました。

  • 1番ポートからの入力トラフィックを2番ポートに転送するフローエントリ
# ovs-ofctl add-flow br100 in_port=1,actions=output:2

L2のルールおよびアクションの設定

 L2ではMACアドレスARPを指定できます。

# ovs-ofctl add-flow br100 arp,actions=all
  • ARPリクエストは全ポートに転送するフローエントリ(リプライはarp_op=2)
# ovs-ofctl add-flow br100 arp,arp_op=1,actions=all
  • 宛先MACアドレスがaa:aa:aa:bb:bb:bbなら、送信元MACアドレスを11:11:11:22:22:22に変更して全ポートに転送するフローエントリ
# ovs-ofctl add-flow br100 dl_src=aa:aa:aa:bb:bb:bb,actions=mod_dl_src=11:11:11:22:22:22,output:all

MPLSのルールおよびアクションの設定

OpenVSwitchのバージョンやカーネルのバージョンによっては動作しないので注意してください。
またMPLSをルールに指定した場合はリサーキュレートしない限りIP等のL3以上はルールに指定ができません。逆も同様で、MPLSとL3以上のルールは排他的な関係になります。

  • 1番ポートからのトラフィックには、MPLSラベル100を付与して101番ポートに転送するフローエントリ
ovs-ofctl add-flow br100 in_port=1,actions=push_mpls:0x8847,set_field:100->mpls_label,output:101
  • MPLSラベルが10ならば、ラベルを削除して宛先MACアドレスを11:22:33:44:55:66に変更して2番ポートに転送するフローエントリ
ovs-ofctl add-flow br100 mpls,mpls_label=10,actions=pop_mpls:0x0800,mod_dl_dst=11:22:33:44:55:66,output:2

VLANのルールおよびアクションの設定

L3のルールおよびアクションの設定

 ルールに明示的にIPを指定する必要があります。

  • 宛先IPアドレスが192.168.1.100のパケットの送信元IPアドレスを192.168.1.1に変更して5番ポートに転送するフローエントリ
# ovs-ofctl add-flow br100 ip,nw_dst=192.168.1.100,actions=mod_nw_src=192.168.1.1,output:5

L4のルールおよびアクションの設定