您的 IPv4 地址:
操作系统:
运营商:

什么是 CGNAT?共享 IP 与端口转发

运营商级 NAT(CGNAT)是在运营商网络内部进行的 IPv4 地址转换。它让多个用户共用一个公网 IPv4 地址。出站连接通常一切正常,但如果运营商没有提供相应的支持,从外部访问您家中的服务器可能就行不通了。

CGNAT 与您的家用路由器

您的家用路由器可能已经把 192.168.1.20 这样的设备地址转换成了它的外部地址。在 CGNAT 下,运营商会把这个外部地址再转换一次,变成一个共享的公网 IPv4 地址。这样一来,远程服务器和您的设备之间就有了两张转换表。您只能配置家里的那一张;在自己路由器上设置的端口转发规则,无法在运营商的设备中建立对应的规则。平时上网时,您可能察觉不到这多出来的一层,但当有人试图连接到您家中时,它就至关重要了。

如何判断是否存在 CGNAT

在路由器的状态页面上找到其外部接口的 IPv4 地址,并将其与 2IP IP 地址查询工具显示的地址进行比较。如果两者不同,而且无法用 VPN 或第二台家用路由器来解释,那么运营商侧很可能进行了地址转换。运营商常用 100.64.0.0/10,这是从 100.64.0.0 到 100.127.255.255 的共享地址空间。它由 RFC 6598 定义,与 RFC 1918 的私有地址块不同。没有出现这个地址段并不能排除 CGNAT,因为运营商也可能采用其他编址方案。

端口检测为什么可能失败

本地检查可能显示您的应用正在监听,而外部端口检测却无法连上。在 CGNAT 下,入站数据包首先到达运营商的共享地址,运营商需要有一条映射才知道该把它交给哪个用户。在把问题归咎于 CGNAT 之前,请核实实际的服务、它使用的 TCP 或 UDP 端口、家中的防火墙以及路由器规则。VPN、云代理和额外的路由器也可能造成类似的症状。端口检测只是一次观测,并不是对应用状况的完整检查。

可以与运营商商量的方案

询问运营商能否提供公网 IPv4 地址并允许入站连接,以及该地址是固定的还是动态的。如果两端都支持 IPv6,您可以通过 IPv6 发布服务,并严格限制防火墙规则。有些应用则会主动建立一条受保护的出站连接,连到中继服务器上;这会带来额外的信任和安全方面的考量。不要仅仅为了让端口检测通过,就把整台设备暴露出去。CGNAT 本身并不意味着正常上网出了问题,也不会对运营商隐藏用户的身份。