Dockerネットワークにおけるブリッジとvethの関係

Dockerネットワークにおけるブリッジとvethの関係

Ubuntu 22.04ホストでブリッジドライバを使用してDockerネットワークを作成し、ネットワーク上のコンテナを起動しました。

私のホストで実行すると、ip addr次の2つのインターフェイスが表示されます。

5: br-fc7599764562: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:d4:4f:b9:39 brd ff:ff:ff:ff:ff:ff
    inet 172.21.0.1/16 brd 172.21.255.255 scope global br-fc7599764562
        valid_lft forever preferred_lft forever
    inet6 fe80::42:d4ff:fe4f:b939/64 scope link
        valid_lftforever preferred_lft forever
6: vethe6879a0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-fc7599764562 state UP group default
    link/ether e2:e8:0f:5b:37:a0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::e0e8:fff:fe5b:37a0/64 scope link
        valid_lft forever preferred_lft forever

2番目のインターフェイスは最初のインターフェイスを「デフォルト」としてリストしているので、両方のインターフェイスは間違いなく関連しています。どんな関係ですか?

この質問に関するいくつかの背景情報:実際には、各ネットワークにコンテナを持つ2つのDockerネットワークがあります。 iptablesを使ってそれらの間にNATを設定します(あるいは、少なくともそうしたと思います)あるコンテナから別のコンテナにpingを試みています。ホストで Wireshark を実行すると、ICMP パケットがブリッジ インターフェイスから到着し、 veth インターフェイス (別のブリッジではない) から送信されることがわかります。

答え1

ブリッジデバイスは仮想スイッチです。インターフェイスは、vethコンテナを「スイッチ」に接続する仮想イーサネットケーブルです。 veth デバイスを作成すると、2 つのインターフェイスが作成されます。 Dockerは1つのインタフェースをコンテナ内に配置し(つまり、eth0コンテナ内のインタフェースになる)、別のインタフェースを配置します。デバイスの一端をブリッジに接続します。

この記事veth デバイスに関するいくつかの追加の詳細と、さまざまなその他の仮想インターフェイスタイプの一般的な概要があります。

関連情報