zerotier-one 服务未启动解决方法(Linux/NAS通用)

网络工具 · 服务修复

使用 ZeroTier 组建虚拟局域网时,最常遇到的问题之一就是服务突然停止运行——打开客户端提示「未连接」,或者在 Linux / NAS 系统上执行命令时收到 zerotier-one is not running 的提示。本文系统整理了 zerotier-one 服务未启动的排查思路与修复方法,覆盖 Ubuntu、Debian、群晖、飞牛等常见环境,找到对应场景按步骤操作即可。

适合场景:Linux · NAS · zerotier-one 服务未运行修复

zerotier 未运行
Linux 通用
NAS 适用
🔍

先执行 sudo systemctl status zerotier-one 确认服务状态,再按本文对应场景修复,90% 的情况三条命令以内解决。

一确认问题:服务到底处于什么状态

在动手修复之前,先弄清楚 zerotier-one 服务的当前状态,不同状态对应不同的解决路径。

sudo systemctl status zerotier-one

输出状态含义下一步
active (running)服务正在运行问题可能在网络层,见第三节
inactive (dead)服务已停止手动启动,见第二节
failed服务启动失败查看 journalctl 日志,见第二节
命令不存在zerotier-one 未安装重新安装,见第二节 2.4

同时用下面这条命令验证 ZeroTier 的 CLI 工具是否能正常通信:

sudo zerotier-cli status

如果返回 200 info xxxxxxxx 1.x.x ONLINE 说明服务运行正常;如果返回 Error connecting to the ZeroTier service,则确认服务未运行,继续往下排查。


二修复步骤:按场景对号入座

2.1 服务停止——手动启动并设置开机自启

最常见的情况,服务因系统重启或意外中断停止,直接启动并启用自启即可:

sudo systemctl start zerotier-one
sudo systemctl enable zerotier-one
sudo systemctl status zerotier-one

💡

enable 的作用是将服务加入开机启动,只 start 不 enable,重启后服务仍然不会自动运行。两条命令都要执行。

2.2 服务状态为 failed——查日志找根本原因

服务启动失败时,需要看详细日志才能知道为什么失败:

sudo journalctl -u zerotier-one -n 50 --no-pager

常见的失败原因及处理方式:

  • 提示 TUN/TAP device not found:内核模块未加载,执行 sudo modprobe tun 后再启动服务
  • 提示 Address already in use:9993 端口被占用,检查是否有残留进程 sudo lsof -i :9993
  • 提示 Permission denied:运行权限不足,确认以 root 或 sudo 执行
  • 提示 identity.public missing:配置文件损坏,见 2.3

2.3 配置文件损坏——重置身份

ZeroTier 的节点身份存储在 /var/lib/zerotier-one/ 目录下,若文件损坏会导致服务无法启动。删除旧身份文件后服务会自动生成新的节点 ID:

注意:执行后节点 ID 会改变,需重新加入网络
sudo systemctl stop zerotier-one
sudo rm /var/lib/zerotier-one/identity.public
sudo rm /var/lib/zerotier-one/identity.secret
sudo systemctl start zerotier-one

服务启动后用 sudo zerotier-cli info 获取新节点 ID,然后在 ZeroTier Central 管理界面重新授权该节点加入你的网络。

2.4 zerotier-one 未安装或版本过旧——重新安装

如果系统中完全没有 zerotier-one,或版本过旧导致兼容问题,使用官方脚本重新安装:

curl -s https://install.zerotier.com | sudo bash

⚠️

国内网络访问 zerotier.com 可能较慢,可以先挂代理再执行,或手动下载对应系统的 .deb 包安装。安装完成后同样需要执行 sudo systemctl enable zerotier-one 设置自启。


三服务运行正常但网络不通?

有时候 systemctl status 显示服务在运行,但设备之间还是 ping 不通。这属于网络层问题,和服务本身未运行是两回事,常见原因如下:

1

节点未被授权

登录 my.zerotier.com,在你的网络成员列表里找到该设备,确认已勾选授权(Auth 列打勾)。新加入的设备默认未授权。

2

未加入网络

确认设备已执行加入命令,用 sudo zerotier-cli listnetworks 查看已加入的网络列表,若为空则需重新执行:

sudo zerotier-cli join 你的NetworkID

3

防火墙拦截 UDP 9993

ZeroTier 使用 UDP 9993 端口通信。若系统防火墙或路由器封锁了该端口,会导致节点显示 ONLINE 但互相无法通信。临时关闭防火墙测试连通性:

sudo ufw allow 9993/udp    # Ubuntu/Debian
sudo firewall-cmd --add-port=9993/udp --permanent && sudo firewall-cmd --reload  # CentOS

ℹ️

飞牛、群晖等 NAS 系统若通过 Docker 运行 ZeroTier,还需确认容器网络模式为 host,否则 UDP 9993 端口无法正确穿透到宿主机网络层。


四常见追问

Q1每次重启后 zerotier-one 都要手动启动?

说明开机自启未设置。执行 sudo systemctl enable zerotier-one 即可,只需设置一次,之后每次开机自动运行。

Q2zerotier-cli 提示 Error connecting,但 systemctl 显示 running?

通常是 /var/lib/zerotier-one/zerotier-one.pid 残留文件导致通信异常。删除后重启服务:sudo rm /var/lib/zerotier-one/*.pid && sudo systemctl restart zerotier-one。

Q3NAS 系统没有 systemctl 命令怎么办?

部分旧版 NAS 系统使用 service 命令替代:sudo service zerotier-one start。群晖 DSM 可在「套件中心」找到 ZeroTier 套件直接管理,无需命令行。

总结

zerotier-one 服务未运行的修复思路很清晰:先用 systemctl status 确认服务状态,stopped 就启动并设置 enable,failed 就看 journalctl 日志找具体原因,配置损坏就重置身份文件,完全没安装就用官方脚本一键装好。

服务正常但网络不通是另一个层面的问题,重点检查节点授权、是否加入网络,以及 UDP 9993 端口是否被防火墙拦截,三者确认无误后基本都能恢复连通。

💡

建议将 sudo systemctl enable zerotier-one 作为安装 ZeroTier 后的必做步骤,省去日后每次重启都要手动拉起服务的麻烦。

Leave a Comment

Your email address will not be published. Required fields are marked *