群晖 Docker 部署
创建项目
其他系统的 Docker 同理,因为我有群晖所以这里介绍这如何使用Container Manager
原文链接:安装 (命令行程序) | EasyTier – 简单、安全、去中心化的异地组网方案
Container Manager 中新增一个项目
创建 /volume<n>/docker/easytier/root
文件夹,并填写 docker-compose.yml
内容,记得用户名和密码 DIY 高一点,避免和别人冲突和别人组在一起:
services:
watchtower: # 用于自动更新easytier镜像,若不需要请删除这部分
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_NO_STARTUP_MESSAGE
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 3600 --cleanup --label-enable
easytier:
image: easytier/easytier:latest # 国内用户可以使用 m.daocloud.io/docker.io/easytier/easytier:latest
hostname: easytier
container_name: easytier
labels:
com.centurylinklabs.watchtower.enable: 'true'
restart: unless-stopped
network_mode: host
cap_add:
- NET_ADMIN
- NET_RAW
environment:
- TZ=Asia/Shanghai
devices:
- /dev/net/tun:/dev/net/tun
volumes:
# - /etc/easytier:/root
- ./root:/root # docker的root放在文件夹内更好
- /etc/machine-id:/etc/machine-id:ro # 映射宿主机机器码
command: -d --network-name <用户> --network-secret <密码> -p tcp://public.easytier.cn:11010
这里用的是 public.easytier.cn
域名,而后面客户端默认是 public.easytier.top
,注意要一致性,如果喜欢 cn
就都用 cn
。
这里没有用到官网用户名,如果需要用到官网用户,我会在后面讲解。
错误处理
注意,如果没有开启 tun 的群晖直接构建该项目,会报错:
Error response from daemon: error gathering device information while adding custom device "/dev/net/tun": no such
这个错误提示表明 Docker 容器在尝试访问 /dev/net/tun
设备时失败了,因为宿主机上不存在这个设备文件。
错误原因解释:
/dev/net/tun
是 Linux 系统中用于创建虚拟网络隧道(TUN/TAP 设备)的特殊设备文件。它主要用于实现 VPN、隧道连接、虚拟网络等功能,允许应用程序在用户空间创建和管理网络数据包。
在配置中,easytier 容器需要使用 TUN 设备来建立虚拟网络连接,所以配置了 devices: - /dev/net/tun:/dev/net/tun
来映射这个设备到容器中。
解决方法:
检查宿主机是否支持 TUN 设备:
连接群晖的 SSH
,运行以下命令确认 TUN
模块是否加载:
lsmod | grep tun
一般会列出:
tunnel4 2453 1 sit
ip6_udp_tunnel 1967 1 vxlan
udp_tunnel 2419 1 vxlan
ip_tunnel 12462 1 sit
从执行的输出结果来看,目前系统中并没有加载 tun
模块,显示的是其他与隧道相关的模块(如 tunnel4
、udp_tunnel
等),这些和 tun
模块不是一回事。
手动加载 tun
模块
执行以下命令尝试加载 tun
模块:
sudo modprobe tun
但是每次开机都执行该命令去加载 tun 模块不现实
那么就在设置的计划任务中加入该命令脚本 Import TUN mod ,记得用户账号改为 root :
#!/bin/sh
modprobe tun # 不需要 sudo,因为脚本本身以 root 运行
这样一来,开机后就会执行命令加载 tun
模块。
这样构建项目后,就完成了服务器的配置。
客户端配置
我们可以在这里找到对应系统的图形界面安装包:安装 (图形界面) | EasyTier – 简单、安全、去中心化的异地组网方案或下载 | EasyTier – 简单、安全、去中心化的异地组网方案
这里先用 Windows 为例:
确认框中内容和 docker 的 yml 一样,点击运行网络
这样就能和群晖 nas 组在一起了。
MacOS 可以用 dmg 安装包,也可以用 brew:
brew tap brewforge/chinese
brew install --cask easytier-gui
使用方法同理。
安装服务端
如果你要用手头的 VPS 自建节点,服务器中输入以下命令:
wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/install.sh" && sudo bash /tmp/easytier.sh install --gh-proxy https://ghfast.top/
easytier-core
# 如果对共享节点要进行更多配置,请至官网查看
# 可配置关闭转发、私有模式等
网络方式中安需求填写类似 tcp://公网IP:11010
之类即可,也可填写为其配置的域名。
官网可视化自定义配置(高阶)
进入官网 EasyTier – 简单、安全、去中心化的异地组网方案,点击右上角的 Web 控制台 注册登录。
记住用户名,将 yml 改为:
services:
watchtower: # 用于自动更新easytier镜像,若不需要请删除这部分
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_NO_STARTUP_MESSAGE
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 3600 --cleanup --label-enable
easytier:
image: easytier/easytier:latest # 国内用户可以使用 m.daocloud.io/docker.io/easytier/easytier:latest
hostname: easytier
container_name: easytier
labels:
com.centurylinklabs.watchtower.enable: 'true'
restart: unless-stopped
network_mode: host
cap_add:
- NET_ADMIN
- NET_RAW
environment:
- TZ=Asia/Shanghai
devices:
- /dev/net/tun:/dev/net/tun
volumes:
# - /etc/easytier:/root
- ./root:/root # docker的root放在文件夹内更好
- /etc/machine-id:/etc/machine-id:ro # 映射宿主机机器码
command: -w <用户名>
构建后,会在 web 控制台中看到设备,点击设备的设置齿轮图标,创建一条网络,和图形客户端一致:
这样创建网络并组网就完成了,可以随时随地在网页上修改、添加多条组网线。