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 是硬骨头,优先想办法改类型,否则用中继。
  • 理解“映射行为 + 过滤行为”是彻底搞懂的关键。