← 返回文章 ESSAY

EasyTier 组网实战:P2P、中继与对称 NAT 的真相

WireGuard 全走中转的时代结束了。EasyTier 的 P2P、中继与对称 NAT 穿透,到底是怎么工作的。

目录 · 13 节
  1. 01为什么换掉 WireGuard
  2. 02架构
  3. 03实测结果
  4. 04对称 NAT 的坑
  5. 05关键配置
  6. 06服务端(有公网 IP 的)
  7. 07客户端(在 NAT 后面)
  8. 08踩坑记录
  9. 09坑 1:dhcp = true 放错位置
  10. 10坑 2:公网端口没映射
  11. 11坑 3:进程杀不干净
  12. 12能不能用它做代理?
  13. 13最终效果

为什么换掉 WireGuard

之前的方案是 WireGuard,阿里云做 hub,家里和笔记本都连它。

问题:所有流量都走阿里云。

  • 多一跳
  • 受 VPS 带宽限制
  • 阿里云一卡,全家断网

EasyTier 是去中心化的(P2P 优先),所以换了过来。

架构

阿里云(公网 IP,引导节点)
   ├─ 家里路由器(10.126.126.2)
   ├─ 家里台式机(10.126.126.4)
   ├─ 笔记本(10.126.126.x)
   └─ 手机(10.126.126.x)

阿里云只做"介绍人" —— 节点互相认识之后,数据直接 P2P,不经过它。

实测结果

| 虚拟 IP        | 主机名      | 类型 | 延迟    |
| 10.126.126.1   | aliyun-node | p2p  | 20ms    |
| 10.126.126.2   | qwrt-home   | p2p  | 0.8ms   |
| 10.126.126.4   | h610-home   | p2p  | 1ms     |

全部 P2P 直连,包括那台在校园 CGNAT 后面的路由器。

对称 NAT 的坑

家里的路由器在校园网后面,是对称型 NAT(Symmetric)。

对称 NAT 的特点:

  • 每个目标分配的映射端口都不同
  • 所以"预测端口打通"完全失效
  • 外部无法主动连进来

但 EasyTier 还是打通了 —— 因为它主动连出去了。

关键配置

服务端(有公网 IP 的)

instance_name = "aliyun-node"
hostname = "aliyun-node"

[network_identity]
network_name = "your-net"
network_secret = "your-secret"

[flags]
default_protocol = "udp"

启动时监听:

easytier-core -c config.toml \
  -l tcp://0.0.0.0:7005 \
  -l udp://0.0.0.0:7005

客户端(在 NAT 后面)

instance_name = "home"
hostname = "home"

dhcp = true          # ⚠️ 必须在顶层,不是 [flags] 里

[network_identity]
network_name = "your-net"
network_secret = "your-secret"

[[peer]]
uri = "tcp://<服务器公网IP>:7005"

[[peer]]
uri = "udp://<服务器公网IP>:7005"

[flags]
default_protocol = "udp"
enable_upnp = true   # 自动申请端口映射

踩坑记录

坑 1:dhcp = true 放错位置

# ❌ 错误:放在 [flags] 里,不生效
[flags]
dhcp = true

# ✅ 正确:放顶层
dhcp = true

放错的表现:节点进网了,但拿不到虚拟 IP,所以 ping 不通任何节点。

坑 2:公网端口没映射

服务器的监听端口(比如 11010)如果没在云厂商的安全组 / 端口映射里开,外面连不上。

我一开始用 11010,结果连不上。换成已经映射的端口就好了。

坑 3:进程杀不干净

pkill -f easytier-core    # busybox 上可能不生效

老进程占着端口,新进程报 Address in use。

正确做法:

for p in $(ps | grep "[e]asytier-core" | awk '{print $1}'); do
  kill -9 $p
done

能不能用它做代理?

不能替代现有的代理协议。

原因:

  • EasyTier 是 IP 层 VPN,不是 HTTP/SOCKS 代理
  • 它不提供"按域名分流"的能力
  • 而且如果代理流量走 EasyTier,就是双层隧道,更慢

正确的分工:

  • EasyTier → 管理面(远程访问家里设备、连服务器内网)
  • OpenClash / mihomo → 面向公网的代理(规则、分流、DNS)

最终效果

现在我在任何地方都能:

  • ssh 10.126.126.2 进家里路由器
  • http://10.126.126.4:3080 访问家里的 DSH Web
  • 10.126.126.1 访问阿里云
  • 全部 P2P,延迟 1-20ms

这才是组网该有的样子。