ブリッジにインターフェイスを追加すると、インターフェイス接続が永久に切断されるのはなぜですか?

ブリッジにインターフェイスを追加すると、インターフェイス接続が永久に切断されるのはなぜですか?

私はvagrant-libvirtを使用しており、仮想マシンをLANに接続してDHCPリースを受けてネットワークからアクセスできるようにしたいと思います。 vagrant-libvirtは明らかにブリッジを生成しないので、ブリッジを生成しました。

brctl addbr br0

enp10s0を追加します。

brctl addif br0 enp10s0

そして学んだLinuxネットワーキングの重要な教訓:

注:ブリッジにインターフェイスを追加すると、インターフェイスの既存のIPアドレスが失われます。ブリッジに追加するインターフェイスを介してリモートで接続すると、接続が切断されます。この問題は、システム起動時に生成されるブリッジをスクリプトすることで解決できます。

カーネルがインターフェイスを再初期化したため、アドレスが失われたことは理解できますが、なぜ回復されなかったのですか?私はenp10s0のネットワークにdhcpサーバーがあるので、素直に戻ってくると予想しました。 (私はHyper-Vの仮想スイッチを使用することに精通しています。)ホストとの接続を切断せずに作成および削除できます。

enp10s0に接続する前にブリッジにIPアドレスを割り当てていないためですか?それともまだ足が立っていないからでしょうか?それとも両方?

答え1

なぜ bridge-utils にこれらの既知の制限があり、ユーザーを悩ませるのか分からない。いくつかはおなじみのbrctlツールを好むかもしれませんが、少なくともあなたの場合は、同じ文書に文書化された最新のiproute2ツールを試すことをお勧めします。アーチウィキページあなたがリンクしました。あなたの場合:

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

私はより深い知識はありませんが、少なくともiproute2ツールのいくつかは、Bridge-utilsのような古いツールよりも最新のカーネルインターフェイスを使用すると信じています。 brctlが失敗した場合、上記の方法がうまくいけば、これが理由だと思います。

答え2

TLDR:ブリッジインターフェイスをイーサネットスイッチとして扱います。すべての[仮想]ホストはスイッチに接続され、物理ポートは他のスイッチへのアップリンクです。コンピュータとアップリンクケーブルをスイッチの同じポートに接続することは意味がありません。これは、ホストでその物理ポートを引き続き使用できない理由です。


システムにブリッジを追加すると、物理ポートの特性が変更されます。通常、物理ポートのMACアドレスとIPアドレスは1対1対応です。これがARPプロトコルが期待するものです。これは、特定のホストに到達するためにパケットを送信するイーサネットアドレスを決定できるためです。これを一般にホストインターフェイスと呼びます。

ブリッジを追加すると、すべてを変更したいと思います。通常、マシンに複数のホスト(おそらく仮想マシンまたはコンテナ)があることを計画しており、ARPには各物理マシンまたは仮想マシンに別々のMACアドレスが必要です。したがって、物理ポートをキャプチャするブリッジを作成します。その後、仮想マシンを追加すると、そのMACアドレスがブリッジに追加され、仮想ポートが作成され、イーサネットネットワークが機能します。ブリッジは内部仮想ポート/マシン間のイーサネット切り替えも処理します。

逸脱を許可する...あなたできる理論的には、単一のホストポートに複数のMACアドレスを割り当てることも可能ですが、同じ物理ポート上の2台のコンピュータが互いに通信できるようにしたい場合に問題が発生する可能性があります。だからほとんど行われません。同様にできるブリッジに複数の物理ポートを追加し、ポート間の切り替えを許可するか、リンク集約グループにまとめることができます。これらのリンク集約グループは、容量または信頼性を得るために単一の仮想リンクとして連携して動作する複数のリンク(ケーブル)です。

最後に作成したブリッジにホストを追加して、必要な操作を実行できます。以下は、サーバーの起動時にホスト自体だけでなく、接続する仮想マシンのブリッジを設定するサーバーの/etc/netplan/01-netcfg.yamlファイルの例です。

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enp9s0: {}
  wifis: {}
  bridges:
    br0:
      dhcp4: true
      interfaces:
      - enp9s0

これにより、enp9s0に関連付けられたブリッジが確立され、ホストがIPv4(およびIPv6 SLAAC)で使用できるように、ブリッジにMACアドレスが追加されます。このネットプランをインスタンス化すると、次のような内容が表示されます。

user@server:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 70:cd:60:aa:1b:29 brd ff:ff:ff:ff:ff:ff
3: enp10s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 70:cd:60:aa:4e:cf brd ff:ff:ff:ff:ff:ff
4: wls5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 04:0c:ce:1d:61:07 brd ff:ff:ff:ff:ff:ff
    altname wlp13s0
16: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether d6:34:90:36:5e:c2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.95/24 brd 192.168.1.255 scope global dynamic noprefixroute br0
       valid_lft 82942sec preferred_lft 82942sec
    inet6 1024:2048:4096:6530:f468:8db5:f14c:fa4d/64 scope global temporary dynamic 
       valid_lft 3439sec preferred_lft 3439sec
    inet6 1024:2048:4096:6530:d434:90ff:fe36:5ec2/64 scope global dynamic mngtmpaddr 
       valid_lft 3439sec preferred_lft 3439sec
    inet6 fe80::d434:90ff:fe36:5ec2/64 scope link 
       valid_lft forever preferred_lft forever
17: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:39:55:a0 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe39:55a0/64 scope link 
       valid_lft forever preferred_lft forever

この出力には、物理​​ブリッジインターフェイス(インターフェイス2、enp9s0)とブリッジ自体(インターフェイス16、br0)が表示されます。この設定では、ホストはアドレス192.168.1.95のIP接続を持ち、qemu-kvm仮想マシンは(インターフェイス17、vnet2)を介してブリッジに接続されます。 VMのMACアドレスは55:a0で終わり、Linuxサーバーはそれを学習するためにARPを実行しない限り、VMがそのインターフェイスにどのIPアドレスをリースしたかを知りません。この構成では、ホストと仮想マシンをLANに接続し、互いに接続できます。ブリッジされたインターフェイスを持つ他のVMはインターフェイス17、vnet2のように見え、通常qemu-kvmはVMが起動したときに必要に応じて仮想インターフェイスを作成します。

使用していない他のイーサネットポート(enp10s0)またはwlanポート(wls5)をブリッジに追加すると、より優れた効果が得られますが、これは基本を示しており、実際にホストシステムで使用することです。

関連情報