ブリッジデバイスにARP応答を渡す

ブリッジデバイスにARP応答を渡す

私のネットワークは次のとおりです。

[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 arpARP要求(ブロードキャスト)および応答(ユニキャスト)パケットが表示され、すべてのフィールドが正しく表示されます。
  • ノートブックAでtcpdumpを実行しましたが、応答が返されません
  • ddwrt1でデスクトップBをpingするのは正常です。
  • brctl showmacsddwrt1 では、ここに関連するすべての 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応答がddwrt2Wi-Fiフレームで転送されるため、デスクトップBのMACではなくWi-FiのMACを転送することです。これにより、上記の偽装防止コードが実行されます。

関連情報