클라이언트를 인터넷에 연결하기 위한 액세스 포인트가 있는 WLAN을 설치했습니다. 클라이언트가 서로 통신할 수 없다는 것을 알기 전까지는 처음에는 모든 것이 잘 작동하는 것 같았습니다.
세부 사항은 다음과 같습니다. 머신은 eth0을 통해 인터넷에 연결되고 wlan1을 통해 액세스 포인트로 연결됩니다. 실행 중이며 hostapd
NAT dnsmasq
를 사용하여 다른 클라이언트를 인터넷에 연결하고 있습니다.
Client A Client B
192.168.1.143 192.168.1.235
\ /
\ /
\ /
Access Point, AP
wlan1: 192.168.1.1
eth0: 192.168.0.xxx
이 시점에서 클라이언트는 성공적으로 인터넷에 연결할 수 있습니다. 액세스 포인트에 연결할 수 있습니다(예: SSH를 통해). 그리고 액세스 포인트는 SSH를 통해 클라이언트에 연결할 수 있습니다.
이제 문제는 클라이언트 A가 클라이언트 B에 연결할 수 없고 그 반대의 경우도 마찬가지라는 것입니다. 액세스 포인트에서 사용될 때 tcpdump
클라이언트 A가 클라이언트 B에 ARP 요청을 보내는 것을 볼 수 있습니다. 그러나 클라이언트 B는 이러한 요청을 전혀 받지 않으며 응답할 수도 없습니다. 따라서 클라이언트 B의 arp 테이블 항목은 불완전합니다(그 반대의 경우도 마찬가지).
테스트 목적으로 두 클라이언트 모두에 대해 arp 테이블 항목을 수동으로 설정했습니다 arp -s <ip> <hw_addr>
. 이제 모든 것이 잘 진행되고 있습니다. 클라이언트는 서로 연결하거나 인터넷에 연결할 수 있습니다. 그러나 실제로는 모든 클라이언트 시스템에 대해 arp 테이블 항목을 수동으로 설정하고 싶지 않습니다.
이제 내 질문은: 문제가 어디에 있습니까? arp 테이블을 자동으로 업데이트하는 방법은 무엇입니까? 조사하려면 어디로 가야하나요? 액세스 포인트(라우팅 테이블, Hostapd, dnsmasq...)에 문제가 있습니까? 아니면 클라이언트 컴퓨터에 문제가 있습니까?
ps: 어떤 머신에도 arptables 규칙이 설치되어 있지 않습니다.
$ arptables -L
Chain INPUT (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
편집하다: 마침내 문제를 발견했습니다.
구성을 다시 확인한 후 다른 USB Wi-Fi 어댑터를 사용하여 테스트를 마쳤습니다. 나는 그 당시 모든 것이 잘 작동하는 것을 보고 정말 놀랐습니다. 클라이언트가 ARP 요청을 수신하고 응답하고 있습니다. 임의 클라이언트 간의 Ping 및 SSH도 잘 작동합니다.
확실히 하기 위해 첫 번째 USB Wi-Fi 어댑터로 다시 전환했습니다. 이번에도 클라이언트는 ARP 요청을 수신(및 응답)하지 않습니다. 따라서 이것이 Hostapd 구성이나 커널 arp 테이블의 문제가 아니라는 것을 확인할 수 있습니다. 문제는 Wi-Fi 어댑터의 드라이버에 있습니다.
세부사항은 다음과 같습니다:
ID 0bda:8812 Realtek Semiconductor Corp. RTL8812AU 802.11a/b/g/n/ac 2T2R DB WLAN 어댑터
- 정상적으로 작동할 수 없습니다.
- 액세스 포인트는 ARP 요청을 수신하지만 클라이언트는 이를 수신하지 않습니다.
ID 0bda:b812 Realtek Semiconductor Corporation
- 직업은 만족스럽습니다.
- 모든 클라이언트 간의 ARP 요청 및 ARP 응답은 정상적으로 작동합니다.
답변1
가 되도록 구성을 설정할 수 있습니다 ap_isolate = 0
.
또는 ap_isolate = 1
hair_mode를 먼저 설정하십시오(브릿지가 동일한 인터페이스를 통해 프레임을 다시 보내야 함).
echo 1 > /sys/devices/virtual/net/br-lan/lower_wlan.name/brport/hairpin_mode