さて、ここに解決策があります。まず、要約:
基本的なネットワーク計画は次のとおりです。
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エントリを作成できます。