网络类–NAT类型

工具教程7个月前发布 hank
590 0 0

NAT 类型概念

NAT 类型通常会被简单分成四类。前三类一般归纳为 Cone NAT,也就是圆锥型 NAT;第四类是 Symmetric NAT,也就是对称型 NAT。

常见叫法 英文名称 大致特征 边缘节点/PCDN 影响
NAT1 Full Cone NAT 接近公网裸奔,公网访问限制最少。 最友好,云主机、公网 IP、弱限制出口常见。
NAT2 Address-Restricted Cone NAT 有路由或 NAT,但限制较少,通常按对端地址限制回包。 一般可用性较好。
NAT3 Port-Restricted Cone NAT 对端地址和端口都参与限制,好出不好进。 可用性一般,P2P 连接成功率可能下降。
NAT4 Symmetric NAT 多层 NAT 或强限制 NAT 常见,不同目的地址/端口可能生成不同映射。 限制最重;没有 IPv6 时,PCDN 边缘节点收益通常很差。

说明:运维里常说的 NAT1、NAT2、NAT3、NAT4 适合快速判断节点质量。更严谨的说法应该拆成 NAT 映射行为和过滤行为,例如 Endpoint-Independent Mapping、Address-Dependent Filtering 等。

对 PCDN 的影响

PCDN、边缘节点、P2P 分发这类业务,通常不只是能访问公网就行,还要看外部节点能不能比较顺利地打进来或建立连接。NAT 越严格,连接成功率和可调度价值通常越低。

网络条件 大致判断 建议
公网 IPv4 / NAT1 最理想。 优先保留,注意安全组、防火墙和端口策略。
NAT2 / NAT3 可用,但连接质量取决于路由器、防火墙和运营商网络。 可测试实际业务收益,必要时开启 UPnP、端口映射或 DMZ。
NAT4 且无 IPv6 限制最重,打洞困难。 边缘节点价值通常较低,优先考虑公网 IP、桥接、IPv6 或更换网络。
NAT4 但有原生 IPv6 IPv4 受限,但 IPv6 可能绕开 NAT 限制。 确认业务是否支持 IPv6,并检查 IPv6 防火墙放行情况。

Linux 检测方法

注意:这是从公网地址下载二进制文件并执行。生产环境建议确认来源可信,必要时先在测试环境执行,避免盲跑未知二进制或一键脚本。

以centos 7.9为例,使用pystun,下载epel-release、python-pip;部分可能已经是python3,pystun3了,整体用法类似
探测的接口是UDP的nat类型

安装:
yum install -y epel-release
yum install -y python-pip

python -m pip install \
  -i https://pypi.tuna.tsinghua.edu.cn/simple \
  --trusted-host pypi.tuna.tsinghua.edu.cn \
  pystun

pystun使用:
pystun -i $ip(网卡IP)

示例:

[root@CentOS764 ~]# pystun -i 112.46.161.154 -H 222.222.95.40 -P 3478
NAT Type: Open Internet
External IP: 112.46.161.154
External Port: 47551

结果示例

1. Symmetric NAT:NAT4

如果检测结果为 Symmetric NAT,通常说明 NAT 限制较强。PCDN 场景里,如果没有可用 IPv6,这类节点通常价值较低。

Symmetric NAT NAT4 检测结果
Symmetric NAT,也就是常说的 NAT4。

2. Full Cone:NAT1

Full Cone NAT 限制较少,云主机一般是 NAT1 或直接公网环境,通常对边缘节点更友好。

Full Cone NAT NAT1 检测结果
Full Cone NAT,也就是常说的 NAT1。

抓包报文

抓包可以辅助确认检测过程中的请求、响应和公网映射情况。排查时可以结合源地址、目的地址、端口变化一起看。

NAT 检测抓包报文示例
抓包观察 NAT 检测过程中的报文交互。

补充说明

1. NAT 检测结果不是永久标签

STUN 类检测只能说明当前客户端、当前端口、当前 STUN 服务器、当前网络状态下观察到的 NAT 行为。路由器负载、运营商策略、出口切换、防火墙策略变化,都可能让结果发生变化。

建议:重要节点可以多测几次,换不同 STUN 服务器、不同时间段测,再结合实际 PCDN 业务收益判断。

2. 检查是否存在 CGNAT 或多层 NAT

如果路由器 WAN 口拿到的是内网地址,或者运营商侧做了 CGNAT,节点通常会更受限制。可以把本机公网出口 IP 和路由器 WAN 口 IP 做对比。

# 查看 IPv4 公网出口
curl -4 https://ifconfig.me

# 查看 IPv6 公网出口
curl -6 https://ifconfig.me

# 查看本机 IPv4 / IPv6 地址
ip -4 addr
ip -6 addr

常见私网/CGNAT 网段:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、100.64.0.0/10。如果路由器 WAN 口落在这些网段里,一般就不是直接公网 IPv4。

3. NAT4 节点重点看 IPv6

NAT4 在 IPv4 下限制较重,但如果节点有原生 IPv6,并且业务支持 IPv6,实际可用性可能明显改善。

# 查看 IPv6 地址
ip -6 addr

# 测试 IPv6 出口
curl -6 https://ifconfig.me

# 测试 IPv6 连通性
ping -6 -c 3 2400:3200::1

4. 常见优化方向

  1. 向运营商申请公网 IPv4,或者确认是否能取消 CGNAT。
  2. 光猫改桥接,由主路由拨号,减少多层 NAT。
  3. 路由器开启 UPnP、端口映射或 DMZ,但要同步检查安全风险。
  4. 确认系统防火墙、安全组、路由器防火墙没有拦业务端口。
  5. 如果有原生 IPv6,确认 IPv6 地址、默认路由、防火墙和业务监听都正常。

安全提醒:公网 IP、DMZ、端口映射会提升入站可达性,也会增加暴露面。边缘节点建议只开放业务需要的端口,并做好系统更新、弱口令检查和防火墙策略。

© 版权声明

相关文章