ASUS TinkerBoard(RaspberryPi 파생 제품)를 무선 브리지로 설정하려고 합니다. 두 개의 Wi-Fi 어댑터에 해당하는 두 개의 인터페이스 wlan0 및 wlx000e3이 있습니다. 인터페이스 wlx000e3은 인터넷 액세스를 제공하는 라우터에 연결됩니다. 인터페이스 wlan0은 개인 액세스 포인트로 사용됩니다.
나는 Hostapd와 isc-dhcp-server를 설치하고 구성했으며 인터넷의 다양한 튜토리얼 가이드에 따라 iptables를 설정하려고 시도했습니다.https://wiki.archlinux.org/index.php/Internet_sharing#Configuration, 그래도 작동하지 않으면 몇 가지 다른 변형을 시도해 보세요. ) 클라이언트 PC에서 보드에 연결하고 보드에서 인터넷에 연결할 수 있습니다. 하지만 이사회가 실제로 어떤 것도 전달하도록 할 수는 없습니다.
IPv4 전달이 활성화되었습니다: /proc/sys/net/ipv4/ip_forward는 1입니다. iptables가 오류 없이 성공적으로 설정되었습니다.
# iptables -L -v -n -t nat
...
Chain POSTROUTING (policy ACCEPT 15 packets, 986 bytes)
pkts bytes target prot opt in out source
14 945 MASQUERADE all -- * wlx000e3 0.0.0.0/0 0.0.0.0/0
# iptables -L -v -n
Chain Input (policy ACCEPT 1547 packets, 114K bytes)
pkts bytes target prot opt in out source
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source
0 0 ACCEPT all -- wlan0 wlx000e3 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- wlx000e3 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED, ESTABLISHED
Chain OUTPUT (policy ACCEPT 1074 packets, 195K bytes)
pkts bytes target prot opt in out source
하지만 여전히 작동하지 않습니다. 로그나 dmesg에 오류가 없으며 경고도 없습니다. 대부분의 규칙이 있는 전달 체인에 패킷이 도달하지 않은 것으로 나타났습니다.
어떤 아이디어가 있나요?
한 가지 관련성이 있는 점은 상대적으로 오래된 커널(4.4.103+)이고 모듈이 거의 없다는 것입니다(꼭 필요한 경우가 아니면 수동으로 빌드하는 것을 피하고 싶습니다). 그러나 NAT 지원의 기본 사항이 내장되어 있어야 합니다(NAT 지원이 전혀 존재하지 않으면 일부 버그가 발생할 것으로 예상됩니다). 하지만 커널 모듈 nf_log_ipv4가 없기 때문에 패킷 추적을 활성화할 수 없습니다.
PS 나 뭐야?할 수 있는해야 할 일은 LOG 대상을 iptables에 추가하는 것뿐입니다. 그래서 전달하려는 클라이언트의 패킷이 "nat" 테이블의 PREROUTING 체인에 표시되는지 확인했습니다. 그러나 어쨌든 그들은 FORWARD 체인에 들어 가지 않습니다. 이는 내 라우팅에 문제가 있을 수 있음을 암시하지만 아무 것도 표시되지 않습니다.
#ip route
default via 192.168.1.254 dev wlx000e3 src 192.168.1.78 metric 302
169.254.238.0/24 dev wlan0 proto kernel scope link src 169.254.238.1
192.168.1.0/24 dev wlx000e3 proto kernel scope link src 192.168.1.78 metric 302
여기서 클라이언트는 169.254.238.4, 보드의 wlan0 인터페이스는 169.254.238.1, 업스트림 라우터는 192.168.1.254입니다.
답변1
나는 그것을 알아 냈습니다.
"Mars Logging"을 활성화하고 잠시 동안 tcpdump를 사용한 후 클라이언트 PC에서 나가는 모든 패킷의 소스 IP 주소 필드가 0.0.0.0으로 설정되어 있음을 발견했습니다.
더 많은 인터넷 검색을 통해 발견하게 되었습니다.https://superuser.com/questions/1069956/all-outgoing-tcp-packets-have-source-ip-address-0-0-0-0.
그런 다음 /etc/dhcp/dhcpd.conf에서 서브넷을 172.16.0.0/24로 변경하고 /etc/network/interfaces에서 다운스트림 고정 IP를 172.16.0.1로 변경했으며 모든 것이 제대로 작동하기 시작했습니다.