使用 ZeroTier 组建虚拟局域网时,最常遇到的问题之一就是服务突然停止运行——打开客户端提示「未连接」,或者在 Linux / NAS 系统上执行命令时收到 zerotier-one is not running 的提示。本文系统整理了 zerotier-one 服务未启动的排查思路与修复方法,覆盖 Ubuntu、Debian、群晖、飞牛等常见环境,找到对应场景按步骤操作即可。
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-oneenable 的作用是将服务加入开机启动,只 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:
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 不通。这属于网络层问题,和服务本身未运行是两回事,常见原因如下:
节点未被授权
登录 my.zerotier.com,在你的网络成员列表里找到该设备,确认已勾选授权(Auth 列打勾)。新加入的设备默认未授权。
未加入网络
确认设备已执行加入命令,用 sudo zerotier-cli listnetworks 查看已加入的网络列表,若为空则需重新执行:
sudo zerotier-cli join 你的NetworkID防火墙拦截 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 后的必做步骤,省去日后每次重启都要手动拉起服务的麻烦。


