已连接到 hostapd 热点,但没有互联网

已连接到 hostapd 热点,但没有互联网

我正在设置 Gentoo Linux 家用路由器,配置如下:

  • eth0:连接到 WAN(由 systemd-networkd 管理)
  • wlan0:LAN 接入点(由 hostapd 管理)

我将其用作dnsmasqLAN 机器的 DNS 和 DHCP 服务器。

当前问题:我可以连接到路由器,但客户端无法连接互联网。

一些信息:

  • 客户端名称服务器:路由器的 IP。
  • 从路由器 ping google.com 正常。
  • 从客户端机器到路由器的 Ping 操作正常。
  • 从客户端机器 ping google.com 总是超时(但域名已解析)
  • 路由器:iptables -t {filter,nat,mangle,raw} -L显示所有表中的所有链都有策略ACCEPT
  • 路由器:iptables -t nat -L显示预期结果iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  • 确认的sys.net.ipv4.ip_forward = 1

我在不同的客户端机器上测试了上述内容,并且这些客户端机器经过测试可以与其他 wifi 热点配合良好。

我不知道如何解决此问题,似乎按照常规程序操作即可,但客户端的互联网访问就是无法正常工作。如果您能提供下一步检查的提示或解决此问题的方法,我将不胜感激!

编辑:

这里的问题看起来与这个类似:流量未通过 NAT 转发。不过,我确实确认过了sys.net.ipv4.ip_forward = 1

以路由器为A,客户端为B

ifconfigB

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

ifconfigA

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 -SA

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

iptables -S -t natA

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

ping -n google.comA

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.comB

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.8B

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  * * *

答案1

编辑 /etc/sysctl.conf 以包含此行,然后重新启动:

net.ipv4.ip_forward=1

答案2

我发现我ip_forward在设置iptables规则之前已经设置了内核标志。我发现如果我在一切完成后禁用并再次启用它,NAT 将正常工作。所以现在我在脚本中输入了echo 1 > /proc/sys/net/ipv4/ip_forwardafter命令,它就可以正常工作了!iptables

我仍然不知道为什么顺序如此重要。任何解释仍然会受到欢迎。

相关内容