我已经使用 hostapd 设置了一个无线接入点,我使用 dnsmasq 进行 dhcp,并使用 nodogsplash 作为强制门户。在初始设置时,一切都按预期进行。几天后,我再次测试它,当客户端通过身份验证时,nodogsplash 报告客户端已通过身份验证,但当我尝试通过客户端访问互联网时,却无法访问。如果我在没有 nodogsplash 的情况下执行此操作,请手动添加此规则:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
客户端可以访问互联网。
我没有更改配置文件或强制门户页面中的任何内容。
我在 nodogsplash 输出中启用了最详细的模式,这是对客户端进行身份验证的部分:
[5][Thu Jun 18 12:44:19 2020][2075](src/fw_iptables.c:839) Authenticating 10.0.10.160 64:cc:2e:d6:a5:a4
[7][Thu Jun 18 12:44:19 2020][2075](src/util.c:90) Executing command: iptables --wait -t mangle -A ndsOUT -s 10.0.10.160 -m mac --mac-source 64:cc:2e:d6:a5:a4 -j MARK --or-mark 0x30000
[7][Thu Jun 18 12:44:19 2020][2075](src/util.c:93) Setting default SIGCHLD handler SIG_DFL
[7][Thu Jun 18 12:44:19 2020][2075](src/util.c:90) Executing command: iptables --wait -t mangle -A ndsINC -d 10.0.10.160 -j MARK --or-mark 0x30000
[7][Thu Jun 18 12:44:19 2020][2075](src/util.c:93) Setting default SIGCHLD handler SIG_DFL
[7][Thu Jun 18 12:44:19 2020][2075](src/util.c:90) Executing command: iptables --wait -t mangle -A ndsINC -d 10.0.10.160 -j ACCEPT
[7][Thu Jun 18 12:44:19 2020][2075](src/util.c:93) Setting default SIGCHLD handler SIG_DFL
[7][Thu Jun 18 12:44:19 2020][2075](src/auth.c:288) Unlocking client list
[7][Thu Jun 18 12:44:19 2020][2075](src/auth.c:288) Client list unlocked
[5][Thu Jun 18 12:44:19 2020][2075](src/http_microhttpd.c:459) Client [64:cc:2e:d6:a5:a4, 10.0.10.160] authenticated
[7][Thu Jun 18 12:44:23 2020][2075](src/http_microhttpd.c:317) access: GET /nodogsplash_auth/
[7][Thu Jun 18 12:44:23 2020][20751(src/main.c:97) SIGCHLD handler: Trying to reap a child
[7][Thu Jun 18 12:44:23 2020][20751(src/main.c:103) SIGCHLD handler: waitpid(): No child exists now.
[7][Thu Jun 18 12:44:23 2020][2075](src/http_microhttpd.c:317) access: GET /splash.css
[7][Thu Jun 18 12:44:23 2020][2075](src/main.c:97) SIGCHLD handler: Trying to reap a child
[7][Thu Jun 18 12:44:23 2020][2075](src/main.c:103) SIGCHLD handler: waitpid(): No child exists now.
我不知道 SIGCHLD 是怎么回事,但除此之外它似乎没有报告任何问题。
由于我正在使用的工具的配置没有发生任何变化,这可能来自底层系统(Kali Linux)的一些变化。有什么想法如何解决这个问题吗?
更新1
通过使用 tcpdump 检查两个接口(即接入点 (wlan0) 的 iface 和具有 Internet 访问权限的接口 (eth0))上的流量,数据包不会被丢弃。所以我猜测,客户端无法访问互联网,因为回复不是从 Kali 机器发回的。同样,我没有对设置路由表的方式进行任何更改。我将 IP 和网络掩码分配给 wlan0 接口:
ifconfig wlan0 up 10.0.10.1 netmask 255.255.255.0
并设置路线:
route add -net 10.0.10.0 netmask 255.255.255.0 gw 10.0.10.1
我需要找出为什么回复没有发回。
答案1
为了让 nodogsplash 工作,NAT 必须就位。因此,在运行 nodogsplash 之前,必须添加此 iptables 规则:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE