先说结论:由于小米/红米AX系列部分路由器官方固件的内核虚拟网桥开启了数据走iptables引擎导致的,解决方案见下。

说下目前的网络结构:主路由小米AX3600官方稳定版固件,旁路由刷了OpenWrt的N1(恩山flippy大佬的固件)。N1做局域网网关,AX3600负责拨号和DHCP。现在的问题是一旦局域网WIFI设备分配到N1地址的网关,就无法正常上网,尝试了几个解决方案,结果如下:

1.不做更改,有科学上网需求的直接openclash等科学软件接管内网解析,国内外上网正常,但是所有流量都会走一遍N1,受限于旁路由性能,会影响上网速率和效率,并且一旦关闭科学软件或开启相关国内地址直连的功能照样无法上网,治标不这本。

2.N1防火墙添加自定义规则:iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE,根据网友反馈部分小米路由器能直接解决问题,但我这里AX3600由于固件底层问题不行。带来的负面效果是多了一层NAT,影响性能,但实际使用起来感知不算太大。

3.添加上一条的防火墙规则,之后网络→接口→LAN→物理设置→去掉桥接模式,我这边可以解决问题,但是zerotier会无法使用。负面影响同上一条一样。

4.AX3600开启SSH,进入终端执行如下命令:

echo -e "echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables" >> /etc/firewall.user
echo -e "echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables" >> /etc/firewall.user
echo -e "echo 0 > /proc/sys/net/bridge/bridge-nf-call-arptables" >> /etc/firewall.user
echo -e "echo 0 > /proc/sys/net/bridge/bridge-nf-call-custom" >> /etc/firewall.user

然后vi /etc/sysctl.conf文件添加以下代码保存:

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-custom = 0

这个是从根本上解决问题,把主路由虚拟网桥走iptables关闭。我现在使用的该方案,属于完美解决问题,但是需要费点劲解锁AX3600的SSH。

5.直接给主路由AX3600刷机Pandavan或OpenWrt,舍弃旁路由方案。

以上就是我在解决问题的时候探索到的几个方案,并且我发现出现这个问题的高发路由器基本上都是小米近几年AX系列的路由器,以及其他部分国产品牌路由器,属于是底层相关网络安全配置的导致的问题。


相关参考:
https://www.right.com.cn/forum/thread-4104292-1-1.html
https://cloud.tencent.com/developer/article/2036952
https://www.right.com.cn/forum/thread-4453763-1-1.html
https://www.right.com.cn/forum/thread-8288547-1-1.html