パケットトレースで開くのvSwitch

オープンのvSwitch(OVS)は、プログラム可能なソフトスイッチ操作は、メッセージ内のテキストの各レベルのために実行することができるです。この文書では、パケットは、データ・プレーン間に発生したどのプロセスを理解することのトラッキングツールを使用する方法について説明します。

ovs-vswitchd(8)マニュアルページはofproto / traceコマンドは、Open vSwitchの中の基本的な使用状況の追跡について説明します。OVNは、パケットスイッチ・ロジックを追跡することができますについては、ofproto /参照、同様のツールをトレースovn-trace(8)_。

メッセージ追跡

ツールを理解するために、のは、ストリームを使ってみましょうflow例として:

table=3,ip,tcp,tcp_dst=80,action=output:2
table=2,ip,tcp,tcp_dst=22,action=output:1
table=0,in_port=3,ip,nw_src=192.0.2.0/24,action=resubmit(,2)
table=0,in_port=3,ip,nw_src=198.51.100.0/24,action=resubmit(,3)

注意
あなたが「本物」OVS環境を使用できない場合は、使用可能ovs-sandboxな公式文書として、:/tutorials/ovs-advancedで、それはまた、追加のトラッキングの例を提供します。

表3の最初の行は、TCP / IPパケットの宛先ポート80(HTTP)に一致するルールを追加します。パケットが一致する場合、パケットの操作は、ポート2のOpenFlowに出力されます。

同様に第二列が、一致する宛先ポート22(SSH)。パケットが一致する場合、パケットは出力ポート1のOpenFlowの操作です。

次の2行は、送信元IPアドレスと一致します。これらが一致する場合、パケットは、動作パラメータの再送信によって決定される指定されたテーブルのテーブルに再送信されます。

それでは、IPアドレスから宛先ポート番号はどうかOpenFlowの22ポート1に忠実であること、192.0.2.2を見てみましょう:

    $ ovs-appctl ofproto/trace br0 in_port=3,tcp,nw_src=192.0.2.2,tcp_dst=22
    Flow: tcp,in_port=3,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=00:00:00:00:00:00,nw_src=192.0.2.2,nw_dst=0.0.0.0,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=0,tp_dst=22,tcp_flags=0

    bridge("br0")
    -------------
     0. ip,in_port=3,nw_src=192.0.2.0/24, priority 32768
        resubmit(,2)
     2. tcp,tp_dst=22, priority 32768
        output:1

    Final flow: unchanged
    Megaflow: recirc_id=0,tcp,in_port=3,nw_src=192.0.2.0/24,nw_frag=no,tp_dst=22
    Datapath actions: 1

最初の行は、traceコマンドです。br0橋を通過するメッセージです。次のパラメータは、メッセージ自体を説明します。例えば、nw_src送信元IPアドレスのマッチングを持つフィールド。すべてのパケットフィールドが十分に説明されているovs-fields(7)_マニュアルページを参照してください。

第二行は抽象前述のパケット・ストリームによってコマンドラインを表示します。未指定のメッセージがゼロにフィールド。

次の数行は、BR0ブリッジを介して旅にメッセージを表示します。私たちは、テーブル0で、一致するフィールドのOpenFlowストリームの流れを見て、優先順位は、それが移動します。現在の状況では、我々は、このパケットがパケットストリームの流れは、表2にそれを再送信します一致することを参照してください。「再送信」アクションがオープンフロー表2に第2のルックアップテーブルを引き起こし、それが「2」の行の先頭に少ないです。第二の外観では、我々は、ストリームの流れを見ると、パケットは、OpenFlowの出力ポート#1にパケットを照合します。

要するに、最終的な決定は、可能なトレースストリームフローエントリとそのアクションですまで。最後に、追跡ツールが表示、関連するすべての照合フィールドが含まれている情報、およびデータ・パスの最後の操作をMegaflow。

私たちは80の後に何が起こるかを修正するために、より多くのパケットが、TCP宛先ポートを見てみましょう:

    $ ovs-appctl ofproto/trace br0 in_port=3,tcp,nw_src=192.0.2.2,tcp_dst=80
    Flow: tcp,in_port=3,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=00:00:00:00:00:00,nw_src=192.0.2.2,nw_dst=0.0.0.0,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=0,tp_dst=80,tcp_flags=0

    bridge("br0")
    -------------
     0. ip,in_port=3,nw_src=192.0.2.0/24, priority 32768
        resubmit(,2)
     2. No match.
        drop

    Final flow: unchanged
    Megaflow: recirc_id=0,tcp,in_port=3,nw_src=192.0.2.0/24,nw_frag=no,tp_dst=0x40/0xffc0
    Datapath actions: drop

ラインの第二の部分では、テーブル内のテーブル0は、ルールの送信元IPアドレスと一致するパケットを見ることができるので、上記の表の表2に示されるように、再送信されるべきです。しかし、それは表2のいずれかのルールを満たしていません。任意のルールのパケットフローテーブルが一致しない場合には、テーブルのミスと呼ばれます。ミス行動Openvswitchスイッチは、あなたがオープンフローを使用しているバージョンに応じて、設定することができます。この例では、デフォルトのアクションは、パケットをドロップすることです。

おすすめ

転載: blog.csdn.net/sinat_20184565/article/details/94590422