Ubuntu Linux-複数のNIC、同じLAN…ARP応答は常に単一のNICから送信されます


16

AT&T U-Verseインターネットサービスがあります。これには、非常に骨の折れたDSLゲートウェイがあります。

5つのIP(ネットマスク248)がありますが、ゲートウェイは単一のIP->単一のMACアドレスマッピング以外のことはできません。

単一のファイアウォールマシンがあり、異なるIP /ポートコンボをDMZ内の異なる場所にリダイレクトします。

これまでのソリューションは、4つの追加のNICを備えたファイアウォール上にVMWare仮想マシンを配置し、他の4つのIPアドレスを取得することですが、問題があります。

ゲートウェイは基本的にARP pingを実行して、IPが予想されるMACで応答しているかどうかを確認します。4つのNICがすべて同じLAN上にあるため、Linuxは単一のインターフェースを使用してすべてのIPに対するARP要求に応答します。それはゲートウェイが期待していることではなく、他の3つのNICを台無しにします。ゲートウェイは、ARP pingの結果が予期されたMACではないIPの着信トラフィックのルーティングを拒否します。

eth0のIPがeth0に送信され、eth1のIPがeth1に送信されるなどのARP応答を取得するにはどうすればよいですか?

編集

この状況では、Christopher Cashellの応答は機能しません。読みたいと思っていましたが...

編集2

解決しました!以下の私の答えをご覧ください。


PS-「ドロップユーバース」コメントなし... U-Verseは18 mbpsであるのに対し、他のすべての3 mbpsまたはケーブルを介した非常に信頼性の低い10 mbps
darron 09年

@dblack:回答を追加するのを忘れていました:)
ミハイリンバシャン2009年

api.recaptcha.netサイトはしばらくの間ダウンしていました。答えは今アップしています。
ダロン2009年

回答:


13

選択したソリューションは機能しますが、arptablesを含まない代替手段があります。(元々、Christopher Cashellは正しい道を歩んでいましたが、彼はわずかな距離を置いていました。)

要するに、これらのパラメーターを設定する必要があります。

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

これらは、最新の2.6シリーズLinuxカーネルを実行しているときに利用できるはずです。「/ proc / sys / net / ipv4 / conf / / arp_announce」および「/ proc / sys / net / ipv4 / conf / / arp_ignore」がシステムに存在することを確認してください。

「arp_filter」パラメーターは、さまざまなIPアドレスがLANセグメントを共有しているが、異なるIPサブネットを使用している場合にのみ機能します。IPサブネットも共有している場合は、上記のように「arp_ignore」と「arp_announce」を使用する必要があります。

(「arp_filter」も「0」に戻す必要があるかもしれません。)


arp_filterはどうなりましたか?これはARP問題の初期(2003年?)の解決策でしたが、少なくともCentos 5では説明どおりに機能していないようです。arp_ignoreとarp_announceは良いようです。
pcapademic

このソリューションは、現状では、ARPレベルでのみ機能するようです。追加のルート設定がなければ、ファイアウォールはそれ自体の発信IPトラフィックに対して間違った発信カード(およびMAC)を選択する可能性がありますが、常に正しいカードで着信IPトラフィックを受信するため、非対称パスとrp_filterの考慮事項につながります。
AB

8

さて、ここに解決策があります。まず、要約:

基本的なネットワーク計画は次のとおりです。

 eth0 10.10.10.2 netmask 255.255.255.248
 eth1 10.10.10.3 netmask 255.255.255.248
 eth2 10.10.10.4 netmask 255.255.255.248
 eth3 10.10.10.5 netmask 255.255.255.248

すべてのインターフェイスが重複しています。これは技術的に間違っており、すべての私の悩みの源です...しかし、このダム住宅ゲートウェイのために私はそれをしなければなりません。

まず、ブロードキャストARP要求はこれらすべてに送信されます。4つのIPはすべて有効なローカルアドレスであるため、4つのインターフェイスはすべて応答しようとします。

1)arptablesをインストールします。ブート中にこれを追加します(ここでは/etc/rc.local):

arptables -F INPUT
arptables -A INPUT -i eth0 --destination-ip ! 10.10.10.2 -j DROP
arptables -A INPUT -i eth1 --destination-ip ! 10.10.10.3 -j DROP
arptables -A INPUT -i eth2 --destination-ip ! 10.10.10.4 -j DROP
arptables -A INPUT -i eth3 --destination-ip ! 10.10.10.5 -j DROP

これにより、ブロードキャストが間違ったインターフェースに入るのを防ぎます。したがって、正しいインターフェースが唯一のレスポンダーになります。

それだけでは十分ではありません。次のビットは、ARPテーブルの問題です。要求元のPCにはおそらくARPテーブルエントリが既にあるので、Linuxはそれに関連付けられたインターフェイスを使用します。そのARPテーブルエントリが期限切れになるまで、ARP要求に関連付けられたインターフェイスではなく、そのエントリのインターフェイスを使用してARP応答を送信しようとします。

sysctlオプションrp_filterは、発信ARP応答パケットが間違ったインターフェース上にある場合、拒否しているように見えます。そう...

2)rp_filterを無効にします

Debian / Ubuntuでは、これは/etc/sysctl.d/10-network-security.confの 2つのrp_filter行をコメント化することを意味します。

このオプションは、次の理由で有効になりました。つまり、クロスインターフェーススプーフィング攻撃を防ぐためです。私はそれを読んで、パケットが入ってくるインターフェースまたは出ていくインターフェースにとって正当であることを検証します(MACとIPを交換し、同じインターフェースを経由するかどうかを確認します)。したがって、通常はオフにするのは悪い考えです。私の場合、すべてのインターフェースが同じネットワーク上にあるため、チェックはまったく問題になりません。

別のインターフェイスを追加してスプーフィング保護が必要な場合は、おそらく同じことを行うためにいくつかのarptables / iptablesエントリを作成できます。


5

これは、LinuxがIPとNICを処理する方法に関係しています。基本的に、IPアドレスを特定のNICだけでなく、ボックスに属しているかのように扱います。その結果、予期しないインターフェイス上のIPアドレスからARP応答を取得できます。

解決策はsysctlオプションです。私が思い出すように、あなたが探しているのは:

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1

これで問題が解決します。それらを/etc/sysctl.confに追加し、「sysctl -p」を実行します(または、各行を「sysctl -w」の引数として実行します)。

これにより、LinuxはIPアドレスが実際に割り当てられているインターフェース上のARP要求にのみ応答します。


うーん...残念ながら、動作していないようです。私はそれをsysctl.confに貼り付け、sysctlを実行し、再起動しても変更なし。/ procのオプションをcatして設定されていることを確認できますが、別のボックスから呼び出した場合、すべての応答は同じMACから送信されます。インターフェイスは、同じネットワーク(同じブロードキャスト、等)のすべて...である
ダロン

1
これは、インターフェイスが同じネットワーク上にあるが、異なるサブネットにアドレスがある場合の正しいソリューションです。動作確認済み。
アラステアアーバイン


0

ゲートウェイをブリッジして、ファイアウォールでIPを処理できますか?


私が理解している限り、いいえ...しかし、私が間違っている場合は誰かが私を修正してください。
ダロン2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.