跳到主要内容

什么是 NAT 穿透?

大多数设备都没有自己的公网地址,而是位于路由器的网络地址转换(NAT)之后,由许多内部设备共享一个公网地址。这对访问外部服务器没有问题,但意味着两台这样的设备无法直接连接对方。NAT 穿透就是让它们仍能建立直连的一组技术。

简而言之

NAT 穿透是一组技术,让两台位于路由器(NAT)之后的设备建立直连,即使双方都没有可供对方直接连接的公网地址。

NAT 穿透如何运作

  • 01

    协调(信令)服务帮助两个对等端获知彼此对外可见的地址和端口,也就是外界透过各自的 NAT 看到的样子。

  • 02

    STUN 是对等端了解自身公网地址和端口(即从 NAT 外部看到的样子)的常用方式。

  • 03

    凭借这些信息,对等端尝试「打洞」:双方同时朝对方发送数据包,使各自的 NAT 为对方的流量开启一条路径。

  • 04

    当无法打开直连路径时(某些严格的 NAT 会阻断),可以由中继(常称为 TURN)作为回退转发流量,代价是多出一跳。

UDP 打洞,逐步拆解

在典型流程中,每个对等端先联系信令服务器,并通过 STUN 获知自己的 NAT 对外呈现的公网地址和端口。服务器把每个对等端的对外候选地址告诉另一方。随后,两个对等端几乎同时向对方的对外地址发送数据包。每一方发出的第一个出站数据包都会让自己的 NAT 创建一条临时映射,等待回复;另一方的数据包到达时正好匹配这条映射,于是得以通过。双向各有几个数据包通过后,一条双向直连路径就打通了,加密隧道便在其上运行。

何时需要中继

打洞对大多数 NAT 类型都能成功,但有些 NAT(所谓的对称型 NAT,或严格的企业防火墙)会分配不可预测的端口或阻断尝试,导致无法建立直连路径。这时的回退方案是中继:一台双方都能访问的服务器,由它转发流量。在设计良好的系统中,中继只转发它无法读取的已加密数据包;它会增加时延和一跳,但看不到数据内容。好的 Mesh 只把中继作为最后手段,仅在无法建立直连隧道时使用。

这与 Vexaro Mesh(开发中)有何关系

目前正在开发中的 Vexaro Mesh 计划内置 NAT 穿透:NAT 之后的对等节点只要网络允许就直接连接,仅在网络不允许时才经由中继。网关计划在任意链路上建立加密隧道,无需端口转发或公网地址,从而让站点间路径保持最短。

查看规划中的功能

常见问题

为什么两台位于 NAT 之后的设备不能直接连接?
因为双方都没有可供对方直接连接的公网地址,而且它们的路由器默认会丢弃未经请求的入站流量。NAT 穿透的解决办法是:先由信令服务告诉双方对方在外部看来的地址,再让双方同时发起连接(打洞),使各自的路由器为对方的数据包打开一条路径。
NAT 穿透需要在我的防火墙上开放端口吗?
通常不需要。打洞等技术的意义就在于无需手工端口转发即可建立连接:对等节点主动发起出站流量,自行创建所需的临时映射。依赖这类技术的系统设计上可在 NAT 之后工作,无需端口转发或公网地址,Vexaro Mesh 的设计同样两者都不需要。

关注 Vexaro Mesh 的构建进展.

Vexaro Mesh 正在开发中。告诉我们您的站点情况,我们将就抢先体验与您联系。