我国运营商目前主流的分配IP方式
现在一般都是分配私有IP给普通用户。可以看看自己的路由器WAN口是不是属于10.0.0.0/8,172.16.0.0/12、192.168.0.0/16或100.64.0.0/10。如果是,那运营商分配给你的就是私有地址。
CGN技术
什么是CGN?
Carrier-grade NAT(CGN),翻译为运营商级地址转换(运营商级NAT),又称作LSN(Large-scale NAT,大规模网络地址转换),是一种基于NAT的更高级应用技术。
CGN在用户私网和公网之间再插入一种运营商级NAT设备,并让多个终端共享一组RFC 6598保留地址。
CGN的主要目的就是提高IPV4的利用率,进而减少IPV4的浪费。
100.64.0.0/10
这个100.64开头的IP地址又是什么鬼?搜索维基百科的Reserved IP Address词条才发现原来教科书上介绍的只是部分保留地址,整个保留地址家族的成员还是比较多的。
互联网工程任务小组(Internet Engineering Task Force,简称为IETF)IETF还于2012年4月发布了 RFC 6598 ,专门为CGN预留了一个 “共享地址空间”(IANA-Reserved IPv4 Prefix for Shared Address Space) ,即100.64.0.0/10,专门用于CGN使用,以防止在第一次转换时用户的私网IP与运营商分配的私网IP产生冲突。
我国部分运营商会不遵守CGN的规定,给用户分配 RFC 1918 规定的私有地址
也就是在第一次NAT转换时,将私网IP转换成 RFC 1918 中规定的三个私网IP块:10.0.0.0/8,172.16.0.0/12和192.168.0.0/16。这会使得用户存在因私有地址冲突而导致的路由器和NAT设备停止工作的风险。
应用场景
CGN 有很多应用场景,比如 NAT444,还有 NAT64、DS-Lite 等。
缺点
- 损害了端到端原则
与传统的NAT一样,CGN损害了端到端原则( the end to end principle)。出现CGN之后,端口映射必须要同时由用户路由器与电信路由器同时支持才有可能,这个阶段就导致了所有依赖于公网IP的服务完全失效。使用CGN后,局域网外部的主机无法知道局域网内部主机的本地/私有IP地址。
因为DDNS的IP地址是电信级NAT设备所使用的公网IP,同时也是使用CGN后某些电信用户所共享的IP地址,NAT并不会转发你的请求到特定的电信用户只会转发到电信级NAT设备,所以这些服务都失效了。其实这对于安装远程网络监控的公司或者个人带来的麻烦最大,原来只要配置好DDNS就可以在任何地方使用网络进行监控查看,现在都不可以了。
为了解决这个缺点,IFTF在 RFC 6887 中定义了 端口控制协议(PCP) 。
- 多用户共享IP地址容易导致误封合法用户
共用IP地址容易让部分网络服务提供商误杀合法用户,比如一位非法的资源滥用电信用户和你在共享同一个公网IP地址,非法的资源滥用者由于滥用某个网络服务商资源从而被加入黑名单,注意这里只有将你们所共享的公网IP地址加入了黑名单,所以导致你这个合法的用户也不能正常使用该网络服务商所提供的资源了。
最后这样做的坏处还有影响到电驴等 P2P 软件的使用,因为处于内网下导致电驴等软件一直是 LowID,影响传输速度。
NAT444
定义
简单来说就是执行两次 NAT44(也就是传统意义上的NAT),NAT44 是指将一个 IPV4 地址通过 NAT 转换成另一个 IPV4 地址。
CGN的应用场景——NAT444
运营商通过 CGN 使得用户主机的私网 IP 转换了两次,第一次被转换成运营商分配的私网IP ,第二次在运营商 NAT 设备处转换成公网 IP。
关于NAT444和CGN的关系
看过很多博客和解答,大致分为两种。一种认为NAT444是CGN的别称,另一种是认为NAT444是CGN的一种应用场景。
我个人更偏向后者,因为现实中CGN并不只有NAT444,还存在NAT64、DS-Lite等,只是我们绝大多数人接触到的更多是NAT444。
参考
[1]NAT444技术简介
[2]100.64.0.0/10运营商级(Carrier-grade)NAT保留IP地址
[3]CGN技术推进移动互联网络向IPv6演进
[4]NAT444 (CGN/LSN) and What it Breaks