群晖(Synology)

群晖使用Zerotier-one,重启后offline怎么解决?

群晖安装zerotier,加入,内网穿透一切正常。但是只要群晖内插件停止后启动zerotier都会进入offline状态无法重新online。如重启群…
关注者
15
被浏览
111,554

5 个回答

我也遇到这个问题,安装完可以正常使用,但群晖一旦重启就不行了,直觉是某个配置丢失造成的,耐心找了一天,最终发现重启后出现port_error是因为/dev/net/tun丢失,使用./bin/zerotier-one -p 会返回提示,...device not found。把*.spk文件的install脚本释放出来看看,发现:

#!/bin/sh
# load TUN kernel module
SYNOPKG_PKGDEST=/volume1/\@appstore/zerotier
SERVICE="zerotier"
ZEROTIER_MODULE="tun.ko"
ZT_HOME_DIR="${SYNOPKG_PKGDEST}/var"
ZEROTIER="${SYNOPKG_PKGDEST}/bin/zerotier-one"
BIN_SYNOMODULETOOL="/usr/syno/bin/synomoduletool"
PID_FILE="${ZT_HOME_DIR}/zerotier-one.pid"
# Make device if not present (not devfs)
if [ ! -c /dev/net/tun ]; then
	echo 'Device /dev/net/tun not found, create now...'
	if [ -f ${PID_FILE} ] && kill -0 `cat ${PID_FILE}` > /dev/null 2>&1; then
	  pkill zerotier-one
	  rm -f ${PID_FILE}
	fi
  # Make /dev/net directory if needed
  if [ ! -d /dev/net ]; then
    mkdir -m 755 /dev/net
  fi
  mknod /dev/net/tun c 10 200
fi
# Load TUN kernel module
if [ -x ${BIN_SYNOMODULETOOL} ]; then
  $BIN_SYNOMODULETOOL --insmod $SERVICE ${ZEROTIER_MODULE}
else
  /sbin/insmod /lib/modules/${ZEROTIER_MODULE}
fi
# daemon status
if [ -f ${PID_FILE} ] && kill -0 `cat ${PID_FILE}` > /dev/null 2>&1; then
  echo 'ZeroTier running ok!'
else
  pkill zerotier-one
  rm -f ${PID_FILE}
  sleep 1
  echo 'ZeroTier not running! start now...'
  ${SYNOPKG_PKGDEST}/bin/zerotier-one -d
  echo $! >> ${PID_FILE}
fi

所以,把这个代码复制保存到一个文件,例如:zerotier_bug_fix.sh,请务必使用unix编码保存,DOS编码在群晖中运行会出错,把这个文件放进计划任务,每次启动时执行一下这个脚本即可解决。

编辑于 2019-08-03 20:22

zerotier one是一款很好用的P2P内网穿透软件,在PC端、 手机端的安装都较为简易方便,但是在NAS中进行安装时,很容易出现种种未知问题,影响使用。由此,自己整理了几个在 群晖系统 中安装zerotier one时容易出现的问题,并提供相应解决方法,希望能够帮到大家。

一、我应该下载什么平台的zerotier one套件?

zerotier官网下载最新的1.4.0版本套件的 地址是这里,点击进入后密密麻麻的不同平台套件呈现在眼前,此时,新手用户往往迷茫,不知应该下载哪个文件进行安装。



解决方案:通过putty连接NAS,查询系统所使用的 CPU平台。

操作方法如下:

1.登录NAS,进入控制面板,在右上角选择“高级模式”后,进入“终端机和SNMP”选项,将“启动Telnet功能”和“启动SSH功能”两处打勾,然后点击“应用”。





2.下载并安装putty软件,在红圈处填入NAS的内网IP地址,然后点击下方的“OPEN”按钮。



3.在"login as"后填入NAS的管理员账户名,回车后在下一行输入管理员密码。注意密码是不可见的,输入密码后直接回车即可。



4.输入“uname -ar”并回车,获取反馈信息。可以看到信息末尾出现了“synology_apollolake_918+”,说明该系统适用apollolake平台的zerotier套件,回到zerotier one 官网下载相应平台的套件即可。





5.下载完毕后,进入群辉“套件中心”,点击手动安装,然后选择我们刚才下载的*.spk文件即可完成安装。



二、打开zerotier套件后界面异常,或者点击“join”按钮无法加入网络

正常情况下,安装zerotier并打开后,应为如 图界面。



但是,不知是因为zerotier存在bug,还是黑群辉系统兼容性有问题,经常有朋友遇到红框内圈出的位置一片空白,并无显示内容,同时填入zerotier网络ID号后点击下方“join”按钮,毫无反应的情况。

此时我们需要使用putty手动登录进群辉,然后输入“sudo -i”,申请提权。

然后在下一行再次输入群辉管理员密码,获取到root权限。

输入“zerotier-cli join *****”并回车,这里的****是你申请到的zerotier网络ID号。

当结果返回“200 join OK"时,已经join网络成功。此时打开zerotier套件,会发现界面已经正常了。然后回到zerotier的官网,进入网络管理界面并刷新几次,就可以看到刚刚添加的这台设备,然后给该设备打勾即可了。




点击进入该位置管理虚拟网络中的设备

三、重启后zerotier报错,连接不上网络。

部分用户在安装zerotier并成功加入虚拟网络后,重启NAS时zerotier界面会出现“PORT_ERROR”报错,同时无法正常加入虚拟网络,内网穿透失败。此时大概率是因为/dev/net/tun模块丢失,使用./bin/zerotier-one -p 会返回提示,...device not found。

据说zerotier最新的1.4.0版本的套件已经解决了该问题,不过若有朋友安装了低版本的套件,解决方法如下(来源于 网络,实测有效):

首先需要使用putty登录进群辉系统,并使用sudo -i获取root权限。

检查tun模块状态

检查是否安装了tun模块:

lsmod | grep tun

如果结果为空,请尝试安装它:

insmod /lib/modules/tun.ko

如果一切顺利,继续进行下一个测试。


正常状态

测试tun.ko模块是否有效

依次输入下列命令,确保tun.ko模块可以正常工作:

mkdir /dev/net
mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun
cat /dev/net/tun

如果cat命令的返回结果是File descriptor in bad state,则表示模块已正确安装。


tun模块已经正确安装

使tun.ko模块持久化

模块安装需要在每次Synology重启时保持持久性,就必须重复使用insmod命令。可以创建开机脚本搞定,依次执行如下命令进行创建:

cat <<EOF > /usr/local/etc/rc.d/tun.sh
#!/bin/sh -e
insmod /lib/modules/tun.ko
EOF

给脚本可执行权限:

chmod a+x /usr/local/etc/rc.d/tun.sh



重新启动群辉,完成!

发布于 2021-11-13 14:21

下载这个zerotier_x64-6.0.2_1.4.0-0.spk,1.4.0版本的,我群晖系统是918+,装上OK

发布于 2019-08-03 14:31

重启后mac地址会发生变化。唯一的办法是路由器上装zerotier,然后路由器转发

发布于 2019-05-29 23:26

安装1.2.10版本不会有这个问题。我装1.2.13也会有这种情况,然后重装旧版就可以了。

发布于 2019-07-17 09:04