Padavan路由器中使用ZeroTier1.10.2在3.4内核中nat不起作用的问题,也就是不能访问上级,但ping得通,在4.4无影响
使用命令iptables -t nat -vL对比了下发现NAT少了一项组网网段的NAT,所以使用下面的命令重新加入NAT网络即可
iptables -t nat -A POSTROUTING -s xxx.xxx.xxx.0/24 -j MASQUERADE
直接ssh连接命令输入后,就能访问上级了
如果觉得复杂可以直接在,参数设置-脚本-在防火墙规则启动后执行 加入
iptables -t nat -A POSTROUTING -s xxx.xxx.xxx.0/24 -j MASQUERADE
其中xxx.xxx.xxx为组网网段前三段
问题分析:
如是想着可能出在zerotier.sh代码或web代码上,在user里的www文件夹里替换了4.4内核的代码也不行,
rules() {
while [ "$(ifconfig | grep zt | awk '{print $1}')" = "" ]; do
sleep 1
done
nat_enable=$(nvram get zerotier_nat)
zt0=$(ifconfig | grep zt | awk '{print $1}')
logger -t "zerotier" "zt interface $zt0 is started!"
del_rules
iptables -A INPUT -i $zt0 -j ACCEPT
iptables -A FORWARD -i $zt0 -o $zt0 -j ACCEPT
iptables -A FORWARD -i $zt0 -j ACCEPT
if [ $nat_enable -eq 1 ]; then
iptables -t nat -A POSTROUTING -o $zt0 -j MASQUERADE
ip_segment="$(ip route | grep "dev $zt0 proto" | awk '{print $1}')"
iptables -t nat -A POSTROUTING -s $ip_segment -j MASQUERADE
zero_route "add"
fi
}
iptables -t nat -A POSTROUTING -o $zt0 -j MASQUERADE
上面这项是成功的
问题在下面这项没成功
ip_segment="$(ip route | grep "dev $zt0 proto" | awk '{print $1}')"
iptables -t nat -A POSTROUTING -s $ip_segment -j MASQUERADE
如是看了下ip route有些区别proto前多了个空格,不光是这个空格,分割的是二组,得加多点字符来分割如下
ip_segment=$(ip route | grep "dev $zt0 proto kernel" | awk '{print $1}')
原文地址:
https://www.right.com.cn/forum/thread-8264569-1-1.html