前回の記事では Linux Bridge with Provider Network のアーキテクチャとパケットフローについて解説しました。今回は Linux Bridge with self-service networks について紹介します。
目次
Linux bridge: セルフサービスネットワーク
セルフサービスネットワークは、ユーザーにほぼ無制限の数の仮想ネットワークを提供します。Neutron は VLAN セルフサービスネットワークもサポートしていますが、本稿では VXLAN セルフサービスネットワークを例に説明します。
アーキテクチャ
上の図は Linux Bridge – セルフサービスネットワーク構成におけるアーキテクチャ全体の概要です。どのコンポーネントが controller node 上で動作し、どれが compute node 上、どれが network node 上で動作しているかを確認できます。
この図は、単一の provider network 下のセルフサービスネットワークで使用されるコンポーネントがどのように接続されているかを示しています。この例では Instance と DHCP agent が同じノードにありますが、実際の状況では DHCP agent が他の compute node 上にある場合もあります。
トラフィックフロー
このセクションでは、さまざまな状況下で実際のパケットがアーキテクチャ内をどのように流れるかを紹介します。
アーキテクチャ設定
以下は想定されるアーキテクチャです。VXLAN によって分離された 2 つのセルフサービスネットワークがあり、それぞれに 1 つのインスタンスが存在します。
- プロバイダーネットワーク 1 (VLAN)
- VLAN ID 101 (タグ付き)
- セルフサービスネットワーク 1 (VXLAN)
- VXLAN ID (VNI) 101
- セルフサービスネットワーク 2 (VXLAN)
- VXLAN ID (VNI) 102
- セルフサービスルーター
- プロバイダーネットワーク上のゲートウェイ
- セルフサービスネットワーク 1 のインターフェース
- セルフサービスネットワーク 2 のインターフェース
- インスタンス 1
- インスタンス 2
南北トラフィック 1:固定 IP のインスタンス
固定 IPv4 アドレスを持つインスタンスの場合、ネットワークノード (network node) はセルフサービスネットワークからインターネットなどの外部ネットワークへ向かう南北トラフィックに対して SNAT を実行します。固定 IPv6 アドレスを持つインスタンスの場合、ネットワークノードは通常のルーティングを介してパケットを外部ネットワークに送信します。
- インスタンスはコンピュートノード 1 上で動作し、セルフサービスネットワーク 1 を使用します
- インスタンスが外部ネットワークへパケットを送信します
- インスタンスのネットワークインターフェース (1) は、veth ペア (2) を介してセルフサービスブリッジのインスタンスポートにパケットを送信します
- セルフサービスブリッジ上の iptables (3) が、ファイアウォールとコネクション追跡を処理します
- セルフサービスブリッジ上の VXLAN インターフェース (4) が、パケットを VNI 101 にカプセル化します
- VXLAN インターフェースに対応する物理ネットワークインターフェース (5) は、オーバーレイネットワークを介してネットワークノード (6) に送信されます
パケットが network node に到達した後:
- VXLAN インターフェースに対応する物理ネットワークインターフェース (7) は、パケットを VXLAN インターフェース (8) に送信し、VXLAN パケットをデカプセル化します
- ルーターのセルフサービスブリッジインターフェース (9) は、セルフサービスルーターの名前空間内にあるセルフサービスネットワークインターフェース (10) にパケットを送信します
- IPv4 の場合、ルーターは SNAT を使用して送信元 IP をルーターの IP に変更した後、プロバイダーネットワーク上のゲートウェイインターフェース (11) を介してゲートウェイにパケットを送信します
- IPv6 の場合、ルーターはパケットをネクストホップ IP アドレス(通常はプロバイダーネットワークのゲートウェイ)に送信します。これもプロバイダーネットワーク上のゲートウェイインターフェース (11) を介して行われます
- ルーターはパケットをルーターのプロバイダーブリッジインターフェース (12) に送信します
- プロバイダーブリッジ上の VLAN サブインターフェースポート (13) は、プロバイダー物理ネットワークインターフェース (14) にパケットを送信します
- プロバイダー物理ネットワークインターフェース (14) は、パケットに VLAN タグ 101 を付与し、物理ネットワーク設備 (15) へ送信します。
その後の部分は、一般的なネットワークの知識と同様です。パケットは物理ネットワーク内のルーターに送られた後、外部へ送信されます。パケットの戻りのフローは、このプロセスを完全に逆にしたものになります。
南北トラフィック 2:Floating IP のインスタンス
固定 IPv4 アドレスを持つインスタンスの場合、ネットワークノード (network node) はセルフサービスネットワークからインターネットなどの外部ネットワークへ向かう南北トラフィックに対して SNAT を実行し、外部ネットワークから戻ってくるトラフィックに対して DNAT を実行します。Floating IP は IPv6 には適用されません。
インスタンスから外網へ向かうパケットフローは例 1 と同じであるため、ここでは詳しく説明しません。唯一の違いは、SNAT の IP がルーターの IP ではなく Floating IP に置き換わっている点です。ここでは、外網から戻ってくるトラフィックについて紹介します。
- インスタンスはコンピュートノード 1 上で動作し、セルフサービスネットワーク 1 を使用します
- 外部ネットワークはパケットをインスタンスへ送信します。
外網からのパケットが network node に到達した後:
- 物理ネットワーク設備 (1) は、パケットをプロバイダー物理ネットワークインターフェース (2) へ送信します。
- プロバイダー物理ネットワークインターフェース (2) は、VLAN タグ 101 を削除した後、プロバイダーブリッジ上の VLAN サブインターフェースポート (3) へ送信します。
- プロバイダーブリッジ (4) は、パケットをセルフサービスルーターのプロバイダーゲートウェイインターフェース (5) へ送信します。
- IPv4 の場合、ルーターは DNAT を使用して宛先 IP をインスタンスの IP に変更した後、セルフサービスインターフェース (6) を介してパケットをセルフサービスネットワークへ送信します。
- IPv6 の場合、ルーターはパケットをネクストホップ IP アドレス(通常はセルフサービスネットワークのゲートウェイ)へ送信し、これもセルフサービスインターフェース (6) を経由します。
- ルーターはパケットをセルフサービスブリッジルーターインターフェース (7) へ送信します。
- セルフサービスブリッジは、パケットを VXLAN インターフェース (8) へ送信し、パケットを VNI 101 にカプセル化します。
- 物理ネットワークインターフェース (9) は、オーバーレイネットワーク (10) を介して VXLAN パケットをコンピュートノードへ送信します。
パケットが compute node に到達した後:
- 物理ネットワークインターフェース (11) は、パケットを VXLAN インターフェース (12) へ送信し、VNI 101 をデカプセル化します。
- セルフサービスブリッジ上の iptables (13) が、ファイアウォールとコネクショントラッキングを処理します。
- セルフサービスブリッジのインスタンスポート (14) は、veth ペアを介してパケットをインスタンスのネットワークインターフェース (15) へ送信します。
以上が、Floating IP 使用時の戻りパケットのフローです。
東西トラフィック 1:同一ネットワーク内のインスタンス
- インスタンス 1 はコンピュートノード 1 上にあり、セルフサービスネットワーク 1 を使用します。
- インスタンス 2 はコンピュートノード 2 上にあり、セルフサービスネットワーク 1 を使用します。
- インスタンス 1 がインスタンス 2 へパケットを送信します。
前述の状況は全く同じです。
- インスタンスのネットワークインターフェース (1) は、veth ペア (2) を介してセルフサービスブリッジのインスタンスポートにパケットを送信します
- セルフサービスブリッジ上の iptables (3) が、ファイアウォールとコネクション追跡を処理します
- セルフサービスブリッジ上の VXLAN インターフェース (4) が、パケットを VNI 101 にカプセル化します
- VXLAN インターフェースに対応する物理ネットワークインターフェース (5) は、オーバーレイネットワークを介してコンピュートノード 2 (6) へ送信します。
パケットが compute node 2 に到達した後:
- 物理ネットワークインターフェース (7) はパケットを VXLAN インターフェース (8) へ送信し、VNI 101 を解除します。
- セルフサービスブリッジ上の iptables (9) が、ファイアウォールとコネクショントラッキングを処理します。
- セルフサービスブリッジのインスタンスポート (10) は、veth ペアを介してインスタンスのネットワークインターフェース (11) へパケットを送信します。
東西トラフィック 2:異なるネットワーク間のインスタンス
- インスタンス 1 はコンピュートノード 1 上にあり、セルフサービスネットワーク 1 を使用します。
- インスタンス 2 はコンピュートノード 1 上にあり、セルフサービスネットワーク 2 を使用します。
- インスタンス 1 がインスタンス 2 へパケットを送信します。
最初にパケットが送信されるプロセスも同様です。
- インスタンスのネットワークインターフェース (1) は、veth ペア (2) を介してセルフサービスブリッジのインスタンスポートにパケットを送信します
- セルフサービスブリッジ上の iptables (3) が、ファイアウォールとコネクション追跡を処理します
- セルフサービスブリッジ上の VXLAN インターフェース (4) が、パケットを VNI 101 にカプセル化します
- VXLAN インターフェースに対応する物理ネットワークインターフェース (5) は、オーバーレイネットワークを介してコンピュートノード 2 (6) へ送信します。
パケットが network node に到達した後:
- VXLAN インターフェースに対応する物理ネットワークインターフェース (7) は、パケットを VXLAN インターフェース (8) に送信し、VXLAN パケットをデカプセル化します
- ルーターのセルフサービスブリッジインターフェース (9) は、セルフサービスルーターの名前空間内にあるセルフサービスネットワーク 1 インターフェース (10) へパケットを送信します。
- ルーターは、セルフサービスネットワーク 2 インターフェース (11) を介して、セルフサービスネットワークのゲートウェイへパケットを送信します。
- ルーターは、ルーターのセルフサービスネットワーク 2 ブリッジインターフェース (12) へパケットを送信します。
- セルフサービスネットワーク 2 ブリッジは、パケットを VNI 102 でカプセル化し、VXLAN インターフェースへ送信します。
- VXLAN インターフェースに対応する物理ネットワークインターフェース (14) は、オーバーレイネットワークを介してコンピュートノード 1 へパケットを送信します。
compute node 1 に戻ります:
- 物理ネットワークインターフェース (16) はパケットを VXLAN インターフェース (17) へ送信し、VNI 102 を解除します。
- セルフサービスブリッジ上の iptables (18) が、ファイアウォールとコネクショントラッキングを処理します。
- セルフサービスブリッジのインスタンスポート (19) は、veth ペアを介してインスタンスのネットワークインターフェース (20) へパケットを送信します。
以上が、さまざまな状況下における Linux Bridge セルフサービスネットワークのパケットトラフィックです。
まとめ
本記事では、Linux Bridge セルフサービスネットワークにおけるアーキテクチャとパケットの流れについて紹介しました。ネットワークパケットがどのように流れるかを理解することで、ネットワークの疎通確認(デバッグ)を行う際により明確なイメージを持てるようになります。次回の記事では、Open vSwitch: Provider networks を使用したアーキテクチャとパケットの流れについて紹介します。
著作権表示:特に断りのない限り、本ブログのすべての記事はCC BY-NC-SA 4.0ライセンスの下で提供されています。






