1. 为什么需要了解 NAT 类型?

家庭宽带大多没有公网 IP(或处于运营商 CGNAT 大内网),内网设备无法被外网主动访问。P2P 打洞(Hole Punching)通过中间服务器协助,让双方 NAT 上临时打开“洞”,实现直连。

适用场景:

  • 异地访问家庭内网设备(无公网 IP)
  • 游戏联机(降低延迟)
  • BT / P2P 下载加速
  • WireGuard / Tailscale / ZeroTier / EasyTier 等组网

核心结论:NAT1(Full Cone)最容易打洞,NAT4(Symmetric)最难甚至几乎不可能稳定直连。

2. NAT 的两个核心行为(必须先理解)

NAT 设备有两类关键行为:

① 出站映射行为(Mapping,针对内网→外网)

  • Endpoint-Independent Mapping(端点无关映射):同一内网 IP:端口 发出的包,无论目标是谁,都复用同一个公网 IP:端口映射。
    → 称为 Easy NAT
  • Address and Port-Dependent Mapping(地址和端口相关映射):目标 IP 或端口不同,就分配新的公网端口。
    → 称为 Hard NAT(对称型)。

② 入站过滤行为(Filtering,针对外网→内网)

  • Endpoint-Independent Filtering(端点无关过滤):只要洞开着,任意外部 IP:端口 都能进来。
  • Address-Dependent Filtering(地址相关过滤):只允许曾经主动联系过的外部 IP 进来(端口不限)。
  • Address and Port-Dependent Filtering(地址和端口相关过滤):只允许曾经主动联系过的外部 IP + 端口 进来。

这两个行为的组合决定了最终的 NAT 类型。

3. 四种常见 NAT 类型(RFC 3489 定义)

NAT 类型映射行为过滤行为通俗理解打洞难度
NAT1 Full Cone(全锥)端点无关端点无关最宽松。一旦开洞,任何人都能从该公网端口进来最容易
NAT2 Restricted Cone(地址限制锥)端点无关地址相关只有你主动联系过的 IP 才能回来较容易
NAT3 Port Restricted Cone(端口限制锥)端点无关地址+端口相关必须 IP + 端口都匹配才能回来中等
NAT4 Symmetric(对称)地址+端口相关地址+端口相关每个目标都开新端口,最严格最难
  • Easy NAT = 所有端点无关映射的类型(NAT1/2/3)
  • Hard NAT = 只有对称型(NAT4)

4. 检测自己的 NAT 类型

  1. 关闭所有代理 / VPN / 加速器。
  2. 访问 https://natchecker.com (或类似 STUN 检测工具)。
  3. 记录两端设备的结果(电脑 + 手机/另一台电脑)。

注意:网页检测可能因浏览器权限不完全准确,建议用客户端工具二次验证。

5. 各 NAT 组合打洞流程与成功率(视频核心实战)

使用 Tailscale(或 EasyTier)进行演示。原理是:双方先通过中间服务器(DERP / 中继)交换公网 IP:端口信息,然后同时向对方发送 UDP 包,利用“先发后收”的特性在双方 NAT 上打洞。

打洞成功率矩阵(简化)

双方 NAT能否稳定直连说明
NAT1 ↔ NAT1极易成功双方任意发即可
NAT1 ↔ NAT2/3极易成功NAT1 端很宽松
NAT1 ↔ NAT4可成功NAT1 端接受即可,NAT4 端需要预测/多次尝试
NAT2/3 ↔ NAT2/3可成功双方同时发 + 正确端口即可
NAT3 ↔ NAT4较难,可能成功需要端口预测扫描
NAT4 ↔ NAT4极难 / 基本失败双方端口都在变,只能靠碰撞或中继

具体流程示例

  1. NAT1 ↔ NAT1
    双方通过 STUN 获知对方公网 IP:端口 → 直接互发 → 立刻直连。

  2. NAT1 ↔ NAT3
    NAT3 端先向 NAT1 的公网端口发 → 在 NAT3 上开洞 → NAT1 回复即可通过。

  3. NAT3 ↔ NAT3
    双方同时向对方已知端口发 UDP → 双方洞都开 → 直连成功。

  4. NAT1 ↔ NAT4 / NAT3 ↔ NAT4
    需要端口预测(EasyTier 等工具会尝试扫描相邻端口)。有一定成功率,但不保证。

  5. NAT4 ↔ NAT4
    双方端口完全随机变化,几乎无法预测。视频建议直接放弃直连,使用中继,或想办法改变其中一方 NAT 类型。

实际测试中,Tailscale 的 tailscale status 会显示 direct(直连)或 relay(中继)。

6. 如何改善家庭 NAT 类型

如果检测到 NAT3/4,可尝试以下手段(按推荐顺序):

  1. 开启路由器 Full Cone NAT(部分华硕、小米、OpenWrt 软路由支持)。
  2. 开启 UPnP(游戏机常用)。
  3. 将设备放入 DMZ(暴露主机,安全性降低,慎用)。
  4. 使用软路由(OpenWrt / iStoreOS) 并开启 Full Cone NAT 插件。
  5. 联系运营商 申请公网 IP 或修改 NAT 行为(部分运营商可改)。
  6. CGNAT 用户注意:你只能控制家里这一层 NAT。如果运营商是 NAT4,家里怎么改都没用。最终结果由更严格的那一层决定。
  7. IPv6:如果运营商提供 IPv6 且设备支持,很多情况下可绕过 NAT 限制。

对于必须 NAT4 的情况:

  • 使用自建中继服务器(推荐)
  • 或接受官方免费中继(延迟较高)

7. 推荐工具与实操步骤(快速上手)

  1. 检测 NAT:https://natchecker.com
  2. 注册 Tailscale 账号(建议用微软/苹果邮箱)。
  3. 两端安装客户端并登录同一账号 → 自动组网。
  4. 查看状态:tailscale status(看是否 direct)。
  5. 进阶:使用 EasyTier(国产,打洞能力强,支持端口预测)。

总结

  • NAT1 是理想状态,打洞几乎无压力。
  • NAT2/3 通过正确打洞流程大多可直连。
  • NAT4 是硬骨头,优先想办法改类型,否则用中继。
  • 理解“映射行为 + 过滤行为”是彻底搞懂的关键。