2026-11-02·by Sijie Wang#fundamentals#networking#nat

how-nat-works

NAT 怎么工作:网关上的一本改写账

NAT 的存在是因为 IPv4 地址不够用:一整户、一整间办公室的内网地址(192.168.x.x)要共用一个公网地址。机制是网关保管的一本动态改写账。内网设备往外发包——比如 192.168.0.21 的 51234 端口发往某台服务器——网关把源头改写成自己的公网地址加一个自选端口(99.236.1.10:62001),同时在账上记一行:公网 62001 ↔ 192.168.0.21:51234,对应这个目的地。回包到达 62001 时,查账、改写回去、送进内网。跟收发室加分机号一模一样:外人只看见一个街道地址,收发室知道每件包裹归哪个分机。

一个副作用白送:从外面来的包,账上没有对应行就直接丢掉。没人邀请过的入站流量无处可去——NAT 网关是意外当上的防火墙。

端口是池化资源。 网关按公网 IP、按协议,像从连接池里取连接一样分配和回收端口。分配策略有讲究:顺序分配可猜,所以 prefer 随机;端口保持(内网端口空闲时就沿用)对某些协议友好。运营商级 NAT(CGNAT)下一个公网地址被许多用户共用,端口按每用户一整块发。账行闲置会过期,所以长命的 UDP 流要发保活(WireGuard 的是 25 秒)——发的不是问候,是给自己那行账续命。

四种类型是两个互相独立的行为。 映射行为:同一个内网套接字换个目的地说话,公网端口复用(与端点无关——最友好的情形,旧称全锥),还是按目的地地址换新、按地址+端口换新?过滤行为:账行建好之后,谁能顺着它回来——任何人、只有内网主动联系过的地址、还是只有精确的地址+端口?最 hostile 的角落是对称型 NAT:每个目的地一个新端口,外加最严过滤。

为什么对称型打穿不了洞。 点对点穿透(STUN)的玩法是:各自先探明自己的公网地址+端口,再告诉对方往哪儿发。但对称型下,经 STUN 探到的端口是为 STUN 服务器分配的——真正发给对端时分配的是另一个端口。你广告出去的地址不是能用的地址,直连必然失败,流量只能退到中继。组网 VPN 都要自带中继就是这个原因(Tailscale 的 DERP 是一个例子):中继不是设计本意,是给这种打不穿的 NAT 留的后路。

端口转发是人工的例外:一条手写的永久账行——公网 X 端口永远映射到这台内网设备——用于内网服务没先开口也要能被外面够到的场合。

about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →