仮想インターフェースと実際のイーサネットインターフェース間の内部ルーティングを設定する方法 (Linux)

仮想インターフェースと実際のイーサネットインターフェース間の内部ルーティングを設定する方法 (Linux)

私は、実際に使用できる(仮想、別名エイリアスではない)イーサネット インターフェイスを 1 つ備えた Linux ボックスを持っています(eth0 は他の目的で使用されているため使用できず、NIC を追加することもできません)。eth1 とします。

いくつかのオブジェクト/エンティティを SNMP 経由で制御する必要があるため、各オブジェクトに適切な MAC アドレスを持つ仮想イーサネット インターフェイスを設定します。これを行うには、次の操作を行います (vif1 の例):

ip -family inet link add link eth1 name vif1 address <the MAC addr> type macvlan
ip link set vif1 up multicast on
ip route del default dev vif1 table main /* enable the pings/TFTP going out! */
ip route add default via 192.168.1.1 table main proto static metric /* restore orig */

eth1、vif1、vif2、... はすべて単一の (リモート) DHCP サーバーから IP アドレスを取得します。これらの IP アドレスはすべて、もちろん同じ IP サブネット (10.11.1.0/24 など) 上にあります。

問題: Linux ボックスから DHCP サーバー (たとえば 10.11.1.1) マシンへの ping は機能します。DHCP サーバー マシンから eth1 IP または任意の vif#X IP への ping は機能しますが、(問題は、eth1 のみが ICMP パケットに応答することです (ifconfig カウンターと wireshark スニッフィングによって確認済み)。この問題により、vif インターフェイスの IP アドレスに関連付けられた SNMP エージェントに接続できなくなります。

IP パケットが宛先 vif#X に到達するように、内部ルーティングを設定する必要があると思います。新しい IP ルーティング テーブルを使用して IP ルールを追加しようとしましたが、おそらく (新しいテーブルが) 正しく設定されていませんでした... これを行う方法 (できれば理由も) を教えていただけますか?

Linux ボックスは Ubuntu9.04 を実行し、DHCP サーバーは Windows XP SP3 を実行します。

答え1

ついに解決しました。これは ARP 関連の問題です。

  1. DHCPサーバーは仮想インターフェースのMACアドレスにIPアドレスを割り当て、このペアをサーバーのローカルARPテーブルに設定します。
  2. Linux ボックスは、新しい IP アドレスを、それを要求した仮想インターフェイスに関連付けます。
  3. PING は両方向で機能します:
  4. pingするときからLinuxからサーバーへは、実際のインターフェース(同じIPサブネット上)を経由して送信されます。
  5. サーバーからpingを実行する場合Linuxでは、実際のインターフェースが応答するので、思われるまるですべてが大丈夫であるかのように...

しかし

サーバーがIPパケット(私の場合はSNMPメッセージ)を送信するとき、仮想インターフェースのMACアドレスを使用します。Linuxボックスに到達すると、カーネルはこれらのフレームを転送する方法がわからないため、単に破棄します。通常、インターフェースはプロミスキャスモードになっているため、Wiresharkを実行するとこれらのメッセージが表示されます。

SNMPメッセージが仮想インターフェースにバインドされているSNMPエージェントに到達するためには、IPパケットに次のものが必要です。実インターフェースのMACアドレス(カーネルは IP アドレスに基づいて VLAN ルーティングを実行するのはそのときだけだと思います...)

これを達成する方法は、無償ARPLinux ボックスの実際のインターフェイスからサーバーに要求を送信し、新しく割り当てられた IP アドレス (仮想インターフェイスの 1 つに) が実際のインターフェイスの MAC アドレスによって「所有」されていることを示します。これにより、サーバーの ARP テーブルが正しく更新されます。

ちなみに、これはSNMPトラフィックを開始する前にしばらく待つことがなぜ機能するかについても説明しています。サーバーのARPテーブルエントリが期限切れになっているため、サーバーはARP要求を送信し、それに応答します。正しくによって実際のインターフェース

答え2

ブリッジデバイスを設定してみてはいかがでしょうか。 brctl addbr bridge物理デバイスの IP と MAC をそのブリッジに追加し、IP のないデバイスをブリッジに移動してから、VIF もブリッジに接続します。

関連情報