在一次跟踪路由的网络操作时发现自己路由器下一跳路由节点的IP地址比较奇怪,是100.64.0.1。好奇促使我查询了这个IP地址的归属,结果是保留地址,到这里觉得比较奇怪了,按照常理以IPv4为例保留的IP地址一般为以下几种,常用于内网通讯或者特殊用途:

地址块 起始 结束 备注
10.0.0.0/8 10.0.0.0 10.255.255.255 局域网分配
172.16.0.0/12 172.16.0.0 172.31.255.255 局域网分配
192.0.0.0/24 192.168.0.0 192.168.255.255 局域网分配
169.254.0.0/16 169.254.0.0 169.254.255.255 两台主机对等连接,当Windows获取不到IP地址的时候会自动分配此类地址
127.0.0.0/8 127.0.0.0 127.255.255.255 回环(loopback)地址,表示本机
255.255.255.255/32 255.255.255.255 255.255.255.255 广播地址

这个100.64开头的IP地址又是什么鬼?搜索维基百科的Reserved IP Address词条才发现原来教科书上介绍的只是部分保留地址,整个保留地址家族的成员还是比较多的,那么100.64打头的IP地址对应地址块为100.64.0.0/10,地址范围为100.64.0.0~100.127.255.255,共包含有4,194,304个IP地址,这个保留地址也是用于内网,但是这个内网不是一般内网而是Carrier-grade NAT,这个英文对应的翻译是“运营商级NAT”。进一步搜索得知2012年4月的 RFC 6598 (IANA-Reserved IPv4 Prefix for Shared Address Space) 将100.64.0.0/10 (Shared Address Space) 地址块,用于给运营商ISP使用:

NetRange:       100.64.0.0 - 100.127.255.255
CIDR: 100.64.0.0/10
OriginAS:
NetName: SHARED-ADDRESS-SPACE-RFCTBD-IANA-RESERVED
NetHandle: NET-100-64-0-0-1
Parent: NET-100-0-0-0-0
NetType: IANA Special Use

据此可以推断出电信的黑科技实际上是使用了一个类似路由的设备将我们的网络组织成一个局域网,再通过网址转换NAT技术来实现网络通信,可以这么理解吧,我们以前通过PPPoE拨号获取的是随机分配的公网IP地址,这个IP地址是完全可以被互联网上任何设备访问的无障碍地址,但是现在通过拨号获取的只是一个内网地址,也就是说我们自己的路由器或者电脑拨号连接到了电信运营商的“大路由器”上,再也没有公网IP地址了。

为什么电信要使用这种方式来管理用户上网?首先我们要知道IPv4地址已经告枯竭,2011年2月4日全球顶级IP地址分配机构IANA分配完了最后5个A级地址块,因此IANA宣告IPv4地址告罄。2011年4月15日,APNIC宣布其剩余的可自由分配的IPv4地址已全部分配完毕,亚太地区进入IPv4地址耗尽阶段。随后几个月,中国各大运营商从APNIC以会员资格申请到了最后的几个C,至此各运营商也陷入了IPv4地址耗尽的困境。由于IPv6技术进展缓慢,为了解决IPv4耗尽对电信企业日益增长的用户对于网络需求的影响,NAT444/NAT44的方案由此诞生。

NAT444/NAT44方案说白了就是将过去每个宽带用户独立分配公网IP的方式改为分配内网IP给每个用户,运营商再对接入的用户统一部署NAT设备,NAT的作用就是将用户网络连接发起的内网IP,以端口连接的形式翻译成公网IP,再对外网资源进行连接。这样做以后,可以实现多个用户共享一个IP地址,在技术实现原理上和我们家用的路由器一样,其中NAT444对应传统宽带用户,NAT44则对应3G或者4G移动上网终端。

这样做的好处显而易见,首先延缓了IPv4耗尽对电信业务带来的威胁并进一步为IPv6技术部署留足时间,其次是内网保护,所有接入互联网的主机都不再直接接入,而是出于电信NAT设备的保护之下,没有独立的公网IP,所有端对端的远控软件将会失效,比如以前的灰鸽子木马,由于主机丧失了公网IP,灰鸽子反弹的IP地址将是电信NAT设备所使用的公网IP,黑客无法以此定位到中了灰鸽子木马的具体主机,不过这不影响第三方端口转发的远控软件,比如TeamViewer,但是对传统远控软件杀伤力是巨大的。最后增强了隐私保护,对于远端的网站通过IP地址跟踪等形式采集用户数据,或者以后台记录IP的形式定位用户身份的行为将不再有效,因为这个IP地址可以同一时间段内被大量用户所使用,所以部分广告商可能需要修改广告跟踪代码的相关逻辑,这边顺带说一句并不意味着处于电信NAT保护的用户可以做违法的事情,比较电信公司不是傻瓜,电信级NAT设备会有日志记录系统,所以处于其下的网络设备的上网流量都是得到有效审计的。

这样做的坏处是什么呢?首先丧失了公网IP让极客们的生活失去了不少乐趣,比如原先通过花生壳动态域名解析服务可以定位到我们家的上网设备,然后可以在上面架设一些服务等,从最原始的网站服务(电信封锁了80端口)到远程私有云存储,甚至是个人VPN等等,现在都不能直接使用了,因为动态域名服务解析的IP地址是电信级NAT设备所使用的公网IP,同时也是若干电信用户所共享的IP地址,NAT并不会转发你的请求到特定的电信用户,所以这些服务都失效了,其实这对于安装远程网络监控的公司或者个人带来的麻烦最大,原来只要配置好动态域名解析就可以在任何地方使用网络进行监控查看,现在都不可以了。其次共用IP地址容易让部分网络服务提供商误杀合法用户,比如一位非法的资源滥用电信用户和你在共享同一个公网IP地址,非法的资源滥用者由于滥用某个网络服务商资源从而被加入黑名单,注意这里只有将你们所共享的公网IP地址加入了黑名单,所以导致你这个合法的用户也不能正常使用该网络服务商所提供的资源了。最后这样做的坏处还有影响到电驴等P2P软件的使用,因为处于内网下导致电驴等软件一直是LowID,影响传输速度。

如何解决此问题?要想重新获取公网IP,最后还是要联系电信运营商,不行只有进行投诉解决了。

后来发现这种现象普遍存在,甚至有电信运营商直接分配172或者10开头的内网IP地址,但这种分配方式容易与用户自己的路由器IP地址冲突,所以还是100.64开头这种好一些,毕竟新设立专用于ISP运营的保留地址,个人网络设备占用的可能性较低。

希望IPv6能够尽快全面推广开,从而解决现在尴尬的局面。

100.64.0.0/10运营商级(Carrier-grade)NAT保留IP地址的更多相关文章

  1. 运营商级NAT(Carrier-grade NAT)

    运营商级NAT(Carrier-grade NAT)   运营商级(Carrier-grade)NAT,是用于缓解是IPV4地址枯竭的一种方法,通过这种方法,原来被分配公网ip的端点.家庭网络等可以被 ...

  2. [视频解说]0基础课程-运营商-Java它J2se

    本节解说 运营商应用 Java 算被分成: 算术运算符 颂值运营商 逻辑运算符 位运算符 元运算符 这里录制了 视频解说这几大类运算符,并有练习题提供大家 面试题: 1. 最有效率的方式算出2乘以8等 ...

  3. 【Win 10 应用开发】获取本机的IP地址

    按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事. 有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条.至 ...

  4. 转:100.64. 开头IP地址问题

    100.64. 开头IP地址问题 姚洪楼 发表于 学习备忘录 分类,标签: 电信 08二月2015 0 之前调试过一个路由器在成功设置DDNS的情况下外网依旧无法访问的情况,当时没有多想什么,一直以为 ...

  5. 你的宽带ip地址被100.64了吗?

    你的宽带ip地址被100.64了吗?   最近需要用外网的时候发现,宿舍路由wan口的ip变成了100.64.X.X,本以为是一个外网的ip,可事实上并不是,并且从外网无法直接访问.   首先,我们都 ...

  6. Python查找电话号码归属地、邮编、运营商信息等

    # -*- coding: utf-8 -*- 1. 查找单个电话号码 from phone import Phone def get_phone_info(phone_num): phone_inf ...

  7. Python(phone)模块获取手机号归属地、区号、运营商等

    Python(phone)模块获取手机号归属地.区号.运营商等 一.我使用的是python3,可以自行搜索下载 二.安装phone模块, pip install phone 三.测试代码如下: fro ...

  8. BGP多线 有些BGP IP也会被极少数运营商劫持 取Ip逻辑

    小结: 1.租用的服务器只有一个IP,用户的访问路线是由路由器根据访客的实际访问速度选择最优访问路径,来选择访问的.而且不占用任何的服务器资源.服务器的上行和下行都是有路由器来选择最佳的路线,所以这样 ...

  9. Nginx的server为0.0.0.0/0.0.0.1的作用?

    看到kong默认的代理和后台server 都是0.0.0.0,代理到上游的服务器proxy_pass $upstream_scheme://kong_upstream;配置如下, upstream k ...

随机推荐

  1. 【javascript】jquery杂记

    checkbox $("#checkfirst").prop("checked") $('#chk-select-silent').is(':checked') ...

  2. 学校项目过程中知识点 Java 2015/9/15 晚

    ##命令行运行Java程序1.文件Java的源代码存放在扩展名为“.java”的文件中:Java源文件编译后,得到“.class”的文件2.方法命令行下编译java源代码的方法:javac  文件名. ...

  3. HDU3555 Bomb 数位DP第一题

    The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the ti ...

  4. BZOJ2824 AHOI2012 铁盘整理 【IDA*】

    BZOJ2824 AHOI2012 铁盘整理 Description 在训练中,一些臂力训练器材是少不了的,小龙在练习的时候发现举重器械上的铁盘放置的非常混乱,并没有按照从轻到重的顺序摆放,这样非常不 ...

  5. pat甲级 1154 Vertex Coloring (25 分)

    A proper vertex coloring is a labeling of the graph's vertices with colors such that no two vertices ...

  6. 【java基础】java中Object对象中的Hashcode方法的作用

    以下是关于HashCode的官方文档定义: hashcode方法返回该对象的哈希码值.支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表. hashCode  ...

  7. test20181029 思考熊的马拉松

    题意 思考熊的马拉松 问题描述 今年,n只思考熊参加了校园马拉松比赛.马拉松的赛道是环形的,每圈的长度是A,完成比赛需要跑L圈. 比赛中,甲领先乙很长距离,绕过一圈或多圈后从后面追上了乙的现象叫做&q ...

  8. c++ 中 毫秒级时间获取

    #include <time.h> clock_t start,ends; start=clock(); Sleep(); ends=clock(); cout<<ends-s ...

  9. 看了redis想一下

    redis总结 要想在python中使用redis,要先在本地安装redis,并开启redis-server,然后再导入python的redis包,pip install redis 怎么在Linux ...

  10. 什么是spark(一) 分区以及和MR的区别

    什么是spark,是一个分布式计算平台,或者说是分布式计算引擎,他的职责就是将指定的数据读入到各个node的内存中,然后计算.所以spark是具有泛化性质的,只要数据源是可读入的,读到内存里面之后,处 ...