使用 EasyTier 异地组网互联
Github Release: https://github.com/EasyTier/EasyTier/releases
安装:https://easytier.cn/guide/installation.html
Docker Hub: https://hub.docker.com/r/easytier/easytier
服务端:私有共享节点 compose.yaml 配置
shell
services:
easytier:
image: easytier/easytier:v2.6.4
hostname: easytier
container_name: easytier
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/machine-id:/etc/machine-id:ro
command: >
--private-mode true --network-name <网络名(用户)> --network-secret <密码>- cap_add: 给容器高级网络权限。给容器添加 Linux 内核能力(普通容器没有的高级权限)
- NET_ADMIN:
- 允许容器管理网络:
- 建网卡、改路由、开 iptables、配置隧道、启动 VPN 等。
- NET_RAW:
- 允许容器发送 / 接收原始网络包。
- 抓包、ping、建立隧道、运行代理、VPN 必备。
- NET_ADMIN:
一句话:没有这两个权限,容器无法创建 VPN / 代理 / 隧道类网络功能。
- devices: /dev/net/tun:
- 把宿主机的 TUN/TAP 设备映射进容器。TUN 是 Linux 虚拟网卡,专门用于:
- VPN、代理、隧道、虚拟网络。
- 把宿主机的 TUN/TAP 设备映射进容器。TUN 是 Linux 虚拟网卡,专门用于:
几乎所有 VPN、旁路由、透明代理 容器都必须映射这个设备。
- volumes: /etc/machine-id:ro:
- 把宿主机的 机器唯一 ID 只读挂载进容器。用途:
- 让容器内的应用识别这台机器的唯一标识;
- 用于认证、授权、唯一设备标记;
- ro = 只读,安全,防止容器篡改宿主机文件
- 把宿主机的 机器唯一 ID 只读挂载进容器。用途:
hostname: 主机名(起一个能分别出来是哪台主机的名字) --network-name=网络名: 你的网络名。 --network-secret=超级复杂的密码: 你的网络密码。 --private-mode true: 启用私有模式。 默认端口:11010
客户端:docker compose.yaml 配置
shell
services:
easytier:
image: easytier/easytier:v2.6.4
hostname: client1
container_name: easytier
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/machine-id:/etc/machine-id:ro
command: >
-d --network-name <用户> --network-secret <密码>
-p tcp://<其他对等节点 / 公共节点的公网 IP>:11010客户端:Windows GUI
在 Github 下载页根据自己的操作系统下载 GUI 软件并安装。比如下载:easytier-gui_2.6.4_x64-setup.exe
右键,以管理员权限运行安装。
安装完成后,第一次运行需要网络访问权限,程序如何卡住,进入进程管理,杀掉进程,再双击打开,就会弹窗网络访问授权弹框了。
创建一个网络:
- 配置 network-name 和 network-secret。和服务端保持一致。
- 添加对等节点 -p tcp://<其他对等节点 / 公共节点的公网 IP>:11010
- 高级设置中设置为私有模式
- 主机名称添加一个可以分辨出来是哪台主机的名字。
然后点击最下面的:Run Network 按钮。
客户端 A 访问客户端 B 上的 SSH 和 HTTP 服务
- 客户端 B 开放 SSH 和 HTTP 端口。
- 客户端 A 访问客户端 B 在 easytier 上的 ip + SSH 或 HTTP 端口。
然后按照正常的访问方式访问即可。
