群晖 DSM 7.2 安装 ZeroTier Docker 完整教程

技术分享  ·  2025-11-03

群晖 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

  1. 打开群晖 套件中心
  2. 搜索并安装 Container Manager(旧版本称为 Docker)
  3. 等待安装完成

1.2 开启 SSH 服务

  1. 进入 控制面板 > 终端机和 SNMP
  2. 勾选 启动 SSH 功能
  3. 端口保持默认 22 或自定义
  4. 点击 应用

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/tun

2.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

方法二:使用任务计划

  1. 打开群晖 控制面板 > 任务计划
  2. 点击 新增 > 触发的任务 > 用户定义的脚本
  3. 配置任务:

    • 任务名称:创建 TUN 设备
    • 用户账号:root
    • 事件:开机
    • 已启用:勾选
  4. 任务设置 > 用户定义的脚本 中输入:
#!/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
  1. 点击 确定 保存
  2. 右键点击刚创建的任务,选择 运行 测试是否成功

三、安装 ZeroTier Docker 容器

3.1 创建数据目录

# 创建 ZeroTier 数据存储目录
mkdir -p /volume1/docker/zerotier

3.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 OK

4.2 查看网络状态

# 查看已加入的网络列表
docker exec zerotier-one zerotier-cli listnetworks

输出示例:

200 listnetworks <网络ID> <网络名称> <MAC地址> OK PRIVATE <分配的IP>

4.3 在 ZeroTier Central 授权设备

  1. 访问 ZeroTier Central
  2. 登录你的账号
  3. 点击进入你的网络
  4. Members 部分找到刚才显示的节点 ID
  5. 勾选 Auth 复选框授权该设备
  6. (可选)设置设备名称和描述

授权后,稍等片刻,再次检查网络状态:

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
EOF

5.2 启动服务

# 启动容器
docker-compose up -d

# 查看日志
docker-compose logs -f zerotier

# 停止服务
docker-compose down

# 重启服务
docker-compose restart

5.3 在 Container Manager 中使用

  1. 打开 Container Manager
  2. 点击 项目 标签页
  3. 点击 新增
  4. 设置项目名称:zerotier
  5. 设置路径:/volume1/docker
  6. 将上面的 docker-compose.yml 内容粘贴到编辑器中
  7. 点击 部署

六、常用管理命令

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-one

6.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-one

7.2 网络连接失败

问题: 加入网络后无法连接

检查步骤:

  1. 确认在 ZeroTier Central 已授权设备
  2. 检查网络状态:

    docker exec zerotier-one zerotier-cli listnetworks
  3. 确认防火墙规则:

    • 群晖防火墙允许 UDP 9993 端口
    • 路由器允许 UDP 9993 端口转发
  4. 检查网络接口:

    ip addr show | grep zt

7.3 重启后容器无法工作

问题: 群晖重启后 ZeroTier 容器报错

原因: TUN 设备未自动创建

解决方案:

  1. 检查 TUN 设备:

    ls -l /dev/net/tun
  2. 如果不存在,检查开机脚本:

    ls -l /usr/local/etc/rc.d/tun.sh
  3. 手动执行脚本:

    /usr/local/etc/rc.d/tun.sh start
  4. 或在任务计划中手动运行一次

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-one

7.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 网络设置中:

  1. 进入你的网络
  2. 点击 Members 部分的设备
  3. Managed IPs 中添加静态 IP
  4. 保存设置

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/24

8.3 设置防火墙规则

在群晖控制面板中配置:

  1. 控制面板 > 安全性 > 防火墙
  2. 编辑规则,允许以下端口:

    • UDP 9993:ZeroTier 默认端口

8.4 性能优化

# 查看 ZeroTier 统计信息
docker exec zerotier-one zerotier-cli listpeers

# 查看网络延迟
docker exec zerotier-one zerotier-cli listnetworks -j | grep latency

九、安全建议

  1. 使用强密码:确保 ZeroTier Central 账户使用强密码并启用两步验证
  2. 网络访问控制:在 ZeroTier Central 中合理设置网络访问规则
  3. 定期更新:定期更新 Docker 镜像以获取安全补丁

    docker pull zerotier/zerotier:latest
    docker stop zerotier-one
    docker rm zerotier-one
    # 重新运行容器(使用之前的命令)
  4. 审计日志:定期查看 ZeroTier 连接日志
  5. 最小权限原则:只授权必要的设备加入网络

十、卸载

如果需要完全卸载 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 客户端。主要步骤包括:

  1. ✅ 创建 TUN 设备
  2. ✅ 配置开机自启动
  3. ✅ 部署 ZeroTier Docker 容器
  4. ✅ 加入 ZeroTier 网络
  5. ✅ 在 ZeroTier Central 授权设备

现在你的群晖 NAS 已经加入了 ZeroTier 虚拟局域网,可以从任何地方安全地访问你的 NAS 资源。

参考资源


作者注:本教程基于 DSM 7.2 系统测试通过,如有问题欢迎反馈。

最后更新:2025年11月

 
上一篇:VPS之间单向同步
下一篇:没有了
评论
PEIP DE NOTES. All Rights Reserved. Theme Jasmine by Kent Liao.