たとえば、Linux でブリッジ インターフェイス ( br0
) を作成し、それにいくつかのインターフェイス ( eth0
、tap0
など) を追加するとします。私の理解では、このインターフェイスは、追加したすべてのインターフェイス/ポートとともに仮想スイッチのように動作します。
そのインターフェースに MAC アドレスと IP アドレスを割り当てる意味は何ですか? インターフェースは、他のポートがホスト マシンにアクセスできるようにするスイッチ/ブリッジ上の追加ポートとして機能しますか?
ブリッジに IP アドレスを割り当てる方法について説明しているページをいくつか見ました。MAC アドレスの割り当ては暗黙的 (または自動的) ですか?
答え1
ブリッジはイーサネット デバイスであるため、MAC アドレスが必要です。Linux ブリッジはスパニング ツリー プロトコル フレームなどを生成することができ、そのようなトラフィックには送信元の MAC アドレスが必要です。
橋は必要とするIPアドレス。IPアドレスがない状況も多々あります。しかし、多くの場合、5月次のようなものがあります:
ブリッジがコンテナまたは仮想マシンのグループ (または物理インターフェース) のデフォルト ゲートウェイとして機能している場合。この場合、IP アドレスが必要です (ルーティングは IP レイヤーで行われるため)。
「プライマリ」NIC がブリッジのメンバーである場合、ブリッジは外部との接続になります。この場合、(たとえば) に IP アドレスを割り当てるのではなく
eth0
、ブリッジ デバイスに IP アドレスを割り当てます。
橋がないIP ルーティングに必要な場合は、IP アドレスは必要ありません。この状況の例は次のとおりです。
- ブリッジが、外部接続のないデバイスのプライベート ネットワークを作成するために使用されている場合、またはブリッジ以外のデバイスを通じて外部接続が提供される場合。
答え2
他のネットワーク デバイスと一緒にリストされているブリッジ デバイスは、仮想ブリッジを表すものではなく、ブリッジに接続されている仮想 NIC を表します。物理ネットワーク デバイスに接続された物理ブリッジがある場合、ネットワーク デバイスにも物理ブリッジは表示されませんが、ブリッジに接続されている NIC は表示されます。もちろん、他のネットワーク デバイスと同様に、独自の MAC アドレスを持っています。
ブリッジ デバイス (これも実際には仮想ブリッジに接続された仮想 NIC) に IP アドレスを割り当てると、ホスト デバイスはブリッジによって作成されたサブネットとそれに接続されたすべてのデバイスにパケットをルーティングできるようになります。すばらしいですね。
などのネットワーク デバイス ツールiproute2
(ip link
およびip addr
コマンドを使用) を使用すると、ブリッジに接続されている仮想 NIC を表示できますが、 プログラムを使用して仮想ブリッジ自体を表示することもできますbrctl
。コマンドは、すべてのブリッジとそれらに接続されているインターフェイスを一覧表示します。 以下は、 Linux ブリッジと tuntaps でおよびをbrctl show
使用する例です。iproute
brctl
# ip link add br0 type bridge
# ip tuntap add dev tap0 mode tap
# ip tuntap add dev tap1 mode tap
# ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev br0
# ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev tap0
# ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev tap1
# brctl addif br0 tap0
# brctl addif br0 tap1
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.2e22e593fe8c no tap0
tap1
# ip addr show to 10.0.0.0/24
11: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
inet 10.0.0.1/24 brd 10.0.0.255 scope global br0
valid_lft forever preferred_lft forever
12: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
inet 10.0.0.2/24 brd 10.0.0.255 scope global tap0
valid_lft forever preferred_lft forever
13: tap1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
inet 10.0.0.3/24 brd 10.0.0.255 scope global tap1
valid_lft forever preferred_lft forever
brctl show
出力の「インターフェース」の下にリストされているのは、他のブリッジの作成時に自動的に追加されたインターフェイスに加えて、ブリッジにbr0
接続されたインターフェイスも追加されます。(Linux では、デバイスが接続されていない仮想ブリッジの作成は許可されず、デバイスのないブリッジは自動的に破棄されるようです。) 記録のために言っておきますが、私はカーネルでこれについて調査したことはありませんし、ネットワークの専門家でもありません。Linux での仮想ブリッジのかなりわかりにくい実装を説得力を持って説明しているように思われたので、これを投稿しました。仮想ブリッジ自体には MAC アドレスさえないと思います。
答え3
はい、ブリッジ インターフェイスは追加ポートとして機能します。
後man 5 systemd.netdev
:
ブリッジ デバイスはソフトウェア スイッチであり、その各スレーブ デバイスとブリッジ自体はスイッチのポートです。
答え4
および にリストされているbr0
およびインターフェースは、それぞれホストをブリッジおよびブリッジに接続するタップ インターフェースです。このように名前が多すぎると、混乱を招く可能性があります。virbr0
ip addr
ip link
br0
virbr0
それで、 とは何ですかvirbr0-nic
?
これは元の質問の一部ではありませんでしたが、以前私を混乱させたので、ここで私の意見を述べたいと思います。 は、ブリッジvirbr0-nic
が自身の MAC アドレスとして MAC アドレスとして使用するダミー インターフェイスですvirbr0
。 この常に存在するインターフェイスは、ブリッジのポートが動的に追加または削除されたときに の MAC アドレスが変更されないようにするためにありますvirbr0
。 ホストはインターフェイスからトラフィックを送信しませんvirbr0-nic
。
見るhttps://backreference.org/2010/07/28/linux-bridge-mac-addresses-and-dynamic-portsそしてhttps://www.redhat.com/archives/libvirt-users/2012-9月/msg00038.html説明のために。