私のネットワークは次のとおりです。
[laptop A]~~~~[ddwrt1]~~~~[ddwrt2]----[desktop B]
|
+--[desktop C]
ddwrt2は、他のWi-Fiルータddwrt1に接続されたクライアントブリッジモードで動作するWi-Fiルータです。ラップトップはWi-Fiを使用してddwrt1に接続されています。 2台のデスクトップコンピュータがイーサネットケーブルを介してWiFiルーターに接続されています。
質問:
- ノートブックAはデスクトップBをpingできず、ARPも確認しません。
- デスクトップBに対してノートブックAに静的ARPエントリを設定すると、ノートブックAはBをpingできます。
- デスクトップCにも同じ問題があります
したがって、ここではIPv4ルーティングは正常に機能しますが、何らかの理由でARPパケットは機能しません。そのため、いくつかのデバッグを行った結果、次のことがわかりました。
- ddwrt1 のすべてのイーサネット LAN および Wi-Fi インターフェイスはブリッジ デバイスに結合されます。
br0
- ddwrt1で実行すると、
tcpdump -i br0 -e -n -vv arp
ARP要求(ブロードキャスト)および応答(ユニキャスト)パケットが表示され、すべてのフィールドが正しく表示されます。 - ノートブックAでtcpdumpを実行しましたが、応答が返されません
- ddwrt1でデスクトップBをpingするのは正常です。
brctl showmacs
ddwrt1 では、ここに関連するすべての MAC アドレスが正しいインターフェイスに表示されます。- ddwrt1について疑わしいことはありません。
bridge-nf-call-iptables
同様のsysctlプロジェクトがダウンし、ebtablesまたはarptablesが実行されておらず、iptablesにarpのルールはありません。
私は今何ができますか?私はブリッジがARP応答パケットを転送できない理由についての問題として要約すると思います。
答え1
もう少しデバッグした後、答えを見つけました。 dd-wrtを含むLinuxカーネルに固有のものです。ここを参照してください。arp.cのコード
したがって、カーネルには応答パケットを破棄する「ARPスプーフィング防止」コードがあります。 APのファイアウォール設定ページでそれをオフまたはオフにできますecho 0 > /proc/net/arp_spoofing_enable
。オフにすると問題がなくなります。
直面する問題は、ARP応答がddwrt2
Wi-Fiフレームで転送されるため、デスクトップBのMACではなくWi-FiのMACを転送することです。これにより、上記の偽装防止コードが実行されます。