一次彻底搞懂 NAT 打洞!从 NAT1 到 NAT4,教你无公网 IP 也能直连回家
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 类型
- 关闭所有代理 / VPN / 加速器。
- 访问 https://natchecker.com (或类似 STUN 检测工具)。
- 记录两端设备的结果(电脑 + 手机/另一台电脑)。
注意:网页检测可能因浏览器权限不完全准确,建议用客户端工具二次验证。
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 | 极难 / 基本失败 | 双方端口都在变,只能靠碰撞或中继 |
具体流程示例:
NAT1 ↔ NAT1
双方通过 STUN 获知对方公网 IP:端口 → 直接互发 → 立刻直连。NAT1 ↔ NAT3
NAT3 端先向 NAT1 的公网端口发 → 在 NAT3 上开洞 → NAT1 回复即可通过。NAT3 ↔ NAT3
双方同时向对方已知端口发 UDP → 双方洞都开 → 直连成功。NAT1 ↔ NAT4 / NAT3 ↔ NAT4
需要端口预测(EasyTier 等工具会尝试扫描相邻端口)。有一定成功率,但不保证。NAT4 ↔ NAT4
双方端口完全随机变化,几乎无法预测。视频建议直接放弃直连,使用中继,或想办法改变其中一方 NAT 类型。
实际测试中,Tailscale 的 tailscale status 会显示 direct(直连)或 relay(中继)。
6. 如何改善家庭 NAT 类型
如果检测到 NAT3/4,可尝试以下手段(按推荐顺序):
- 开启路由器 Full Cone NAT(部分华硕、小米、OpenWrt 软路由支持)。
- 开启 UPnP(游戏机常用)。
- 将设备放入 DMZ(暴露主机,安全性降低,慎用)。
- 使用软路由(OpenWrt / iStoreOS) 并开启 Full Cone NAT 插件。
- 联系运营商 申请公网 IP 或修改 NAT 行为(部分运营商可改)。
- CGNAT 用户注意:你只能控制家里这一层 NAT。如果运营商是 NAT4,家里怎么改都没用。最终结果由更严格的那一层决定。
- IPv6:如果运营商提供 IPv6 且设备支持,很多情况下可绕过 NAT 限制。
对于必须 NAT4 的情况:
- 使用自建中继服务器(推荐)
- 或接受官方免费中继(延迟较高)
7. 推荐工具与实操步骤(快速上手)
- 检测 NAT:https://natchecker.com
- 注册 Tailscale 账号(建议用微软/苹果邮箱)。
- 两端安装客户端并登录同一账号 → 自动组网。
- 查看状态:
tailscale status(看是否direct)。 - 进阶:使用 EasyTier(国产,打洞能力强,支持端口预测)。
总结
- NAT1 是理想状态,打洞几乎无压力。
- NAT2/3 通过正确打洞流程大多可直连。
- NAT4 是硬骨头,优先想办法改类型,否则用中继。
- 理解“映射行为 + 过滤行为”是彻底搞懂的关键。





