私の場合、ブリッジに接続された物理インターフェースにインターネットからアクセスできないのはなぜですか?

私の場合、ブリッジに接続された物理インターフェースにインターネットからアクセスできないのはなぜですか?

私のネットワーク トポロジは次のようになります。

ご覧のとおり、em1(1.1.8.209) はインターネット経由で通信できる物理インターフェースです。2 つの VM インスタンスを作成しました。PID 8740と はPID 8817両方ともネットワーク IP を使用し1.1.8.210/291.1.8.211/29は両方ともパブリック IP アドレスを使用します。

今、私はインターネットを通じてem1と通信することができます。

しかし、2 つの VM に直接アクセスしたいという要件があるため、em1 を に接続しますbr0

次にこれを実行しました:

brctl addif br0 em1

トポロジは次のようになります。

ここに画像の説明を入力してください

しかし、このコマンドを実行した後、エラーが発生し、通信でき1.1.8.209なくなりました。その後、添付ファイルを削除したらbrctl delif br0 em1、アクセスできるよう1.1.8.209になりました。

なぜこの問題が発生するのでしょうか? 理解できません。理由を説明してください。

答え1

インターフェースがブリッジ ポートになると、ルーティングには参加しなくなります。

低レベルの詳細はこのブログで説明されていますLinuxブリッジの適切な分離:

  1. フレームをグローバルまたはデバイス固有のプロトコル ハンドラー (IPv4、ARP、IPv6 など) に渡します。

    ブリッジインターフェースの場合、カーネルはデバイス固有の受信ハンドラを設定します。br_handle_frame()この関数は、STPおよびLLDPフレームの場合、または「brouting」が有効になっている場合を除き、受信インターフェースのコンテキストで追加の処理を許可しません。したがって、プロトコルハンドラは実行されないこの場合。

このようなブリッジ ポートの IP アドレスは、着信パケットには無関係になります。 そのまま設定しておくと、発信パケットがブリッジ ポートを介して直接送信される可能性があるため (送信すべきではない場合)、発信パケットの適切なルーティングが妨げられる可能性があります。

実行する必要があるのは、IP アドレスを、ブリッジに接続されているもう一方の端を持つシステム (またはネットワーク名前空間、または同じ場所にある veth ペアのもう一方の空き端)、またはブリッジのセルフ ポート (つまりブリッジ自体) に移動することです。この移動中は常に、中断が発生する短い時間枠があるため、この構成を変更するためにローカルで実行されるアクションは、ネットワーク アクセスに依存してはなりません (例: 中断されたルートを使用してシェルからリモートでコマンドを入力することに依存してはなりません)。

以下では、新しい構文を持つ新しいツールのみを使用します。

例えば:

ip address flush dev em1
ip address add 1.1.8.209/29 dev br0

代わりに、ブリッジをルーティングに参加させずに余分なものを使用する別の方法ベスルーティングに参加するためのペアの端(同じネットワーク名前空間内)は次のようになります。

ip address flush dev em1
ip link add name em1twin type veth peer name br0portem1twin
ip link set br0portem1twin master br0 up
ip link set em1twin up
ip address add 1.1.8.209/29 dev em1twin

どちらの場合も、デフォルト ルート (または他のルート) がこのアドレスの存在に依存していた場合は、このルートが消えたため、再度追加する必要があります。

関連情報