原理讲解2026年9月29日阅读约 7 分钟

什么是CGNAT?运营商级NAT对代理意味着什么

什么是CGNAT?运营商级NAT如何让许多用户共用一个公网 IP,100.64.0.0/10 是什么地址段,以及怎么判断你自己的网络是否在 CGNAT 后面。

CGNAT(运营商级 NAT,Carrier-Grade NAT)是互联网服务商让许多用户共用一个公网 IPv4 地址的做法。你的路由器拿到的是一个共享内部地址段里的地址,通常在 100.64.0.0/10 内,运营商的设备再把它转换成一个公网地址,而这个公网地址同时也有很多别的用户在用。网站看到的,就是这个共用的地址。

如果你在用代理,这会带来几个值得了解的后果:出口 IP 的信誉,网站为什么不太愿意封某些地址,以及你能不能放心地把自己的 IP 加进白名单。本文讲 CGNAT 怎么工作、谁在用、它改变了什么,最后给出一个两分钟就能做完的自测。

什么是CGNAT,为什么会有它?

IPv4 总共只有约 43 亿个地址,各地区的互联网注册管理机构在 2010 年代陆续发完了新的地址段。用户还在增加的运营商,没办法再给每个用户一个公网 IPv4 地址,只能共用。

长远的办法是 IPv6,地址多到每台设备都分得到。现在很多网络两者并行:支持 IPv6 的网站走原生 IPv6,其余仍需 IPv4 的流量走 CGNAT。

运营商级NAT是怎么工作的?

你家里其实已经在用 NAT 了。手机和电脑拿到的是 192.168.1.20 这样的私有地址,路由器在出口处把它们转换成自己的 WAN 地址。

CGNAT 在运营商那一侧又加了一层转换:

  1. 你的设备从私有地址发出请求。
  2. 路由器把它转换成自己的 WAN 地址。在 CGNAT 下,这个 WAN 地址不是公网地址,而是来自共享地址段。
  3. 运营商的 CGNAT 设备再转换一次,换成一个公网地址,外加一个端口号,端口来自分给你的那一段端口。
  4. 网站看到的是这个公网地址和这个端口。

流量先后经过三个地址空间(你的家庭网络、运营商的共享地址段、公网),所以工程师有时把它叫作 NAT444。一个公网地址同时被许多用户共用,靠端口区分各自的连接。一个地址由多少用户共用,取决于运营商,而运营商很少公开这个数字。

由此带来一个实际结果:要把某个行为追溯到具体用户,运营商需要公网地址、源端口和精确的时间。这也是 RFC 6302 建议网站运营方在记录地址的同时记录源端口的原因。

100.64.0.0/10 是什么地址段?

100.64.0.0/10 是 RFC 6598 在 2012 年 4 月划出的共享地址空间。它从 100.64.0.0 到 100.127.255.255,四百多万个地址,只用于一件事:运营商的 CGNAT 设备和用户路由器之间的那一段链路。

之所以单独划一段,是因为常见的私有地址段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)已经被用在千家万户的内网里。如果运营商在自己那一侧也用 192.168.1.0/24,就会和用户自家的网络冲突。单独的地址段避开了这个问题。

这段地址永远不会在公网上路由。查一下 ASN 就能看到:Team Cymru 的 whois 对 100.64.0.1 返回 NA,RIPEstat 把这段标为“Shared Address Space”。也有运营商用 10.0.0.0/8 这样的私有地址段做同样的事,所以 WAN 地址不在 100.64.0.0/10 里,并不能排除 CGNAT。

谁在用CGNAT?

  • 蜂窝网络运营商。 手机用蜂窝数据上网时,几乎都是这样共用公网 IPv4 地址的。
  • 很多宽带运营商。 在新建的光纤网络、固定无线、卫星网络上很常见,在 IPv4 地址分得少的地区也很常见。有的运营商把所有用户都放在 CGNAT 后面,有的只对新用户这样做;有的可以按需提供公网 IPv4 地址,或者收费提供。
  • 任何缺地址的运营商。 不管是什么网络,技术都一样。

CGNAT对代理意味着什么

一个地址,许多人,同一份信誉

网站和 IP 数据库按地址记录信誉。在 CGNAT 后面,一个地址承载着许多互不相干的人的流量,所以它的记录是大家共有的。你碰到的验证码,可能是同一地址后面的别人昨天招来的。反过来也一样:这个地址可能有很长一段正常浏览的历史,让它看起来很可信。

如果你按怎么自己检查代理 IP 质量里的步骤查出口的信誉,要记住这一点。一个记录有些斑驳的共享地址,和一个脏的代理 IP 是两回事。

网站为什么不太愿意封CGNAT地址

封掉一个 CGNAT 地址,等于封掉它后面的所有用户,而其中大多数是普通顾客。能认出共享地址的网站,往往改用别的手段:限速、Cookie、浏览器检测和验证码,封也多是短时间的。有些信誉数据库会标出它们认为是共享的、或属于蜂窝网络的地址。各个网站做法不同,也都不公开规则,所以这只能算一种倾向。

同样的道理也解释了一个你可能见过的现象:你明明没发几个请求,网站却回你 429 Too Many Requests。网站按地址计数时,算的是这个地址后面所有人的请求。怎么解决 429 Too Many Requests讲了应对办法。

住宅出口可能就在CGNAT后面

住宅代理通过某户家庭的网络连接把你的请求发出去。如果这户家庭的运营商用了 CGNAT,网站看到的就是运营商的共享地址。对你来说,这可能意味着:

  • 不是你挣来的信誉,好的坏的都有,如上所述。
  • 位置比较粗。 国家通常是对的。城市则可能指向运营商 CGNAT 设备所在的地方,那可能是离得有点远的区域中心。
  • 粘性会话中途换地址。 CGNAT 设备通常会让同一个用户在一段时间内保持同一个公网地址,但也可能重新分配。登录步骤要写成可以重跑的。轮换代理和粘性代理对会话讲得更细。

从外面通常没法确定一个出口是不是在 CGNAT 后面。有些 IP 数据库会猜,准确度参差不齐。某个出口表现异常时,先多取几个样本比较,再下结论。

顺带说明:ProxyPanda 卖的是住宅、ISP 和数据中心代理,不卖蜂窝网络代理。如果你需要一个几周都不变的地址,静态 ISP 和数据中心 IP 按租期出租,下单时就能选国家、地区和城市。

我自己的网络在CGNAT后面吗?

有三个理由值得弄清楚:

  • IP 白名单。 控制台可以把你连接时用的 IP 加进某个服务的白名单,之后只用 HOST 和 PORT 就能连上。在 CGNAT 后面,你的公网地址是共用的,而且会变。把它加进白名单,同一地址后面的其他人不用密码也能用你的服务;地址一变,你自己反而用不了。这种情况请用用户名和密码。
  • 入站连接。 给游戏服务器或家里摄像头做端口转发行不通,因为公网地址不归你。
  • 在家老碰到验证码。 网站老让你证明自己是人,共享地址是可能的原因之一。

自测方法

  1. 查路由器的 WAN 地址。 登录路由器管理页面,在状态页里找“WAN IP”“Internet IP”或“外网 IP”。要看路由器,不要看电脑:有些 VPN 和组网工具会自己给电脑分一个 100.64.0.0/10 里的地址。
  2. 查网站看到的地址。 在同一个网络里运行:
curl -s https://api.ipify.org; echo
  1. 比较两者。 下面这个脚本帮你比较,并给出最可能的情况。只用 Python 标准库:
import ipaddress
import urllib.request

SHARED = ipaddress.ip_network("100.64.0.0/10")

wan = ipaddress.ip_address(input("WAN IP from your router's status page: ").strip())
with urllib.request.urlopen("https://api.ipify.org", timeout=30) as reply:
    public = ipaddress.ip_address(reply.read().decode().strip())

print(f"router WAN: {wan}    seen by websites: {public}")
if wan == public:
    print("Same address: no carrier-grade NAT on your IPv4 connection.")
elif wan in SHARED:
    print("WAN address is in 100.64.0.0/10: you are behind CGNAT.")
elif wan.is_private:
    print("WAN address is private: CGNAT, or another router in front of yours.")
else:
    print("Two different public addresses: something upstream translates your traffic.")

如果 WAN 地址是私有地址,先看看你的路由器是不是接在另一台路由器后面(比如运营商给的光猫兼路由器),再去怪运营商。两台路由器串联也会得到同样的结果。

进不了路由器?试试路由跟踪

traceroute -n 1.1.1.1

Windows 上改用 tracert -d 1.1.1.1。如果紧跟在你自己路由器后面的那一跳在 100.64.0.0/10 里,基本可以判断是 CGNAT。但这只是迹象,因为有些运营商在内部网络里也用这段地址,却不做任何转换。上面比较 WAN 地址的方法更可靠。

api.ipify.org 报告的是你的 IPv4 地址。CGNAT 是 IPv4 的事:在 IPv6 下,一户家庭通常能分到自己的一段地址。

常见问题

CGNAT 不好吗? 日常上网基本感觉不到。代价是信誉共享、不能接受入站连接,以及地址没法放心地加进白名单。

100.64.0.0/10 算私有地址吗? 不算 RFC 1918 意义上的私有地址。它是留给运营商的共享地址空间,永远不会在公网上路由。Python 的 ipaddress 模块判断它既不是私有地址、也不是公网地址,正好对得上。

能摆脱 CGNAT 吗? 问你的运营商。有的可以按需提供公网 IPv4 地址,有时收费,有的完全不提供。

用代理或 VPN 能绕过 CGNAT 吗? 它们改变的是网站看到的地址。你自己的连接要到达代理或 VPN 服务器,仍然要经过 CGNAT。代理和 VPN 的区别对两者做了比较。

下一步

如果你正要配置一个新的代理服务,先做一下上面的自测,再根据结果选择用户名密码还是白名单。各条线路的价格见价格页,小额充值就够试一条。碰到看不懂的结果,到 Discord 来问。

还有后续问题?

去 Discord 问。答案还能帮到下一个读到这个帖子的人。

加入 Discorddiscord.gg/proxypanda
$5 起步去 Discord 问