web-dev-qa-db-ja.com

LinuxマシンがARP要求に応答しない

次のような状況があります。UbuntuVMであるルーターには、同じ物理NIC上に複数のVLANインターフェイスがあります。これらのVLANインターフェイスは動的に構成され、引き裂かれていますダウンして、ユーザーがマシンを追加または削除できるネットワークに接続します。

たとえば、VLAN 1では、ルーターにはIP 10.0.0.254があり、隣接マシンにはIP 10.0.0.1がありますが、同時にon = VLAN 2ルーターにはIP10.0.0.1があり、隣接マシンにはIP10.0.0.2があります。

On VLAN 1 10.0.0.1は、「誰が10.0.0.254に10.0.0.1を通知するか」を尋ねるARPを送信している場合、ルーターは応答しません。ルーターのトラフィックをスニッフィングすると、ARP要求が到着したことが示されます。適切なVLANタグ付けがありますが、破棄されます。

ルーターは、間違ったインターフェイスに到着したと考えてARPメッセージを破棄しますか?

いくつかの注意:

  1. VLAN 2)では、ARPの問題はありません。
  2. ネイバーのIPをVM on VLAN 1(10.0.0.1)から10.0.0.3に置き換えると、問題が解決します。
  3. 前述したように、両方のIP(10.0.0.254と10.0.0.1)は同じMACアドレス上にあります。
  4. arp_filterはすべてのインターフェースで0に設定されます
  5. ルータのルーティングテーブルは、これらすべての動的インターフェイスを参照しているわけではありません。 iptablesとfwmarksをIPルールとカスタムルーティングテーブル(すべてソフトウェアによって動的に設定されます)とともに使用して、発信元のVLAN)に従ってトラフィックを個別にルーティングします。

問題はどこにありますか?

2
Ido

単一のネットワークノードを同じIPアドレスを使用する2つの異なるネットワークに接続することは、サポートされている構成ではありません。アドレスの競合は、RFC1918アドレスを使用することのよく知られた欠点です。これがRFC4193が導入された理由であり、40個のアドレスビットをランダムに生成する必要があると指定しています。

アドレスの競合を解決するためにネットワークの番号を付け直したくない場合、および最初のケースで発生するこのような競合を回避するIPv6にアップグレードしたくない場合、取得できる最も信頼できるセットアップは、それを分割することです。単一のネットワークノードを2つ以上のネットワークノードに。

単一のLinux VMは、複数の独立したネットワークノードとして同時に動作できます。この機能はネットワーク名前空間と呼ばれます。各ネットワーク名前空間には、独自のネットワークインターフェイス、ローカルアドレス、ルーティングテーブルエントリ、ファイアウォールルールのセットがあります。 。さまざまなネットワーク名前空間は、仮想ネットワークインターフェイスを介して相互に通信できます。

ネットワーク名前空間機能に関するドキュメントは、man ip-netns(または古いバージョンを使用している場合はman ip)を使用して見つけることができます。

2
kasperd

ユーザーのマシンは、最初に作成されたとき、またはIPが新しく割り当てられたときに、GratuitousARP要求を送信するように構成されていないようです。あなたはarpingユーティリティを使用してそのようなことを達成することができます。

0
Alpha01

ルータのインターフェイスの1つにIPアドレス10.0.0.1がある場合、そのIPアドレスを持っていると主張する別のマシンはARPスプーフィングと見なされます。 ARPに応答したとしても、ルーターから10.0.0.1にパケットを送信することはできません。ルーティングテーブルはどのようになりますか?

ルーターとそれに接続されているすべてのものを個別のIPアドレスに指定する必要があります。

0
pjc50