解决zerotier带端口无法访问docker内的容器(玩客云openwrt)
设备环境:
-
设备: 玩客云 openwrt(lanlanop)
-
主路由 小米AX3000T局域网IPv4地址: 192.168.1.1
-
旁路由 玩客云局域网IPv4地址: 192.168.1.3
-
zerotier虚拟局域网地址(旁路由): 192.168.192.2


现状: 局域网正常访问所有docker端口

在局域网下可以正常访问docker容器端口:8096/8080/7892/6881/8920等端口
比如:
- 192.168.1.3:8096
- 192.168.1.3:8080
- 192.168.1.3:7892
- 192.168.1.3:6881
- 192.168.1.3:8920



zerotier虚拟局域网,docker内端口无法访问

但是,非docker容器端口可以正常访问


使用虚拟局域网依旧可以访问5244端口,说明zerotier不只能访问80端口,其余非docker端口都可以访问
解决方法
查看 系统-启动项 里的防火墙启动优先级是否早于docker和zerotier,默认是:
-
防火墙 firewall 优先级:19
-
zerotier 优先级:99
-
dockerd 优先级:99
-
dockerman 优先级:99

06 需要改过来 把firewall改到docker和zerotier后面启动。 这里我把
07 -
防火墙 firewall 优先级改成:99
-
zerotier 优先级改成:80
-
dockerd 优先级改成:80
-
dockerman 优先级改成:80


操作:
/etc/init.d/firewall/etc/init.d/zerotier/etc/init.d/dockerd/etc/init.d/dockerman打开以上的这些文件逐一进行修改

START=优先级START=后面的就是优先级
修改成自己想要的值
然后为他们重新添加权限和开机启动:
SSH连接openwrt并输入:
# 添加权限chmod +x /etc/init.d/firewallchmod +x /etc/init.d/zerotierchmod +x /etc/init.d/dockerdchmod +x /etc/init.d/dockerman# 开机启动/etc/init.d/firewall enable/etc/init.d/zerotier enable/etc/init.d/dockerd enable/etc/init.d/dockerman enable
然后重启就好了。
效果:

这样就能通过zerotier访问docker内的容器了
总结:
防火墙”firewall”早于docker和zerotier启动,虽然可以通过访问到openwrt内的端口,但是openwrt内的docker容器却无法访问,需等docker和zerotier都启动之后再启动防火墙。
另辟蹊径(方法二):
经过测试,重启防火墙也可以从zerotier虚拟局域网访问到docker容器,但是每次openwrt开机加载完所有启动项后再重启防火墙才行。
重启防火墙:
/etc/init.d/firewall restart自动重启防火墙:
将防火墙重启命令添加到系统启动脚本中,以便在系统启动时自动执行重启防火墙就行。
优先级晚于docker和zerotier即可,
如果有两个优先级相同的启动项,会以从小到大0-9,a-z的顺序依次执行。
注:没试过,理论上可行 其他平台文章: https://www.bilibili.com/read/cv31416305
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!