Połączono z hotspotem hostapd, ale nie ma Internetu

0

Konfiguruję domowy router Gentoo Linux z następującą konfiguracją:

  • eth0: podłączony do sieci WAN (zarządzany przez systemd-networkd)
  • wlan0: punkt dostępu do sieci LAN (zarządzany przez hostapd)

Używam dnsmasqjako serwera DNS i DHCP dla maszyn LAN.

Aktualny problem: Mogę połączyć się z routerem, ale nie mam połączenia z Internetem od klientów.

Kilka informacji:

  • Serwer nazw klientów: adres IP routera.
  • Ping z routera na google.com jest normalny.
  • Ping z komputerów klienckich do routera jest normalny.
  • Ping z komputerów klienckich na google.com zawsze przekracza limit czasu (ale nazwa domeny została rozwiązana)
  • Router: iptables -t {filter,nat,mangle,raw} -Lpokazuje, że wszystkie łańcuchy we wszystkich tabelach mają politykiACCEPT
  • Router: iptables -t nat -Lpokazuje oczekiwany wynikiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  • Zatwardziały sys.net.ipv4.ip_forward = 1

Testowałem je powyżej na różnych komputerach klienckich, a te komputery klienckie są testowane pod kątem współpracy z innymi hotspotami Wi-Fi.

Nie mam pojęcia, jak rozwiązać ten problem, wydaje się, że postępuję zgodnie ze zwykłą procedurą, ale dostęp do Internetu od klienta po prostu nie działa. Jakakolwiek podpowiedź na temat tego, co sprawdzić dalej lub pomysł, jak rozwiązać ten problem, będzie bardzo mile widziana!

EDYTOWAĆ:

Problem wygląda podobnie do tego: Ruch nie jest przekazywany przez NAT . Rzeczywiście jednak to potwierdziłem sys.net.ipv4.ip_forward = 1.

Weź router jako, Aa klienta jako B.

ifconfigna B:

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether xx:xx:xx:xx:xx:xx
    inet6 fe80::xxxx:xxxx:xxxx:xxxx%en0 prefixlen 64 scopeid 0x4
    inet 192.168.1.62 netmask 0xffffff00 broadcast 192.168.1.255
    nd6 options=1<PERFORMNUD>
    media: autoselect
    status: active

ifconfigna A:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet xx.xx.xx.154  netmask 255.255.254.0  broadcast xx.xx.xx.255
        inet6 fe80::xxxx:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 251116  bytes 22652889 (21.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11731  bytes 979877 (956.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  memory 0xdf100000-df120000

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.199  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::xxxx:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 12867  bytes 1090816 (1.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1272  bytes 306689 (299.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

iptables -Sna A:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

iptables -S -t natna A:

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE

ping -n google.comna A:

PING google.com (216.58.192.206) 56(84) bytes of data.
64 bytes from 216.58.192.206: icmp_seq=1 ttl=57 time=1.29 ms
64 bytes from 216.58.192.206: icmp_seq=2 ttl=57 time=1.52 ms
[continued]

ping -n google.comna B:

PING google.com (216.58.192.206): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
[continued]

traceroute -i en0 8.8.8.8na B:

traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
 1  192.168.1.199 (192.168.1.199)  2.054 ms  2.033 ms  2.018 ms
 2  * * *
 3  * * *
 4  * * *
Shou Ya
źródło

Odpowiedzi:

1

edytuj /etc/sysctl.conf, aby dołączyć tę linię, a następnie uruchom ponownie:

net.ipv4.ip_forward=1
Martijn van Wezel
źródło
0

Zrozumiałem, że ustawiłem flagę jądra ip_forwardprzed ustawieniem iptablesreguły. Przekonałem się, że jeśli wyłączę i włączę to po wszystkim, NAT będzie działał dobrze. Więc teraz mogę umieścić echo 1 > /proc/sys/net/ipv4/ip_forwardpo iptableskomendzie w moim skrypcie i to działa!

Nadal nie wiem o mechanizmie, dlaczego zamówienie jest tak ważne. Wszelkie wyjaśnienia będą nadal mile widziane.

Shou Ya
źródło
wartość / proc jest ładowana, / etc jest ładowana z bootowania do proc
Martijn van Wezel,