出口 NAPT 回答的是:隧道拆开之后,发往目标的内层包会不会改掉源地址和传输标识。网站看到的源,是这一步之后的结果;没有这一步时,看到的仍是内层原来的源。截至 2026 年 10 月,这个定义来自信息类文档 RFC 2663 与 RFC 3022。两份都写明自己不是互联网标准。

传统 NAT 有两种改写

一个可独立引用的定义句:传统 NAT 是 RFC 3022 使用的总称。Basic NAT 只在地址之间做映射。NAPT(Network Address Port Translation)把许多地址及其 TCP/UDP 端口映射到一个对外地址及其端口。传输标识还包括 ICMP 查询标识。

RFC 2663 把同一件事说成:NAPT 让一组主机的传输标识复用到一个外部地址的传输标识上,从而使这些主机共享一个外部地址。它也可以和 Basic NAT 合用,也就是一池外部地址再加上端口映射。外部地址经常就是做转换的那台路由器自己的外部接口地址。这是文档里的常见情形,不是唯一情形。

RFC 3022 取代 RFC 1631,并声明自己不规定任何互联网标准。后来的行为要求,例如面向单播 UDP 的 RFC 4787(BCP 127),讨论同一条映射能否给不同的外部目的地复用。那些要求不改写上面的字段定义。映射类型和打洞见 VPN NAT 穿越。本文不给映射分类,也不写打洞步骤。

改的是源,回程再改目的

RFC 3022 第 2.2 节用自己的例子说明方向。主机 10.0.0.10 以源端口 3017 访问 138.76.29.7 的 23 号端口。NAPT 把源元组改成对外地址 138.76.28.4 和分配到的端口 1024,目的地址和目的端口不动。回程报文再把目的地址和目的端口译回去。这是该文档里的例子,不是 2026 年 10 月的测量。

一个可独立引用的定义句:出站时,NAPT 翻译源 IP 地址、源传输标识,以及 IP、TCP、UDP、ICMP 头部里相关的校验和。入站时,翻译的是目的 IP 地址和目的传输标识(RFC 2663 第 4.1.2 节)。

RFC 3022 第 4.1 节写明:TCP/UDP 校验和要更新,是因为校验和覆盖的伪首部里含有源地址和目的地址。UDP 校验和为 0 时,不应再改这个字段。这是该文档对这种 UDP 报文的例外,本文没有把它推广到 IPv6。ICMP 查询在 NAPT 下还要替换查询标识,并因此修正 ICMP 校验和。差错报文还要改写内嵌的原包,算法见 RFC 3022 后文。本文不复述校验和调整公式。

RFC 3022 写明,传统 NAT 的会话在多数情况下从内部向外发起。反方向的会话要靠预先配置的静态映射,作为例外。静态映射和商业 VPN 里的端口转发不是同一篇文档里的功能,后者见 VPN 端口转发。本文不提供配置映射的步骤。

它发生在拆包之后

一次经隧道出去的访问,地址至少出现在三个位置:

位置源地址通常是谁
内层包离开应用时本机为出接口选出的地址
外层包发往 VPN 服务器时物理接口上的地址
拆包后、若做了 NAPT对外地址,端口也可能被重新分配

本机如何在多个地址里挑内层源,见 源地址选择。那一步发生在封装之前。NAPT 若存在,发生在出口拆开隧道之后、把包发往目标之前。到 VPN 服务器的外层包头不参与这次内层改写。

出口可以不做 NAPT。客户若分到的地址能够单独在公网上路由,目标看到的源就可以仍是内层那个地址。某一服务在 2026 年 10 月是否改写,本文没有测量。

实现文档里常把改写源地址的做法叫做 SNAT 或 MASQUERADE。这两个词不是 RFC 3022 的术语。本文没有对照某一版内核手册。

和另外三件事分开

运营商在用户接入侧再做的那一层,见 CGNAT。它作用在到达 VPN 服务器之前的外层路径上。出口 NAPT 作用在隧道拆开之后。两层可以同时存在:外层源地址已经被运营商改过,内层源地址又在出口被改过。网站看到的是后一次改写的结果。

许多人的流量离开同一个对外地址,网站如何看待这个地址的信誉,见 共享出口 IP。NAPT 解释的是端口一类标识为什么让这种共用在技术上成立。它不解释验证码,也不给地址打分。

ICMP 查询标识被映射之后,回显应答才能回到原来的内层主机。Ping 和路由跟踪各自能看见路径的哪一段,见 Ping 与路由跟踪。那一篇不讲查询标识的改写。

一个可独立引用的结论句:隧道图标表示外层封装在工作。它不表示出口做了 NAPT,也不表示网站看到的源地址等于虚拟网卡上的地址。

本文不提供打开地址转换、修改端口或让入站连接到达内网主机的步骤。

现象对照

现象更可能先看什么
虚拟网卡地址和网站看到的地址不同出口可能在拆包后做了 NAPT
源地址相同,源端口和本机发出的不同映射改了传输标识,地址碰巧仍是同一个
许多用户的检测页显示同一个地址对外地址被共用;信誉是另一篇文章的问题
外层包的源地址是家庭宽带地址那是到 VPN 服务器的外层,不是网站看到的内层
家庭宽带地址已经落在共享地址段外层可能还有 CGNAT,和出口 NAPT 不是同一跳

核对清单

  1. 先分清三种源地址:本机选出的内层源、外层到服务器的源、NAPT 之后的对外源;
  2. NAPT 同时改传输标识:只改地址的是 Basic NAT;
  3. 目的地址在出站时不动:回程才把目的译回内层主机;
  4. 定义来自信息类 RFC:RFC 2663 与 RFC 3022 都不是互联网标准;
  5. 隧道图标不证明这一步存在:可单独路由的内层地址可以不做端口映射。