QWRT iStoreOS 等闭源固件遇到的OpenVPN跨节点互访问题
OpenVPN跨节点互访异常问题排查手记
一、问题现象描述
在搭建包含三个节点的VPN网络时,发现以下异常现象:
-
节点A(OpenWRT路由器)可以访问B、C节点及其下属网络
-
节点B(Ubuntu 20.04)和C(Ubuntu 22.04)可以互相访问对方网络
-
B、C节点无法访问A节点的内网192.168.13.0/24,包括网关自身地址192.168.13.1
-
抓包显示ICMP请求未到达目标网络
二、关键配置分析
1. 节点A路由特征
192.168.13.0 * 255.255.255.0 U 0 0 0 br-lan POSTROUTING规则: -A POSTROUTING -s 192.168.13.0/24 -o eth3 -j MASQUERADE -A POSTROUTING -s 192.168.13.0/24 -o tun0 -j MASQUERADE
2. 异常流量路径
-
当B节点访问192.168.13.1时:
-
流量通过tun0到达A节点
-
A节点需要将流量转发到br-lan接口
-
响应流量需要正确返回
三、可能原因排查
1. 防火墙区域配置(关键嫌疑)
OpenWRT的默认防火墙配置可能存在问题:
-
检查
/etc/config/firewall
配置文件 -
确认br-lan接口是否被分配到LAN区域
-
验证VPN流量是否被正确放行:
# 查看区域配置 uci show firewall.@zone[0] uci show firewall.@zone[1]
2. 反向路径验证(rp_filter)
# 检查内核参数 sysctl -a | grep .rp_filter # 临时关闭验证 sysctl -w net.ipv4.conf.all.rp_filter=0 sysctl -w net.ipv4.conf.tun0.rp_filter=0
3. NAT规则覆盖性
现有MASQUERADE规则仅处理出站流量:
建议补充规则: -A POSTROUTING -o br-lan -j MASQUERADE
4. 隐藏的流量拦截
-
检查ebtables规则
-
验证桥接过滤配置
-
测试禁用防火墙服务:
/etc/init.d/firewall stop
四、验证方案
-
在A节点执行全流量抓包:
tcpdump -i br-lan host 192.168.13.1
-
检查连接跟踪状态:
conntrack -L -d 192.168.13.1
-
强制指定源接口测试:
ping -I tun0 192.168.13.1
五、经验总结
通过本次排查,我们需要注意:
-
OpenWRT的防火墙区域配置具有"白名单"特性
-
桥接网络与路由策略的交互可能产生意外行为
-
自定义固件可能修改默认的iptables规则链顺序
-
内核版本差异对VPN实现的影响(尤其4.x与5.x内核)
临时解决方案建议:
在确认安全的前提下,可尝试添加显式放行规则:iptables -I FORWARD -i tun0 -o br-lan -j ACCEPT
点击链接加入群聊四群:722808830
点击链接加入群聊三群:751529538(已满)
点击链接加入群聊二群:376877156(已满)
点击链接加入群聊一群:622891808(已满)
饿了么红包
本站附件分享,如果附件失效,可以去找找看