web-dev-qa-db-ja.com

Linuxの仮想スイッチを理解する

Linuxで仮想スイッチを設定する方法に混乱しています。私は次のように進めました:

ip link add name br0 type bridge
ip link set br0 up

これにより、br0という仮想スイッチが作成されます。ここで、eth0という物理ネットワークデバイスと、KVM/qemuによって作成されたタップデバイスvnet0がマシンにあるとします。タップデバイスは(構成によって)br0に自動的に接続され、eth0は手動で追加できます。

ip link set eth0 master br0

これで、両方のデバイスがスイッチbr0に接続されているはずです。

仮想化内のネットワークインターフェイスにIPアドレス192.168.1.1をeth0に割り当て、192.168.1.2を割り当てました。もちろん、タップインターフェイス自体はこのアドレスについて何も知りません。

仮想スイッチではなく物理スイッチを使用してこの設定を正確に行った場合、ホストシステムからアドレス192.168.1.2にpingを実行できると期待します。ただし、このIPにはpingを介して到達することはできません。

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
From 192.168.1.2 icmp_seq=1 Destination Host Unreachable
...

それはなぜですか?

Eth0がその一部であるすべてのイーサネットセグメントにARP要求を送信することを期待していました。これは物理的なものですが、br0によって定義されたものでもあります。 ARP要求は、そのMACアドレスを使用してvnet0によって応答されている必要があります。

私が見つけた解決策は、br0にもIPアドレスを割り当てることでした。

ip addr add 192.168.1.3/24 dev br0

これで、pingは正常に機能します。

4
Democritus

IPアドレス192.168.1.1をeth0に割り当てました

ここで、この設定がうまくいきませんでした。 eth0はブリッジメンバーインターフェイス(レイヤー2)として設定されているため、IP(レイヤー3)アドレスを指定しないでください。

(おそらく、両方とも192.168.1.0/24への2つの直接ルートを含む一種の壊れた構成で終了しました)2つの異なるインターフェースを介して、そのうちの1つだけが機能しました。しかし、間違った設定の正確な詳細は実際には重要ではありません。)

何故ですか?

Eth0がその一部であるすべてのイーサネットセグメントにARP要求を送信することを期待していました。これは物理的なものですが、br0によって定義されたものでもあります。

eth0はARPを送信しません。ブリッジの一部になると、レイヤ3インターフェイスではなくなります。

  • このブリッジの(レイヤー2)ポートは[.____]です。
    • eth0
    • tap0、および
    • 橋自体。
  • このブリッジの(レイヤー3)参加者は(同じ順序で)
    • eth0を介して到達できるすべてのデバイス(ほとんどの場合:ローカルネットワーク上の他のデバイスの束)
    • もう一方とtap0の何でも(これはおそらく1つのことです)
    • br0インターフェース
4
Celada