利用 EasyTier 解决 Parsec 在 NAT4 恶劣网络下的 -6023 报错

最近需要在校园网环境远程连接家里的电脑打游戏。鉴于 Parsec 极低的延迟体验,它本是我的首选方案。

但在实际使用时却非常不顺,点击连接后直接弹出了 -6023 报错。去官网查阅了 相关文档,确认是 NAT 穿透(打洞)的问题。我又测试了两端的网络环境,结果并不意外:两边都是 NAT4。在双端均为 NAT4 的恶劣环境下,Parsec 自带的穿透能力确实难以生效。

parsec-p2p-error

尝试使用 EasyTier 组网

为了解决 NAT4 to NAT4 的穿透难题,我调研了一圈工具,最后决定试试 EasyTier。其官网描述的特性非常契合我的需求:

  • 易用:支持网页、客户端、命令行多方式操作,可一键组网。
  • 跨平台:支持 Win / MacOS / Linux / FreeBSD / Android,兼容 X86 / ARM / MIPS 架构。
  • 高效 NAT 穿透:支持 UDP、IPv6 穿透,可打通 NAT4-NAT4 网络。
  • 高性能:由 Rust 语言编写,全链路零拷贝,性能相对较高。

我在控制端和被控端都部署好了 EasyTier。效果确实不错,在终端里输入 easytier route 查看路由表,发现双端已经成功建立了 P2P 直连,底层链路是通畅的。

easytier-route

遇到的“坑”:NAT 穿透成功,但 Parsec 依然报错

本以为底层 P2P 通了就能直接开玩,结果再次打开 Parsec,依然是那个熟悉的 -6023 错误。

排查了一番才发现,问题出在 Parsec 的机制上:它默认不会主动去扫描 EasyTier 这类虚拟组网软件生成的虚拟网段。也就是说,虽然链路打通了,但 Parsec 找不到这条路,自然就无法连接。

解决方法:配置子网代理 (CIDR)

既然 Parsec 不走虚拟 IP,那我们就把家里的真实局域网段“推”给它。解决方法其实很简单,只需要配置被控端

  1. 在家里电脑(或路由器)的 EasyTier 配置中,找到 子网代理(CIDR) 这一项。
  2. 在这里填入你家里局域网的真实网段。

示例:如果你的网关是 10.0.0.1,那么你的 CIDR 就是 10.0.0.0/24

easytier-CIDR

注意:配置完成后,记得停止并重启控制端的 EasyTier 服务,否则路由配置不会生效。

最终效果

做完 CIDR 配置后,再次打开 Parsec,发现已经可以顺利连接了!

Parsec 这时成功借道 EasyTier 打通的 P2P 链路连上了家里的主机。看了一下右下角的 Network 数据,延迟和丢包率都非常低,跟公网直连的体验几乎一致。

parsec-success