在现代网络环境中,我们常常需要将分布在不同地理位置的设备组成一个私有网络,实现安全便捷的互联互通。无论是企业分支机构组网、远程办公访问内网资源,还是家庭多设备跨网协作,EasyTier 都是一个理想的解决方案。本文将详细介绍如何使用 Docker 快速部署 EasyTier,从零开始搭建一个跨网络的虚拟私有局域网。

什么是 EasyTier?

EasyTier 是一款轻量级的虚拟组网工具,它能够将分布在不同网络环境中的设备通过 P2P 技术连接起来,形成一个逻辑上的私有局域网。与传统 VPN 相比,EasyTier 具有部署简单、穿透能力强、支持 NAT 环境等优势,非常适合个人和中小企业使用。

其核心优势包括:

  • 去中心化设计,节点可直接通信

  • 强大的 NAT 穿透能力,适应各种网络环境

  • 内置加密机制,保障数据传输安全

  • 支持跨平台部署,兼容 Windows、Linux、macOS 等系统

准备工作

在开始部署前,请确保你的环境满足以下要求:

  1. 至少两台需要组网的设备(物理机、虚拟机或云服务器均可)

  2. 所有设备已安装 Docker 环境

  3. 设备能够访问互联网(无需公网 IP)

  4. 设备间网络延迟建议在 300ms 以内

安装 Docker 环境

如果你的设备尚未安装 Docker,可以通过以下命令快速安装:

bash

# 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 启动Docker服务并设置开机自启
sudo systemctl enable --now docker

# 将当前用户添加到docker组(避免每次使用sudo)
sudo usermod -aG docker $USER

安装完成后,注销并重新登录使权限生效,然后通过docker --version验证安装是否成功。

1.配置服务端config.yaml文件

在/opt/1panel/apps/EasyTier新建一个config.yaml文件,没有自建新建一个!

下面的直接复制进入,按照提示修改下

# ============================== 基础节点标识配置 ==============================
# 节点实例名称:用于管理界面和日志中区分节点,可自定义(如“办公区服务器”“家庭主节点”)
instance_name = "Easytier-server"

# 主机名:虚拟网络内的设备唯一标识,需与其他节点不重复(便于识别设备)
hostname = "Easytier-server"

# 虚拟网络固定IP:服务端在虚拟网中的静态IP及子网
# 格式:IP/子网掩码(示例中 10.0.0.1/24 表示子网为 10.0.0.0/24,服务端IP固定为 10.0.0.1)
# 注意:服务端必须手动指定固定IP,避免客户端因IP变动断开连接这个IP段可以自定义
ipv4 = "10.0.0.1/24"

# DHCP开关:是否允许自动获取IP(服务端必须设为 false,客户端可按需设为 true)
# 警告:服务端启用DHCP可能导致IP冲突或变动,影响客户端稳定性
dhcp = false


# ============================== 客户端接入监听配置 ==============================
# 监听列表:服务端开放的接入入口,客户端需通过这些协议+端口连接
# 支持多协议同时监听,适配不同网络场景(可根据需求增删)
listeners = [
  "tcp://0.0.0.0:10100",   # TCP协议:兼容性强,适合常规网络(如企业内网、家庭宽带)
  "udp://0.0.0.0:10100",   # UDP协议:低延迟,适合对速度敏感的场景(如文件传输、远程桌面)
  "wg://0.0.0.0:10101",    # WireGuard协议:轻量安全,适合跨公网组网(推荐移动设备接入)
  "ws://0.0.0.0:10101/",   # WebSocket协议:基于HTTP,可穿透部分企业防火墙
  "wss://0.0.0.0:10102/"   # WSS协议:WebSocket+TLS加密,公网传输更安全,防拦截
]


# ============================== 组网交互配置 ==============================
# 出口节点列表:指定当前节点是否作为“流量出口”(服务端默认空列表,即不转发流量到公网)
# 若需客户端通过服务端访问公网,可填写服务端虚拟IP(如 ["10.0.0.1"]),并开启 enable_exit_node
exit_nodes = []

# RPC管理端口:本地管理接口(仅监听127.0.0.1,不对外暴露)
# 用于通过命令行工具(如 easytier status)管理服务端,无需修改
rpc_portal = "127.0.0.1:15888"


# ============================== 虚拟网络身份验证 ==============================
[network_identity]
# 网络名称:标识当前虚拟网络(如“公司内网”“家庭组网”)
# 注意:所有接入同一网络的节点(客户端/服务端)必须填写相同名称
network_name = "自定义网络名称"  # 示例:"company-intranet" 或 "home-network"

# 网络密钥:虚拟网络的访问密码,用于验证节点权限
# 作用:防止非法节点加入,所有节点必须填写相同密钥
network_secret = "自定义网络密钥"  # 示例:"StrongPass123!"(建议包含字母、数字和符号)


# ============================== 高级功能开关 ==============================
[flags]
# 默认连接协议:客户端首次连接时优先使用的协议
# 推荐:TCP(兼容性强)或 UDP(低延迟),根据主场景选择
default_protocol = "tcp"

# TUN设备名称:虚拟网卡名称(留空自动生成,如 easytier0;冲突时可自定义,如 "easytier-server")
dev_name = ""

# 加密开关:必须设为 true,确保虚拟网内数据传输加密(防止窃听和篡改)
enable_encryption = true

# IPv6支持:是否开启虚拟网内IPv6通信(网络支持IPv6则设为 true,仅用IPv4设为 false)
enable_ipv6 = true

# MTU(最大传输单元):虚拟网卡单次最大传输量(默认1380,适配多数网络)
# 若出现卡顿/丢包,可尝试调整为1420或1460(需匹配实际网络MTU,避免分片过多)
mtu = 1380

# 低延迟优先:false 优先稳定,true 优先低延迟(常规场景建议 false)
latency_first = false

# 出口节点开关:是否允许当前节点作为流量出口(服务端默认 false,不转发客户端公网流量)
# 若需客户端通过服务端上网,需设为 true,并在 exit_nodes 中添加服务端IP
enable_exit_node = false

# 禁用TUN设备:必须设为 false(Easytier 依赖TUN设备实现虚拟组网)
no_tun = false

# Smoltcp协议:是否使用轻量级TCP/IP协议栈(默认 false,仅特殊场景需开启,如嵌入式设备)
use_smoltcp = false

# 外部网络白名单:控制跨网络访问权限(仅允许转发指定虚拟网络的流量)
# 格式:多个网络名用空格分隔,支持通配符(* 表示所有网络)
# 示例:"company-intranet home-network" 表示仅允许这两个网络的流量转发
foreign_network_whitelist = "自定义网络名称"  # 需与 network_name 一致

2.创建去中心化服务端容器

docker run -d \
  --name easytier \
  --restart always \
  --privileged \
  --network host \
  --hostname easytier \
  -v /opt/1panel/apps/EasyTier/:/root \
  -e TZ=Asia/Shanghai \
  easytier/easytier:latest \
  -c /root/config.yaml

这个挂在目录根据你实际的填写,如果不会和我填写一样的/opt/1panel/apps/EasyTier

容器创建成功我们的服务端就建立成功了

3.配置客户端config.toml文件

创建客户端文件 opt/easytier 没有配置文件自己创建

没有自己新建一个,和服务端一样,下面的直接粘贴进去

# ============================== 客户端基础标识配置 ==============================
# 节点实例名称:自定义,区分客户端节点(如“家里电脑客户端”“办公室笔记本”)
instance_name = "Easytier-Client"

# 主机名:客户端在虚拟网中的设备名,需与服务端/其他客户端不重复(便于识别)
hostname = "Easytier-Client"

# 虚拟网络IP:客户端在虚拟网中的IP(需与服务端同网段 10.0.0.0/24,且不与服务端/其他客户端冲突)
# 服务端IP是 10.0.0.1,客户端可设 10.0.0.2、10.0.0.3 等(固定IP更稳定)
ipv4 = "10.0.0.2/24"

# DHCP开关:客户端可设 true(自动获取IP)或 false(手动填IP,推荐手动避免冲突)
dhcp = false


# ============================== 客户端连接配置(核心!指向服务端) ==============================
# 监听列表:客户端可选配置(若仅“主动连服务端”,留空也可;如需被其他节点连,可添加协议)
listeners = [
  "tcp://0.0.0.0:10100",  # 可选:客户端开放TCP监听(供其他节点连接)
  "udp://0.0.0.0:10100"   # 可选:客户端开放UDP监听(低延迟场景)
]

# 对等节点列表(关键!配置服务端的连接地址)
[[peer]]
# uri:服务端的“访问地址”(格式:协议://服务端IP:服务端对应端口)
# 需替换为实际服务端IP(公网/内网IP),端口与服务端监听列表一致(推荐先试TCP 10100)
uri = "tcp://服务端实际IP:10100"


# ============================== 客户端组网交互配置 ==============================
# 出口节点列表:若需通过服务端访问公网,填服务端虚拟IP(10.0.0.1);仅虚拟网内通信则留空
exit_nodes = [
  # "10.0.0.1"  # 如需“客户端通过服务端上公网”,取消注释并填写
]

# RPC管理端口:客户端本地管理端口(仅本地用,无需修改)
rpc_portal = "127.0.0.1:15888"


# ============================== 虚拟网络身份验证(必须与服务端完全一致!) ==============================
[network_identity]
# 网络名称:必须和服务端的 network_name 完全相同
network_name = "自定义网络名称"

# 网络密钥:必须和服务端的 network_secret 完全相同(接入网络的“密码”)
network_secret = "自定义网络密钥"


# ============================== 客户端高级功能开关(与服务端兼容即可) ==============================
[flags]
# 默认连接协议:与服务端一致(推荐 tcp,兼容性最好)
default_protocol = "tcp"

# TUN设备名称:客户端虚拟网卡名(留空自动生成,或自定义如 "easytier-client")
dev_name = ""

# 加密开关:必须和服务端一致(推荐 true,确保数据安全)
enable_encryption = true

# IPv6支持:与服务端一致(服务端开启则客户端也开启)
enable_ipv6 = true

# MTU:必须和服务端一致(推荐 1380,避免数据包分片)
mtu = 1380

# 低延迟优先:与服务端一致(常规场景推荐 false,优先稳定)
latency_first = false

# 出口节点开关:客户端一般不做“流量出口”,设 false 即可
enable_exit_node = false

# 禁用TUN设备:必须设 false(依赖TUN网卡组网)
no_tun = false

# Smoltcp协议:与服务端一致(默认 false 即可)
use_smoltcp = false

# 外部网络白名单:与服务端一致(仅允许本网络流量)
foreign_network_whitelist = "自定义网络名称"

4.创建客户端容器

docker run -d \
  --name easytier-client \
  --restart unless-stopped \
  --network host \
  --cap-add=NET_ADMIN \
  --cap-add=NET_RAW \
  --device /dev/net/tun:/dev/net/tun \
  -e TZ=Asia/Shanghai \
  -v /opt/easytier:/app \
  easytier/easytier:latest \
  -c /app/config.toml

挂载目录替换成实际的/opt/easytier

如果需要添加更多客户端节点,操作逻辑与上述步骤一致,仅需注意 “虚拟 IP 唯一性” 即可:只需在新客户端的配置文件中,将 ipv4 字段修改为与服务端同网段(即 10.0.0.x/24)且未被占用的地址(例如 10.0.0.2/2410.0.0.4/24 等,避免与已有的服务端 / 客户端 IP 冲突),其余配置(如 network_namenetwork_secret、服务端 uri 等)需严格与服务端保持一致。

按照此方法,你可以轻松扩展组网规模,无论是家庭多设备互联,还是企业分支组网,都能快速实现设备接入。

如果这份教程对你有帮助,欢迎在评论区留言交流使用心得,也可以分享你的组网场景,一起探讨更优的配置方案~