同じサブネットに2つのNICがある場合、ルーティングを設定する必要があります

同じサブネットに2つのNICがある場合、ルーティングを設定する必要があります

難しいケースがあります:

+---+                      +----+
|D1 +->eth0---------<-eth0-+D2  |
|   |                      |    |
|   +->eth1---------<-eth1-+    |
+---+                      +----+

D2 と にはeth0同じeth1サブネットからの IP アドレスがあります: eth0 10.1.1.1/24eth1 10.1.1.2/24。D1 のインターフェースにはアドレスが割り当てられておらず、スイッチのように動作します。

10.1.1.2ここで、D2 が経由でトラフィックを送信できるようにしたいeth0ので、パケット パスは D2(eth0)--D1(eth0)--D1(eth1)--D2(eth1) である必要があります。

現時点では、10.1.1.2D2 から ping するとパケットがローカルに送信されるので、D1 はパケットを受信しません。目的の動作を実現するには、D2 で何を変更すればよいでしょうか?

ありがとう。

答え1

あなたが望むことは Linux では不可能です。少なくともルーティング層内では不可能です。ターゲット アドレスがローカル インターフェイスに属している場合、パケットは常にループバック インターフェイスを通過し、そこから (RfC によって) 外部にルーティングすることはできません。

ターゲットをサブネット内の未使用のアドレスに変更し、他の NIC の 1 つに MAC アドレスを静的に設定するために を使用することは可能かもしれないと考えましたがiptables、ローカル アドレスへのパケットに対してルールが一致しません。DNATip neighDNAT

10.1.1.1仮想マシンまたはネットワーク名前空間を使用すると、カーネルが を認識しないようにすることが可能ですeth0。ただし、着信パケットを物理インターフェイスから仮想インターフェイスに移動するには、プロキシ ARP と DNAT が必要になります。

その努力に価値があるかどうか?

答え2

ネットワーク名前空間はオプションになる場合があります。ネットワーク名前空間は本質的にネットワーク スタックの独立したインスタンスであるため、少なくとも理論上は 2 つのインターフェイスを分離できるはずです。

前回、試してみたのですが、うまく動作しませんでした。

関連情報