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は正常に機能します。
IPアドレス192.168.1.1をeth0に割り当てました
ここで、この設定がうまくいきませんでした。 eth0
はブリッジメンバーインターフェイス(レイヤー2)として設定されているため、IP(レイヤー3)アドレスを指定しないでください。
(おそらく、両方とも192.168.1.0/24への2つの直接ルートを含む一種の壊れた構成で終了しました)2つの異なるインターフェースを介して、そのうちの1つだけが機能しました。しかし、間違った設定の正確な詳細は実際には重要ではありません。)
何故ですか?
Eth0がその一部であるすべてのイーサネットセグメントにARP要求を送信することを期待していました。これは物理的なものですが、br0によって定義されたものでもあります。
eth0はARPを送信しません。ブリッジの一部になると、レイヤ3インターフェイスではなくなります。
eth0
、tap0
、およびeth0
を介して到達できるすべてのデバイス(ほとんどの場合:ローカルネットワーク上の他のデバイスの束)tap0
の何でも(これはおそらく1つのことです)br0
インターフェース