最近几周一直在投诉联通的 NAT4 打洞问题和 IPv6 阻塞。客服态度很积极,派了装维,也把问题反馈上去了,但一直没进展,要么拖,要么装维不是很懂。最经典的是客服那几句话:「你这个没有公网 IP」「不是公网 IP 就不行」「IPv6 是动态的,所以不能远程连接」。我个人总结一句:联通培训的时候,数通的内容是一点都不培训是吧?只培训怎么打电话卖卡是吧?

没办法,只能继续走工信部投诉。既然明确不给公网 IP,那就退一步:要求开通 UPnP,并在 BRAS 上部署 PCP-NAT 和 NAT-PMP。这两样东西是给 CGNAT 准备的,允许用户向 CGN 申请一个明确的端口映射,并且在映射生效期间接收来自外部的连接。PCP 这个协议其实不新了,IETF 的 RFC 6887(NAT-PMP 是 RFC 6886),当初就是奔着运营商级 NAT 场景去的。我实测过:往运营商边界设备的 5351 端口发 PCP 请求,一个回音都没有;同样的请求发给自家网关,立刻就回。CGNAT 那台设备上根本没开。所以我要求运营商把端口映射打开,让 P2P 应用能正常用。
「家用宽带」的使用范围是这场争议里最要命的一条:P2P 和 IPv6 互通到底算不算家庭宽带该有的功能?我认为算。这不像运营商说的那样「没有任何场景」,恰恰相反,场景多得很。只不过国内游戏厂商和各大短视频平台的中转兜底做得太好了,P2P 打不通就直接走中转,用户根本感觉不出来。但你要是用 PS5/4 主机,或者玩《我的世界》这种依赖 P2P 联机的游戏,问题立刻就顶到脸上。更何况,工信部这些年讲网络建设,IPv6 互通和去 NAT 化一直是方向,远程办公这些场景只会更依赖 P2P。毕竟没人愿意走中转、被人挤爆吧。
运营商用的是华为的设备,这一点是明确的。探测的时候,PPPoE 协商返回了 CHAP Challenge name = "Huawei",厂商就这么露了出来。而且运营商做了双机热备,BNG 上两个 ACX 同时响应 PADI,会话可以热备切换。广东联通这边用的应该是华为 ME60 或者 NE40E 系列,华为的设备默认 NAT4,但华为明确支持 PCP,可以在 CGNAT 场景下做端口映射。如果 ME60、NE40E 或者别的设备不支持 PCP-NAT,请书面告知!
这一点不用猜,华为自己的文档写得很清楚。ME60 配置指南和NE40E 配置指南里都有一节「配置 PCP」:进 license 视图执行 active pcp vsuf slot slot-id 使能业务板的 PCP,然后在 NAT 实例下 pcp enable,再配一个 pcp server ipv4 地址,CGN 就是 PCP 服务器。文档原话是「配置 PCP 在业务实例(NAT 实例/DS-Lite 实例)下默认使能 PCP 功能」,也就是说 PCP 本来就带在设备里,不是要额外买的东西,能卡住的只有业务板的 License 和实例里那个服务器地址。连异厂家 CPE 不认 PREFER_FAILURE 这种情况,都有 pcp version1 ignore prefer-failure 兜着。英文版的功能说明在这儿:ME60 PCP Configuration、NE40E PCP Configuration。

技术角度分析
那么PCP-NAT配置需不需要运营商额外的支出呢?需要一定的支出,但是PCP-NAT直接复用原来的NAT地址池中的公网地址,不需要运营商补充珍贵的公网IP,只需要在NE设备上启用这个服务即可,除了配置成本之外不需要任何成本,而且这项功能是“全村”受益。在配置文档中,PCP服务只需要一个局域网中用于接收信令的地址, 真正用于对外通信的端口映射,其外部地址是从NAT地址池中分配的,这与你理解的UPnP场景在本质上是一样的。
PCP服务器地址:只负责“信令”的专用地址
PCP服务器地址的角色非常纯粹,它就是一个信令终点。它的唯一作用,是让CPE(如家庭网关)知道该把“请求公网映射”这条控制消息发给谁。官方文档在描述PCP连接建立时,第一步就是“CPE向CGN设备发送PCP请求”。这个请求的目的地,就是你配置的那个PCP服务器地址。因为它只处理这类控制信令,所以才必须与数据转发用的地址池严格分开,避免角色混淆。
映射后的外部地址:来自NAT地址池
当CGN设备(PCP服务器)收到请求后,它并不会使用自己的PCP服务器地址来做映射。官方文档对此有明确描述:
“Upon receipt, a CGN device selects a public IP address from the public address pool and generates a NAT entry containing the mapping…”
也就是说,CGN会从你规划好的NAT地址池里,挑选一个公网IP和端口,建立一条映射条目,然后把这个地址池中的公网IP和端口返回给CPE。因此,最终对外开放、用于接收外部数据的地址,是地址池中的地址,而非PCP服务器地址。
数据通信是如何完成的?
理解了上面的分工,数据通信的路径就很清晰了,它是一个“信令”与“数据”分离的两步过程:
- 信令通道:CPE → PCP服务器地址。这条路径只负责“申请”映射。
- 数据通道:外部网络 → NAT地址池中的公网IP:端口 → 内部设备。这条路径才是实际业务流量(如游戏、视频)的通道。
CGN设备内部维护着映射表,当外部数据包到达时,它会根据目的地址(地址池中的IP和端口)查找映射表,准确地将流量转发给对应的内部设备。所以,PCP服务器地址和映射地址不同,非但不会阻断通信,反而是实现清晰、可靠通信的必要设计。
与UPnP的对比
你的直觉很准。在这个核心机制上,PCP和UPnP是一致的:它们最终分配的外部地址都来自NAT地址池。
它们的主要区别在于信令通道:
- UPnP的信令(发现和控制消息)通常直接发往网关的内网接口地址,网关内部处理后再与NAT功能交互。
- PCP则明确要求一个独立的、专门的PCP服务器公网地址作为信令目的地址。这种设计让信令和数据的分离在运营商级(CGN)的大规模部署中更加清晰和可控,也解释了为什么需要为PCP单独规划一个地址。
华为NE设备支持全锥形NAT
是的,华为的NE设备是支持全锥型NAT,只不过默认是对称型NAT。NE40E通过两个维度的配置来定义NAT行为,将全锥型NAT理解为一种“映射模式”与“过滤模式”的组合,会更加清晰。
全锥型(Endpoint-Independent):一旦映射建立,任何外部主机都可以通过这个公网地址和端口访问内网主机,而不限制来源IP或端口。映射模式(Mapping Mode):决定了内网地址和端口如何被转换为公网地址和端口。
- 全锥型(Endpoint-Independent):无论数据包发往哪个外部目的地,同一个内网地址和端口始终被映射为同一个固定的公网地址和端口。这是全锥型NAT的基础。
- 过滤模式(Filter Mode):决定了外部主机能否主动向映射后的公网地址发起连接。
基于上述逻辑,配置全锥型NAT需要同时设置映射和过滤模式。在NE40E的系统视图下,相关命令如下:
映射模式(全锥型的基础):
nat mapping-mode endpoint-independent [ protocol-name [ dest-port port-number ] ]
该命令配置“与外部地址和端口无关”的映射方式,即完全锥型NAT的映射基础。
过滤模式(全锥型的放行规则):
nat filter-mode endpoint-independent
该命令配置“与外部地址无关”的过滤方式,允许任何外部地址访问已建立的映射。在部分配置示例中,也可以看到使用 nat filter mode full-cone 的简写形式,其效果是一致的。
如果你觉得这篇文章不错,有用的话可以点击下面的“赞赏”支持作者,你的支持是我更新的动力(饿饿吃饭)。




Comments NOTHING