FreshTomato固件路由器上ZeroTier跨网段连通性异常问题求助
兄弟,你这情况我之前帮朋友排查过类似的,就是ZeroTier和本地网段单向连通的问题——本地设备能访问ZT网络,但ZT设备ping不通路由器,路由器也没法访问ZT设备,确实大概率是路由规则或者iptables转发没配置到位,我给你梳理几个一步步排查和解决的方向:
先搞定ZeroTier后台的路由配置
登录ZeroTier的官方管理后台,找到你这个ZT网络的路由设置,一定要添加一条192.168.1.0/24的路由条目,指向你的路由器在ZT网络里的IP(也就是那个10.147.18.x的地址)。这条路由是给ZT网络里的所有设备指路的:要访问192.168.1.*的本地网段,得通过你的路由器走。确认FreshTomato的IP转发功能是开的
登录路由器的FreshTomato管理后台,找「高级设置」->「路由」(或者有些版本在「网络设置」里),确保IPv4转发这个选项是勾选开启的。如果这个没开,路由器根本没法在不同网段之间转发流量,双向连通就别想了。给FreshTomato加iptables转发规则
进入FreshTomato的「高级设置」->「防火墙」->「脚本」,在Firewall脚本框里添加下面的规则,允许ZT接口和本地接口之间的双向流量:# 允许ZeroTier接口到本地接口的流量转发 iptables -A FORWARD -i zt+ -o br0 -j ACCEPT # 允许本地接口到ZeroTier接口的回复流量 iptables -A FORWARD -i br0 -o zt+ -m state --state RELATED,ESTABLISHED -j ACCEPT # 让路由器本身能和ZT设备互通,放开INPUT/OUTPUT链 iptables -A INPUT -i zt+ -j ACCEPT iptables -A OUTPUT -o zt+ -j ACCEPT这里的
zt+是ZeroTier接口的通配符(FreshTomato里ZT接口一般是zt开头的一串字符,zt+能匹配所有这类接口),br0是本地的桥接接口(对应你的192.168.1.*网段),如果你的本地接口不是br0,换成你实际的接口名称就行。添加完记得点击保存,然后可以重启一下防火墙或者路由器让规则生效。检查路由器上的ZeroTier客户端配置
回到FreshTomato的ZeroTier设置页面,确认路由器的ZT客户端已经成功加入你的网络,IP地址分配正常,而且要确保开启了「允许管理」(这样ZeroTier后台的路由设置才能同步到路由器上)。如果配置没问题,不妨重启一下ZeroTier服务或者整个路由器,让新的路由和规则彻底生效。别忘了排查ZT设备本身的防火墙
有时候问题不在路由器这边,而是ZT网络里的设备自己的防火墙挡住了。比如Windows设备要检查是否允许来自10.147.18.0/24或者192.168.1.0/24网段的ICMP(ping)请求;Linux设备要看看iptables或者ufw有没有禁止相关入站流量。
备注:内容来源于stack exchange,提问作者Danil Rylo

