4.4. フラットプロバイダーネットワークのパケットフローが機能する仕組み
本項では、フラットプロバイダーネットワークが設定された状況で、インスタンスに対するトラフィックがどのように送付されるかについて詳しく説明します。
フラットプロバイダーネットワークでの送信トラフィックのフロー
以下の図で、インスタンスから送信され直接外部ネットワークに到達するトラフィックのパケットフローについて説明します。br-ex 外部ブリッジを設定した後に、物理インターフェイスをブリッジに追加してインスタンスをコンピュートノードに作成すると、得られるインターフェイスとブリッジの設定は、以下の図のようになります (iptables_hybrid ファイアウォールドライバーを使用する場合)。

-
パケットはインスタンスの
eth0インターフェイスから送信され、linux ブリッジqbr-xxに到達します。 -
ブリッジ
qbr-xxは、veth ペアqvb-xx <-> qvo-xxxを使用してbr-intに接続されます。これは、セキュリティーグループによって定義されている受信/送信のファイアウォールルールの適用にブリッジが使用されるためです。 -
インターフェイス
qvb-xxはqbr-xxlinux ブリッジに、qvo-xxはbr-intOpen vSwitch (OVS) ブリッジに接続されています。
`qbr-xx`Linux ブリッジの設定例:
# brctl show qbr269d4d73-e7 8000.061943266ebb no qvb269d4d73-e7 tap269d4d73-e7
br-int 上の qvo-xx の設定:
# ovs-vsctl show
Bridge br-int
fail_mode: secure
Interface "qvof63599ba-8f"
Port "qvo269d4d73-e7"
tag: 5
Interface "qvo269d4d73-e7"
ポート qvo-xx は、フラットなプロバイダーネットワークに関連付けられた内部 VLAN タグでタグ付けされます。この例では VLAN タグは 5 です。パケットが qvo-xx に到達する際に、VLAN タグがパケットのヘッダーに追加されます。
次にこのパケットは、パッチピア int-br-ex <-> phy-br-ex を使用して br-ex OVS ブリッジに移動します。
br-int でのパッチピアの設定例を以下に示します。
# ovs-vsctl show
Bridge br-int
fail_mode: secure
Port int-br-ex
Interface int-br-ex
type: patch
options: {peer=phy-br-ex}
br-ex でのパッチピアの設定例
Bridge br-ex
Port phy-br-ex
Interface phy-br-ex
type: patch
options: {peer=int-br-ex}
Port br-ex
Interface br-ex
type: internal
このパケットが br-ex の phy-br-ex に到達すると、br-ex 内の OVS フローにより VLAN タグ (5) が取り除かれ、物理インターフェイスに転送されます。
以下の出力例では、phy-br-ex のポート番号は 2 となっています。
# ovs-ofctl show br-ex
OFPT_FEATURES_REPLY (xid=0x2): dpid:00003440b5c90dc6
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
2(phy-br-ex): addr:ba:b5:7b:ae:5c:a2
config: 0
state: 0
speed: 0 Mbps now, 0 Mbps max
以下の出力例では、VLAN タグが 5 (dl_vlan=5) の phy-br-ex (in_port=2) に到達するパケットを示しています。また、br-ex の OVS フローにより VLAN タグが取り除かれ、パケットが物理インターフェイスに転送されます。
# ovs-ofctl dump-flows br-ex NXST_FLOW reply (xid=0x4): cookie=0x0, duration=4703.491s, table=0, n_packets=3620, n_bytes=333744, idle_age=0, priority=1 actions=NORMAL cookie=0x0, duration=3890.038s, table=0, n_packets=13, n_bytes=1714, idle_age=3764, priority=4,in_port=2,dl_vlan=5 actions=strip_vlan,NORMAL cookie=0x0, duration=4702.644s, table=0, n_packets=10650, n_bytes=447632, idle_age=0, priority=2,in_port=2 actions=drop
物理インターフェイスが別の VLAN タグ付けされたインターフェイスの場合、その物理インターフェイスはパケットにタグを追加します。
フラットプロバイダーネットワークでの受信トラフィックのフロー
本項では、外部ネットワークからの受信トラフィックがインスタンスのインターフェイスに到達するまでのフローについて説明します。

-
受信トラフィックは、物理ノードの
eth1に到達します。 -
パケットは
br-exブリッジに移動します。 -
このパケットは、パッチピア
phy-br-ex <--> int-br-exを通じてbr-intに移動します。
以下の例では、int-br-ex はポート番号 15 を使用します。15(int-br-ex) が含まれるエントリーに注目してください。
# ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:00004e67212f644d
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
15(int-br-ex): addr:12:4e:44:a9:50:f4
config: 0
state: 0
speed: 0 Mbps now, 0 Mbps maxbr-int のトラフィックフローの確認
パケットが
int-br-exに到達すると、br-intブリッジ内の OVS フロールールにより、内部 VLAN タグ5を追加するようにパケットが変更されます。actions=mod_vlan_vid:5のエントリーを参照してください。# ovs-ofctl dump-flows br-int NXST_FLOW reply (xid=0x4): cookie=0x0, duration=5351.536s, table=0, n_packets=12118, n_bytes=510456, idle_age=0, priority=1 actions=NORMAL cookie=0x0, duration=4537.553s, table=0, n_packets=3489, n_bytes=321696, idle_age=0, priority=3,in_port=15,vlan_tci=0x0000 actions=mod_vlan_vid:5,NORMAL cookie=0x0, duration=5350.365s, table=0, n_packets=628, n_bytes=57892, idle_age=4538, priority=2,in_port=15 actions=drop cookie=0x0, duration=5351.432s, table=23, n_packets=0, n_bytes=0, idle_age=5351, priority=0 actions=drop
-
2 番目のルールは、VLAN タグのない (vlan_tci=0x0000) int-br-ex (in_port=15) に到達するパケットを管理します。このルールはパケットに VLAN タグ 5 を追加し (
actions=mod_vlan_vid:5,NORMAL)、qvoxxxに転送します。 -
qvoxxxは、VLAN タグを削除した後に、パケットを受け入れてqvbxxに転送します。 - 最終的にパケットはインスタンスに到達します。
VLAN tag 5 は、フラットプロバイダーネットワークを使用するテスト用コンピュートノードで使用したサンプルの VLAN です。この値は neutron-openvswitch-agent により自動的に割り当てられました。この値は、お使いのフラットプロバイダーネットワークの値とは異なる可能性があり、2 つの異なるコンピュートノード上にある同じネットワークにおいても異なる可能性があります。