次のように定義された橋の場合
auto br0
iface br0 inet dhcp
bridge-ifaces enp0s8
bridge-ports enp0s8
up ifconfig enp0s8 up
iface enp0s8 inet manual
オペレーティングシステムはインターフェイスに2つのパスを設定しますup
。
192.168.1.0/24 dev enp0s8 proto kernel scope link src 192.168.1.134
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.134
しかし、誰かが以下を使用して同じ操作を手動で実行しようとした場合:
ip route add 192.168.1.0/24 dev br0 proto kernel src 192.168.1.134
ip route add 192.168.1.0/24 dev enp0s8 proto kernel src 192.168.1.134
その後、2番目のコマンドが失敗して表示されますRTNETLINK answers: File exists
。
質問:
カーネルが不正行為をしているのでしょうか、それともコマンドip route add
にいくつかのキーがありませんか?
この設定が適切かどうかではなく、「カーネルがこれを行う方法」についてです。
答え1
あなたはそれを確認する必要があります公式文書これは(最初の例以降)次のことを意味します。
auto eth0 と iface eth0 inet Manual がファイルにないことがわかります。これは、br0が割り当てられたコンポーネントを呼び出すためです。
ブリッジに接続されているイーサネットアダプタは、単にブリッジのIPアドレスを共有するため、設定する必要はありません。
パスを手動で追加できないのは、initスクリプトでステップを再現しないためです。 IPを設定すると、enp0s8
システムはルートを追加できます。これは誤りであり、ルーティングをより複雑にします(特に高度なルーティング、転送、またはNATを実行している場合)。
システムのinitスクリプトを再現するには、関連するすべてのパスを削除し、すでに存在する場合はブリッジを削除します。
brctl addbr br0
ifconfig enp0s8 192.168.1.0/24
ifconfig br0 192.168.1.0/24
これにより、ip route
2つのパスが出力されます。enp0s8
ブリッジに追加すると動作しなくなります。明らかに、間違った構成のためにわずかに異常な結果が生じる。