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に対するARP応答を取得してeth0を出力し、eth1のIPを出力してeth1を出力することができますか?
[〜#〜]編集[〜#〜]
Christopher Cashellの応答は、この状況では機能しません。私はそれを読むことを大いに期待していましたが、...いいえ。
編集2
解決しました!以下の私の答えを参照してください。
さて、ここに解決策があります。まず、まとめ:
これが私の基本的なネットワーク計画です:
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エントリを作成して同じことを行うことができます。
選択したソリューションは機能しますが、arptableを使用しない代替手段があります。 (もともとクリストファー・キャシェルは正しい軌道に乗っていたが、彼はくすんでいた。)
つまり、次のパラメータを設定します。
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
これらは、最新の2.6シリーズLinuxカーネルを実行している場合に利用できるはずです。システムに '/ proc/sys/net/ipv4/conf// arp_announce' and/proc/sys/net/ipv4/conf //arp_ignore 'が存在することを確認してください。
「arp_filter」パラメータは、さまざまなIPアドレスがLANセグメントを共有しているが、異なるIPサブネットを使用している場合にのみ機能します。それらがIPサブネットも共有している場合は、上記のように「arp_ignore」と「arp_announce」を使用する必要があります。
( 'arp_filter'も '0'に戻す必要があるかもしれません。)
これは、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要求にのみ応答します。
これと組み合わせて受け入れられた回答: http://www.linuxquestions.org/questions/linux-networking-3/multiple-interfaces-all-traffic-flows-through-just-one-538701/ =
静的ルートを使用して特定のインターフェイスを介して必要なIPのみと通信する場合、同様の問題に対する強力でシンプルなソリューションが作成されました。
ゲートウェイをブリッジして、ファイアウォールでIPを処理できますか?