我正在开发一个嵌入式Linux系统(kernel-5.10.24),我的系统中有一个RTL8723 WIFI模块。
现在我使用 hostapd/udhcpd/dnsmasq 将目标板配置为 WIFI AP。
hostapd.conf 是。
interface=wlan0
driver=nl80211
ssid=TestWIFIAP
channel=1
hw_mode=g
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
udhcpd.conf 是
start 192.168.0.20 #default: 192.168.0.20
end 192.168.0.254 #default: 192.168.0.254
# The interface that udhcpd will use
interface wlan0 #default: eth0
remaining yes
......
opt dns 8.8.8.8 8.8.4.4
opt subnet 255.255.255.0
opt router 192.168.0.1
系统中的wlan0配置为192.168.0.1
启动hostapd/udhcpd后,我可以将我的Windows PC连接到AP,PC分配的IP为192.168.0.20
.
我可以从 PC ping 通 AP 的 IP 192.168.0.1
,但无法192.168.0.20
从 AP 内部 ping 通我的 PC 的 IP。
AP中的网络信息是。
# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:40 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3744 (3.6 KiB) TX bytes:3744 (3.6 KiB)
wlan0 Link encap:Ethernet HWaddr 30:95:87:XX:XX:XX
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15966 errors:0 dropped:64 overruns:0 frame:0
TX packets:7603 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20882819 (19.9 MiB) TX bytes:647826 (632.6 KiB)
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 wlan0
iperf -s
然后我开始在 AP 中运行,并且iperf -c 192.168.0.1 -t 10
在我的 PC 上运行良好。但如果我在美联社
跑的话就失败了。iperf -c 192.168.0.20 -t 10
我用谷歌搜索并发现类似的问题,但没有可靠的解决方案/解释。
Linux AP中的防火墙设置如下,
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
并且arping -I wlan0 192.168.0.20
可以获得Windows PC的MAC。但从 Linux AP ping Windows PC 仍然失败。
答案1
我又做了一次测试,得到了答案。
我将Linux板设置为主机模式,并将其连接到办公室的WIFI AP,它的IP为192.168.95.77。
然后我将Windows PC连接到同一个WIFI AP,其IP是192.168.95.96。
我可以从 Windows PC ping 到 Linux 板,但无法从 Linux 板 ping 到 Windows PC,与我在问题中发布的问题相同。
因此,我向 IT 团队进行了检查,并确认 Windows PC 配置了防火墙以拒绝192.168
子网上的输入 ping。