【教程】自建组网,EasyTier

【教程】自建组网,EasyTier

群晖Docker部署EasyTier实现异地组网。 主题:利用Docker在群晖NAS上部署EasyTier,构建安全便捷的异地组网。 方法:通过Container Manager创建项目,配置docker-compose.yml文件,映射TUN设备,并解决TUN模块加载问题。客户端按需安装图形界面或命令行版本,与服务端配置一致即可组网。 结论:成功实现群晖NAS与其他设备间的安全异地连接。 价值:提供了一种简单易行的跨设备、跨地域网络连接方案,提升数据访问的便捷性和安全性。 创新:利用Docker简化部署流程,并提供TUN模块加载的解决方案,使得在群晖上部署此类网络工具更加可行。 局限:需要群晖开启SSH并具备一定的Linux基础来解决TUN模块问题。部分高级配置可能需要查阅官方文档。 后续方向:探索更自动化的TUN模块加载方式,以及与其他NAS服务(如SMB、Docker容器内服务)的集成优化。

 次点击
29 分钟阅读

群晖 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 模块,显示的是其他与隧道相关的模块(如 tunnel4udp_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 控制台中看到设备,点击设备的设置齿轮图标,创建一条网络,和图形客户端一致:

这样创建网络并组网就完成了,可以随时随地在网页上修改、添加多条组网线。

© 本文著作权归作者所有,未经许可不得转载使用。