브리지 장치에 ARP 응답 전달

브리지 장치에 ARP 응답 전달

내 네트워크는 다음과 같습니다.

[laptop A]~~~~[ddwrt1]~~~~[ddwrt2]----[desktop B]
               |
               +--[desktop C]

ddwrt2는 다른 Wi-Fi 라우터 ddwrt1에 연결된 클라이언트 브리지 모드에서 실행되는 Wi-Fi 라우터입니다. 노트북은 Wi-Fi를 사용하여 ddwrt1에 연결되어 있습니다. 두 대의 데스크톱 컴퓨터가 이더넷 케이블을 통해 WiFi 라우터에 연결됩니다.

질문:

  • 노트북 A는 데스크톱 B를 ping할 수 없으며 ARP도 확인하지 않습니다.
  • 데스크톱 B에 대해 노트북 A에 정적 ARP 항목을 설정하면 노트북 A는 B를 핑할 수 있습니다.
  • 데스크탑 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을 전달한다는 것입니다. 그러면 위에서 언급한 스푸핑 방지 코드가 실행됩니다.

관련 정보