家庭路由器、运营商级 NAT(CGNAT)会改写你的源地址与端口,使「外网主动连进来」变难。VPN 文档里的「NAT 穿越」「UDP 打洞」「中继」要回答的是:**在地址被改写之后,会话如何仍然建立或保持,以及失败时系统会不会改走另一条路径。**2026 年常见误判,是把打洞当成「加速开关」,或把 Keepalive 保活 与完整的 NAT 穿越流程当成同一个按钮。
NAT 到底改了什么
一个可独立引用的定义句:NAT(Network Address Translation)在边界设备上改写数据包的地址与端口,使内网多台设备共享有限的公网地址,同时默认阻挡未经映射的入站连接。
| 现象 | 对会话的影响 |
|---|---|
| 出站连接 | 通常先由内网发起,NAT 创建临时映射,回程可回来 |
| 纯入站连接 | 若无端口映射/UPnP/静态规则,外网很难直接打到内网主机 |
| 映射超时 | 空闲过久,中间设备回收映射,表现为「假连接」或突然不通 |
| CGNAT | 运营商侧再套一层,家用路由器「公网 IP」可能仍非真正独占公网 |
这与 VPN 是什么 中的模型一致:加密隧道是逻辑通道;中间 NAT 仍按自己的映射表决定哪些回程包能进门。
客户端 VPN 与「打洞」:先分清拓扑
多数面向个人的客户端 VPN 是 你主动连出到远端节点:出站握手本身就会在 NAT 上留下映射,数据平面随后走这条已建立的会话。此时「能不能上网」更常取决于握手、路由、DNS 与 Kill Switch,而不是经典意义上的入站打洞。
打洞与显式 NAT 穿越更常出现在:
- 点对点或 mesh VPN(两端都在 NAT 后,要直连);
- 需要从外网主动访问家里 NAS/实验室的场景;
- 部分自建方案里「尽量直连、失败再中继」的控制面。
| 拓扑 | 典型问题 | NAT 穿越的角色 |
|---|---|---|
| 客户端 → 云节点 | 出站可达性、空闲映射 | 保活刷新映射为主 |
| NAT 后 ↔ NAT 后 | 双方都无稳定入站 | 打洞或中继 |
| 站点到站点 | 固定网络互通 | 常靠固定映射/专线/集中网关 |
打洞、STUN 类发现与中继(概念层)
概念上,一次「尽量直连」的流程常被拆成:
- 发现:借助 STUN 类服务或协调服务器,获知自己在公网侧被看到的地址/端口候选;
- 交换:经已通的信令通道,把候选地址告诉对端;
- 打洞:双方几乎同时向对方候选地址发包,试图在两侧 NAT 上留下允许回程的映射;
- 降级:直连失败则改走 TURN 类中继或厂商中继节点。
| 手段 | 在解决什么 | 常见代价 |
|---|---|---|
| 出站映射 + 保活 | 维持已有会话的回程路径 | 耗电与信令,见保活文 |
| UDP 打洞 | 尝试 NAT 后直连 | 受 NAT 行为影响,成功率不保证 |
| 中继 | 保证连通 | 多一跳延迟与中继容量 |
| 手工端口映射 / UPnP | 固定入站入口 | 暴露面与路由器配置风险需自担 |
「打洞」不是魔法:对称型 NAT、运营商防火墙、或只允许与先前出站五元组严格匹配的回程规则,都可能让直连失败。据各客户端与自建文档,失败时的预期行为应是降级中继或明确报错,而不是静默假连接。
测试环境写法示例:2026 年 9 月,同一套点对点或 mesh 客户端,分别在「双端家庭宽带」「一端蜂窝 CGNAT」下记录是否直连成功、是否回落中继,以及直连与中继的 RTT 差。写明日期与接入类型;无法确认 NAT 类型时写「据本次实测」,不要断言具体运营商设备型号。
和 Keepalive、UDP、延迟怎么一起看
| 主题 | 主要问题 | 与 NAT 穿越的关系 |
|---|---|---|
| Keepalive | 空闲后映射是否被回收 | 保活是维持映射的常用手段 |
| TCP vs UDP | 外层怎么送到节点 | 打洞文献多讨论 UDP;TCP 行为不同 |
| 延迟与抖动 | 路径质量 | 中继降级常表现为 RTT 上升 |
| Kill Switch | 断线窗口谁可出站 | 与打洞成败无直接等价 |
读选项页时:若文案是「Persistent keepalive / 心跳」,优先按保活理解;若文案是「NAT traversal / Hole punching / Relay」,再按穿越与降级路径理解。把二者拧成同一个「网络优化」滑条,排障时容易改错旋钮。
常见误解
误解 1:开了 NAT 穿越就一定点对点直连。
穿越包含发现、尝试与降级;最终可能是中继。以实际路径与延迟为准。
误解 2:家庭路由器显示公网 IP 就等于没有 NAT 问题。
仍可能有防火墙、UPnP 关闭、或上游 CGNAT;入站与打洞要单独验证。
误解 3:NAT 穿越能替代加密或无日志。
它解决的是连通性与路径形态,不提供机密性承诺,也不回答运营方是否存日志。
误解 4:客户端 VPN 连不上都是 NAT 没打洞。
先区分:是到节点的出站握手失败,还是点对点直连失败。前者更常查端口、协议、DNS 与本地防火墙。
建议怎么纳入核对清单
把 NAT 相关现象写成可复查笔记,而不是形容词:
- 拓扑:你用的是「连出到节点」还是「两端 NAT 后直连/组网」;
- 行为:空闲后是否假连接(保活)、直连失败是否自动中继(穿越降级);
- 证据:日期、接入类型(家庭 / 酒店 / 蜂窝)、直连与中继的 RTT 对照。
涉及端口映射与家庭入站暴露面时,只做一般性风险提示:扩大入站可达会改变攻击面,需结合你自己的设备与用途评估;本文不提供规避执法或突破访问控制的操作指导。连通性旋钮与隐私、合规是不同层问题,分开验证更接近可复查的基线。