群晖 DSM 7.2 安装 ZeroTier Docker 完整教程
前言
ZeroTier 是一个强大的虚拟局域网(VPN)解决方案,可以让分散在全球各地的设备组成一个虚拟局域网。本文将详细介绍如何在群晖 DSM 7.2 系统上通过 Docker 安装和配置 ZeroTier 客户端。
环境要求
- 群晖 NAS 系统版本:DSM 7.2 或更高
- 已安装 Container Manager(Docker)套件
- 已开启 SSH 服务
- Root 权限访问
一、准备工作
1.1 安装 Container Manager
- 打开群晖 套件中心
- 搜索并安装 Container Manager(旧版本称为 Docker)
- 等待安装完成
1.2 开启 SSH 服务
- 进入 控制面板 > 终端机和 SNMP
- 勾选 启动 SSH 功能
- 端口保持默认 22 或自定义
- 点击 应用
1.3 SSH 连接到群晖
使用 SSH 客户端(如 PuTTY、Terminal)连接:
ssh your_username@your_nas_ip登录后切换到 root 用户:
sudo -i二、创建 TUN 设备
ZeroTier 需要 TUN/TAP 设备来创建虚拟网络接口。群晖系统默认没有创建该设备,需要手动创建。
2.1 手动创建 TUN 设备
# 创建 /dev/net 目录
mkdir -p /dev/net
# 创建 TUN 设备
mknod /dev/net/tun c 10 200
# 设置权限(666 允许所有用户读写)
chmod 666 /dev/net/tun
# 验证设备已创建
ls -l /dev/net/tun你应该看到类似以下输出:
crw-rw-rw- 1 root root 10, 200 Nov 3 10:30 /dev/net/tun2.2 创建开机自启动脚本
由于群晖重启后 TUN 设备会消失,需要创建开机自动执行的脚本。
方法一:使用 rc.d 脚本(推荐)
# 创建脚本目录(如果不存在)
mkdir -p /usr/local/etc/rc.d
# 创建启动脚本
cat > /usr/local/etc/rc.d/tun.sh << 'EOF'
#!/bin/sh
case $1 in
start)
# 等待系统完全启动
sleep 5
# 创建 TUN 设备目录
mkdir -p /dev/net
# 创建 TUN 设备(如果不存在)
if [ ! -c /dev/net/tun ]; then
mknod /dev/net/tun c 10 200
fi
# 设置权限
chmod 666 /dev/net/tun
# 记录日志
echo "$(date): TUN device initialized" >> /var/log/tun-init.log
;;
stop)
;;
esac
EOF
# 赋予执行权限
chmod +x /usr/local/etc/rc.d/tun.sh
# 测试脚本
/usr/local/etc/rc.d/tun.sh start方法二:使用任务计划
- 打开群晖 控制面板 > 任务计划
- 点击 新增 > 触发的任务 > 用户定义的脚本
配置任务:
- 任务名称:创建 TUN 设备
- 用户账号:root
- 事件:开机
- 已启用:勾选
- 在 任务设置 > 用户定义的脚本 中输入:
#!/bin/bash
# 创建目录
mkdir -p /dev/net
# 创建设备(如果不存在)
if [ ! -c /dev/net/tun ]; then
mknod /dev/net/tun c 10 200
fi
# 设置权限
chmod 666 /dev/net/tun
# 记录日志
echo "$(date): TUN device created" >> /tmp/tun-creation.log- 点击 确定 保存
- 右键点击刚创建的任务,选择 运行 测试是否成功
三、安装 ZeroTier Docker 容器
3.1 创建数据目录
# 创建 ZeroTier 数据存储目录
mkdir -p /volume1/docker/zerotier3.2 运行 ZeroTier 容器
使用以下命令创建并运行 ZeroTier 容器:
docker run -d \
--name zerotier-one \
--restart=always \
--privileged \
--net=host \
--device=/dev/net/tun \
-v /volume1/docker/zerotier:/var/lib/zerotier-one \
zerotier/zerotier:latest参数说明:
-d:后台运行--name zerotier-one:容器名称--restart=always:开机自动启动--privileged:特权模式,赋予容器完整的系统权限--net=host:使用主机网络模式--device=/dev/net/tun:映射 TUN 设备到容器-v /volume1/docker/zerotier:/var/lib/zerotier-one:挂载数据目录以持久化配置
3.3 验证容器运行状态
# 等待容器启动(约 10-15 秒)
sleep 15
# 查看容器日志
docker logs zerotier-one
# 检查 ZeroTier 服务状态
docker exec zerotier-one zerotier-cli info成功的输出应该类似:
200 info a1b2c3d4e5 1.12.2 ONLINE其中 a1b2c3d4e5 是你的 ZeroTier 节点 ID(10 位十六进制字符)。
四、加入 ZeroTier 网络
4.1 加入网络
# 加入 ZeroTier 网络(替换 <网络ID> 为你的实际网络 ID)
docker exec zerotier-one zerotier-cli join <网络ID>成功的输出:
200 join OK4.2 查看网络状态
# 查看已加入的网络列表
docker exec zerotier-one zerotier-cli listnetworks输出示例:
200 listnetworks <网络ID> <网络名称> <MAC地址> OK PRIVATE <分配的IP>4.3 在 ZeroTier Central 授权设备
- 访问 ZeroTier Central
- 登录你的账号
- 点击进入你的网络
- 在 Members 部分找到刚才显示的节点 ID
- 勾选 Auth 复选框授权该设备
- (可选)设置设备名称和描述
授权后,稍等片刻,再次检查网络状态:
docker exec zerotier-one zerotier-cli listnetworks状态应该从 REQUESTING_CONFIGURATION 变为 OK。
4.4 验证网络连接
# 查看网络接口(应该看到 ztxxxxxxxx 接口)
ip addr show | grep zt
# 或查看所有 ZeroTier 接口
ip addr show | grep -A 5 zt输出示例:
10: ztc5f7g8h9i: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2800 qdisc fq_codel state UNKNOWN group default qlen 1000
inet 10.147.20.45/24 brd 10.147.20.255 scope global ztc5f7g8h9i五、使用 Docker Compose(可选)
如果你更喜欢使用 Docker Compose 管理容器,可以使用以下配置。
5.1 创建 docker-compose.yml
# 进入 docker 目录
cd /volume1/docker
# 创建 docker-compose.yml 文件
cat > docker-compose.yml << 'EOF'
version: '3'
services:
zerotier:
image: zerotier/zerotier:latest
container_name: zerotier-one
restart: always
privileged: true
network_mode: host
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ./zerotier:/var/lib/zerotier-one
environment:
- TZ=Asia/Taipei
EOF5.2 启动服务
# 启动容器
docker-compose up -d
# 查看日志
docker-compose logs -f zerotier
# 停止服务
docker-compose down
# 重启服务
docker-compose restart5.3 在 Container Manager 中使用
- 打开 Container Manager
- 点击 项目 标签页
- 点击 新增
- 设置项目名称:
zerotier - 设置路径:
/volume1/docker - 将上面的
docker-compose.yml内容粘贴到编辑器中 - 点击 部署
六、常用管理命令
6.1 基本操作
# 查看容器状态
docker ps | grep zerotier
# 查看容器日志
docker logs -f zerotier-one
# 重启容器
docker restart zerotier-one
# 停止容器
docker stop zerotier-one
# 启动容器
docker start zerotier-one
# 删除容器
docker stop zerotier-one
docker rm zerotier-one6.2 ZeroTier 命令
# 查看节点信息
docker exec zerotier-one zerotier-cli info
# 查看网络列表
docker exec zerotier-one zerotier-cli listnetworks
# 加入新网络
docker exec zerotier-one zerotier-cli join <网络ID>
# 离开网络
docker exec zerotier-one zerotier-cli leave <网络ID>
# 查看节点状态
docker exec zerotier-one zerotier-cli status
# 查看对等节点列表
docker exec zerotier-one zerotier-cli listpeers
# 进入容器 shell
docker exec -it zerotier-one sh七、故障排查
7.1 容器无法启动
问题: 容器启动失败或频繁重启
解决方案:
# 查看详细日志
docker logs zerotier-one
# 检查 TUN 设备
ls -l /dev/net/tun
# 如果设备不存在,重新创建
mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 666 /dev/net/tun
# 重启容器
docker restart zerotier-one7.2 网络连接失败
问题: 加入网络后无法连接
检查步骤:
- 确认在 ZeroTier Central 已授权设备
检查网络状态:
docker exec zerotier-one zerotier-cli listnetworks确认防火墙规则:
- 群晖防火墙允许 UDP 9993 端口
- 路由器允许 UDP 9993 端口转发
检查网络接口:
ip addr show | grep zt
7.3 重启后容器无法工作
问题: 群晖重启后 ZeroTier 容器报错
原因: TUN 设备未自动创建
解决方案:
检查 TUN 设备:
ls -l /dev/net/tun如果不存在,检查开机脚本:
ls -l /usr/local/etc/rc.d/tun.sh手动执行脚本:
/usr/local/etc/rc.d/tun.sh start- 或在任务计划中手动运行一次
7.4 权限错误
问题: authtoken.secret not found or readable
解决方案:
# 检查数据目录权限
ls -la /volume1/docker/zerotier/
# 修改权限
chown -R root:root /volume1/docker/zerotier/
chmod -R 700 /volume1/docker/zerotier/
# 重启容器
docker restart zerotier-one7.5 查看日志
# 容器日志
docker logs -f zerotier-one
# TUN 设备创建日志
cat /var/log/tun-init.log
# 系统日志
cat /var/log/messages | grep -i zerotier八、高级配置
8.1 设置静态 IP
在 ZeroTier Central 网络设置中:
- 进入你的网络
- 点击 Members 部分的设备
- 在 Managed IPs 中添加静态 IP
- 保存设置
8.2 配置路由
如果需要让 ZeroTier 网络访问群晖的其他网段:
# 查看当前路由
ip route show
# 添加路由(示例)
ip route add 192.168.1.0/24 via <ZeroTier网关IP> dev ztxxxxxxxx
# 删除路由
ip route del 192.168.1.0/248.3 设置防火墙规则
在群晖控制面板中配置:
- 控制面板 > 安全性 > 防火墙
编辑规则,允许以下端口:
- UDP 9993:ZeroTier 默认端口
8.4 性能优化
# 查看 ZeroTier 统计信息
docker exec zerotier-one zerotier-cli listpeers
# 查看网络延迟
docker exec zerotier-one zerotier-cli listnetworks -j | grep latency九、安全建议
- 使用强密码:确保 ZeroTier Central 账户使用强密码并启用两步验证
- 网络访问控制:在 ZeroTier Central 中合理设置网络访问规则
定期更新:定期更新 Docker 镜像以获取安全补丁
docker pull zerotier/zerotier:latest docker stop zerotier-one docker rm zerotier-one # 重新运行容器(使用之前的命令)- 审计日志:定期查看 ZeroTier 连接日志
- 最小权限原则:只授权必要的设备加入网络
十、卸载
如果需要完全卸载 ZeroTier:
# 停止并删除容器
docker stop zerotier-one
docker rm zerotier-one
# 删除数据目录(可选)
rm -rf /volume1/docker/zerotier
# 删除启动脚本
rm -f /usr/local/etc/rc.d/tun.sh
# 删除任务计划(在控制面板中手动删除)
# 删除 TUN 设备(重启后会自动消失)
rm -f /dev/net/tun十一、总结
通过本教程,你已经成功在群晖 DSM 7.2 上部署了 ZeroTier Docker 客户端。主要步骤包括:
- ✅ 创建 TUN 设备
- ✅ 配置开机自启动
- ✅ 部署 ZeroTier Docker 容器
- ✅ 加入 ZeroTier 网络
- ✅ 在 ZeroTier Central 授权设备
现在你的群晖 NAS 已经加入了 ZeroTier 虚拟局域网,可以从任何地方安全地访问你的 NAS 资源。
参考资源
作者注:本教程基于 DSM 7.2 系统测试通过,如有问题欢迎反馈。
最后更新:2025年11月
评论