基于OpenWrt的802.11s Mesh网络:客户端无法互Ping问题求助
你的推测完全命中了核心问题——Mesh Forwarding功能未开启是导致跨客户端通信失败的关键原因。结合你的排查信息和配置,我整理了以下针对性的解决步骤:
1. 开启Mesh Forwarding功能
802.11s节点必须开启转发才能在Mesh网络中传递非本地的数据包,而你的无线配置中缺少这个关键选项。编辑/etc/config/wireless文件,在wifi-iface的Mesh配置段添加:
option mesh_fwding '1'
修改后的片段如下:
config wifi-iface option device 'radio0' option mesh_id 'mesh_OpenWrt' option mode 'mesh' option network 'mesh' option encryption 'none' option mesh_fwding '1' # 启用Mesh转发
保存后重启无线服务生效:
wifi reload
之后重新捕获beacon帧,确认Mesh Forwarding字段变为Yes。
2. 确保路由器开启IP转发
路由器自身能Ping通Mesh IP,但客户端不行,说明LAN与Mesh接口之间的转发可能未启用:
- 临时生效:执行
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效:编辑
/etc/sysctl.conf,确保net.ipv4.ip_forward=1,然后执行sysctl -p加载配置。
3. 检查防火墙转发规则
OpenWrt默认防火墙会限制不同区域的数据包流动,需要允许LAN和Mesh区域互访:
编辑/etc/config/firewall,添加以下规则:
config forwarding option src 'lan' option dest 'mesh' config forwarding option src 'mesh' option dest 'lan'
重启防火墙服务:
/etc/init.d/firewall restart
4. 验证客户端网关配置
确认客户端X的网关是192.168.10.1(Node A的LAN IP),客户端Y的网关是192.168.13.1(Node D的LAN IP)。如果网关配置错误,客户端的数据包无法进入Mesh网络。
5. 补充检查OLSR路由发布
虽然你确认OLSR运行正常,但可以通过以下命令验证OLSR是否学习到了跨节点的LAN路由:
olsrdctl show routes
如果能看到192.168.10.0/24、192.168.13.0/24等路由条目,说明OLSR工作正常;如果没有,检查olsrd配置中是否允许发布LAN接口的路由(默认应该允许,但可以确认InterfaceDefaults或具体接口的设置)。
按照以上步骤操作后,应该能解决跨客户端Ping不通的问题。如果还有疑问,可以补充提供防火墙配置或者路由表信息进一步排查。
内容的提问来源于stack exchange,提问作者Aysen Altin

