← 返回文章
ESSAY
EasyTier 组网实战:P2P、中继与对称 NAT 的真相
WireGuard 全走中转的时代结束了。EasyTier 的 P2P、中继与对称 NAT 穿透,到底是怎么工作的。
为什么换掉 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 Web10.126.126.1访问阿里云- 全部 P2P,延迟 1-20ms
这才是组网该有的样子。