本文参考:
1、《使用Zerotier实现免费内网穿透》https://coffeemilk.blog.csdn.net/article/details/119360712
2、《解决群晖 docker 安装 zerotier 后重启失效问题》https://post.smzdm.com/p/a4do0e6x/
问题:
最近没事,折腾之前买的一个群晖NAS DS918+,使用zerotier部署可在外网访问的个人局域网。zerotier 在docker部署完成后,刚建立的时候可以正常连通。但是使用中发现一个问题,zerotier重启后无法访问,表现为zerotier管理页面显示群晖docker 状态online,docker里通过zerotier-cli listnetworks 查询也可以看到分配的ip,状态ok,但是外网电脑无法访问NAS的IP地址。
解决方案
问题根因是因为缺少一条关键的路由,需要通过命令增加路由:
route add -net 192.168.XXX.0/24 dev ztwdjclgcv
其中 192.168.XXX.0/24 需要修改为zerotier网站上设置的本局域网的IP地址:
ztwdjclgcv则需要修改为启动docker后的设备序号,按如下方法查询:
启动docker后,在telnet终端上输入命令 ip a, 出来的最后一条信息序号后的字符串即为设备号:
输入该命令,没有出现异常,那么就可以了。
通过在PC上ping 服务器地址,试试是否可以ping通。
以上只是手动解决了该问题。每次启动NAS后还要手动执行挺麻烦的。我们可以将命令编辑为脚本,并通过群晖的计划任务来运行脚本。
该脚本在NAS启动的时候触发启动,并每60秒检测一次docker是否启动,在docker启动后,自动增加路由后退出。
1、制作脚本:
脚本文本如下,注意以下绿色部分的设备号,和橙色部分的IP,需要根据实际进行修改。
#!/bin/bash echo `date -d today +"%Y-%m-%d %T.%N"` " Add route start……" #判断docker是否启动,标志是通过ip a命令查看特有设备标志zt7abcd2sa,各个机器不同。 dkstart=`ip a |grep zt7abcd2sa` while [$dkstart -eq ""] do #如果不存在,那么就等待60秒后再判断。 echo `date -d today +"%Y-%m-%d %T.%N"` " Docker is not exist, waiting 60s." sleep 60 dkstart=`ip a |grep zt7abcd2sa` done #循环出来,说明docker已经启动。判断路由是否存在。 resultstr=`route -n |grep zt7abcd2sa` blankstr="" if [$resultstr -eq $blankstr] then echo `date -d today +"%Y-%m-%d %T.%N"` " Route is not exist, we will add route!" #增加路由命令 route add -net 10.147.88.0/24 dev zt7abcd2sa sleep 3 #等待3秒后判断是否增加成功 resultstr=`route -n |grep zt7abcd2sa` if [$resultstr -eq $blankstr] then echo `date -d today +"%Y-%m-%d %T.%N"` " Add route failed!" else echo `date -d today +"%Y-%m-%d %T.%N"` " Add route success! The route info is: "$resultstr fi else echo `date -d today +"%Y-%m-%d %T.%N"` " Route is exist. The route info is: "$resultstr fi echo `date -d today +"%Y-%m-%d %T.%N"` " Add route end!" |
可以通过telnet将登录NAS服务器,将脚本放到 /usr/local/路径下。
通过vim命令增加addroute.sh脚本
进入vim编辑界面后,按“i”键,然后拷贝以上脚本,然后按鼠标右键,自动粘贴脚本到编辑器中,然后按“ESC”键,再按“:wq!”保存脚本。
生成的脚本需要增加执行权限,通过命令修改:chmod +x addroute.sh ,修改后脚本为绿色。
2、在docker创建zerotier实例时,主要要将“启用自动重新启动”选上。
3、增加计划任务:
控制面板->任务计划->新增->触发的任务->用户定义的脚本。
用户定义脚本中,加入之前编辑的脚本,并将打印日志写入日志文件。
bash /usr/local/addroute.sh >>/usr/local/addroute.log
并在任务计划中勾选“已启动->保存”
4、测试:
可在控制面板,计划任务中,选中刚才自定义的计划任务,点“运行”,运行一次脚本,并在telnet后台查看运行日志是否正常运行。日志存放在/usr/local/目录下。
查看命令:tail addroute.log
在PC电脑上ping NAS服务器 是否能够ping通。
如果可以正常运行,可以重启NAS,等几分钟后,再次ping NAS服务器IP地址,能够ping通说明自启动功能生效。
原文链接:https://blog.csdn.net/LeoRay77/article/details/126617653?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167586359916800217086582%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167586359916800217086582&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-2-126617653-null-null.blog_rank_default&utm_term=%E9%BB%91%E7%BE%A4%E6%99%96%2C%E7%BE%A4%E6%99%96%2Cnas%2C%E8%9C%97%E7%89%9B%E6%98%9F%E9%99%85%2CDSM%EF%BC%8C%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%2Cipv6%2C%E8%BF%9C%E7%A8%8B%E8%AE%BF%E9%97%AE%2Cwordpress%EF%BC%8C%E5%BB%BA%E7%AB%99%2C%E9%98%BF%E9%87%8C%E4%BA%91%2C%E8%85%BE%E8%AE%AF%E4%BA%91%2C%E5%9F%9F%E5%90%8D%2C%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%2C