Linux 网络中以太网与 WiFi 客户端通信失败
我正在尝试设置一个可让多个设备相互连接的网络。所有设备都运行 Linux。网络设置包括:
- 一个 WiFi 接入点 (AP) 主机
- 多个 WiFi AP 客户端
- 一个设备通过以太网电缆连接到 WiFi AP 主机。
WiFi 节点之间可以互相连接,通过以太网连接的设备之间也可以互相连接。但是,以太网客户端无法连接到 WiFi AP 客户端。值得注意的是:
- 以太网客户端可以到达 WiFi 网络的默认网关。
- WiFi客户端可以到达以太网连接的默认网关。
- 如果我在 WiFi 设备之间切换接入点(即以太网客户端连接到 WiFi AP 客户端),则一切正常,所有设备都可以相互 ping 通。这表明 WiFi 网络的默认网关始终可访问。
采取的措施
创建 WiFi 接入点并连接客户端设备:
AP 主机创建:
sudo nmcli con add type wifi ifname wlan1 con-name my-access-point ssid my-access-point mode ap sudo nmcli con mod my-access-point 802-11-wireless.mode ap 802-11-wireless.band bg sudo nmcli con mod my-access-point ipv4.method shared ipv4.addresses "10.10.0.0/16" sudo nmcli con mod my-access-point wifi-sec.key-mgmt wpa-psk sudo nmcli con mod my-access-point wifi-sec.psk "password123" sudo nmcli con mod my-access-point autoconnect yes sudo nmcli con up my-access-point
AP 客户端连接(分配 IP:10.10.0.162):
sudo nmcli device wifi connect my-access-point password "password123" ifname wlan1
创建并连接以太网接口:
在 AP 主机设备上创建以太网接口:
sudo nmcli connection add type ethernet ifname eth0 con-name my-wired-connection ipv4.method shared ipv4.addresses '10.0.0.0/30' sudo nmcli connection up my-wired-connection
通过以太网线连接其他设备(分配 IP:10.0.0.2):
- 通过 GUI 连接
设置设备之间的网络转发:
启用 IP 转发:
sudo sysctl -w net.ipv4.ip_forward=1
在 AP 主机设备上配置 NAT:
sudo iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE sudo iptables -A FORWARD -i wlan1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i eth0 -o wlan1 -j ACCEPT sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan1 -o eth0 -j ACCEPT
更新终端设备上的 IP 路由:
- 以太网客户端:
sudo ip route add 10.10.0.0/16 via 10.0.0.0
- AP 客户端设备:
sudo ip route add 10.0.0.0/30 via 10.10.0.0
检查连通性:
- 以太网客户端:
- 检查 WiFi AP 主机以太网 IP:(
ping 10.0.0.0
成功) - 检查 WiFi AP 主机 WiFi 网络 IP:(
ping 10.10.0.0
成功) - 检查 WiFi AP 客户端 IP:(
ping 10.10.0.162
失败)
- 检查 WiFi AP 主机以太网 IP:(
- WiFi AP 主机:
- 检查以太网客户端 IP:(
ping 10.0.0.2
成功) - 检查 WiFi AP 客户端 IP:(
ping 10.10.0.162
成功)
- 检查以太网客户端 IP:(
- WiFi AP 客户端:
- 检查以太网客户端 IP:(
ping 10.10.0.2
失败) - 检查 WiFi AP 主机以太网 IP:(
ping 10.0.0.0
成功)
- 检查以太网客户端 IP:(
- 以太网客户端:
问题摘要
虽然 WiFi 节点和以太网连接设备可以在各自的网络内通信,但以太网客户端和 WiFi AP 客户端之间的交叉通信会失败。尽管双方都能成功访问默认网关,但除非在 WiFi 设备之间切换 AP 角色,否则直接通信仍存在问题。任何能够实现以太网客户端和 WiFi AP 客户端之间无缝连接的见解或解决方案都将不胜感激。
原来
NetworkManager
是内置了防火墙。如果禁用它,问题就解决了。转至
/etc/NetworkManager/NetworkManager.conf
并添加以下内容: