«

»

Sep 27 2017

从北京联通开始大规模部署不正规的运营商级NAT,谈互联网和运营商

半夜还在上网,突然就断网了,登上路由器发现不能拨号,才想起白天上网时还收到收到了中国联通北京分公司的网页通知,没错就是那种强行插入到HTTP页面内部的网页弹框。因为这种弹窗太普遍所以也没截图。通知内容是网络将于凌晨1点钟进行升级,反正这种升级既说不上平常,也说不上特殊,毕竟有时候是提速,有时候是扩容,有时候是监控,有时候是测试,反正做什么又没义务通知用户。虽然宽带通线路还能用,但是反正晚上也没什么要紧事,干脆睡觉。

结果第二天起来,路由器拨号获得的IP已经变成 10.0.0.0/8 私有IP地址了。

从北京联通开始大规模部署不正规的运营商级NAT,谈互联网和运营商

不再分配公网IP

运营商不再给用户公网地址这事已经很普遍了,很多地区的一级运营商和几乎所有二级运营商都不分配给家庭宽带公网IP。一些地区,比如北京这种老旧陈腐的地方,政策执行比较慢,部分地区的家庭用户还一直有公网IP使用。

能从网上上查到,北京也已经有很多地区的一级运营商用户不再能获得公网IP了。按照一般理论来讲,没有公网IP,最多也只会影响到一些使用监控摄像头或者私人服务器的情况。虽说联通有明文禁止家庭用户建站并且封堵了80、443等常用端口,但对于监控摄像头和私人文件存储并不属于建站,而且还可以使用高位端口,私人使用并不属于禁止范围。不过二级运营商还是会禁用TCP监听的,基于TCP协议的直连还是无法正常使用,不过2013年的政策,估计现在也变了吧。

这次“网络升级”对外口径也不统一。很多使用监控摄像头的用户在被“强制内网”后,向10010进行了投诉,结果不到一会重启个路由,公网地址回来了。联通客服解释参差不齐,有说是上边政策(也就是不解释),有说是为了防止私人建站,也有说工信部在整顿不备案经营网站的行为,还好目前了解的暂没发现胡说八道的。毕竟仍然合情合理,而且现在家用宽带合同上并没注明会分配真实IP,以前的公网IP算是赠品而已,现在不赠了。

snap2031

snap2033

反正联通官方又没发过正式通知:

snap2019

至于打个电话就能要回公网IP,这不就是猫捉老鼠的游戏了么,运营商既然没保证过用户有公网IP,那就是他想给就给他不想给就可以不给。个人用户还想继续使用监控摄像头和私人存储,另寻出路才靠谱。

所以对于运营商不再分配公网IP,我是觉得这是迟早的事情。

不正规的运营商级NAT

问题是北京联通分配给家庭宽带的IP既不是公网IP地址,也不是电信级NAT该使用的运营商NAT地址。

snap2035

讲到这里,我觉得有必要先讲一下相关的技术。

电信级NAT

介绍

电信级NAT,或称之为 运营商级NAT (Carrier-grade NAT,缩写 CGN),也称 大规模NAT (large-scale NAT,缩写 LSN )是一种为IPv4网络端点(尤其是住宅网络)设计的方法,通过嵌入在网络运营商网络中的中间盒网络地址转换设备,将已配置的专用网络地址翻译到公网IPv4地址,允许许多终端站点共享一个小型公共地址池。这将NAT功能及配置从客户端驻地转移到互联网服务提供商网络。
电信级NAT已被提议作为一种IPv4位址枯竭的缓解方法。

相关资料:https://zh.wikipedia.org/wiki/%E7%94%B5%E4%BF%A1%E7%BA%A7NAT

(下文将以上定义简写为 电信级NAT 或 CGN)

CGN的一种使用场景可以描述为 NAT444 ,因为一些客户与公共服务器的连接将通过三个不同的IPv4寻址域:客户自己的私有网络,运营商的私有网络,以及公共互联网。

说得简单点,国际电信组织分配给运营商一个真实公网IP给地方运营商,地方运营商搞个NAT给家庭用户,家庭用户接了个路由器再用手机和电脑上网。

再通俗点,联通搞了台路由器把整个镇都搞成内网,你又搞了台无线路由,再用手机上网。

  • 原来:IPv4(你的电脑和手机) – NAT(你家路由器) – IPv4(运营商卖给你的网络服务+公网IP)
  • 现在:IPv4(你的电脑和手机) – NAT(你家路由器) – IPv4(运营商卖给你的网络服务) – NAT(运营商设备) – IPv4(公网)

优点

电信级NAT是一种缓解IPv4位址枯竭的有效办法。一个公网IP拥有65535个端口,每个端口都可以监听或发起连接,这个资源总和是非常巨大的,然而一般家庭用户完全使用不了如此巨大的资源。电信级NAT变将这些资源重新整合分配(具体比例不详),对于一般家庭用户,理论上没有什么大问题。

缺点

端到端原则与端口映射

然而与任何形式的NAT一样,电信级NAT损害端到端原则。原本情况下家庭用户如果使用监控摄像头或者私人存储,会使用端口映射或DMZ来解决这个问题。而出现电信级NAT之后,端口映射必须要同时由用户路由器与电信路由器同时支持才有可能,这个阶段就导致了所有依赖于公网IP的服务完全失效。监控摄像头,私人存储,甚至是想建立个Minecraft我的世界服务器与朋友一起游戏,都不可能了。

这个缺点是国际共识,所以在 RFC 6887 中定义了端口控制协议(PCP)以解决这个问题,但对于做事都不标准并且还极力封堵用户端口的大陆运营商,就不要抱有任何幻想了。

基于IP的认证方式与多出口问题

很多高安全级别网站,比如网银,以及很多国外很多重视安全问题的网站,都会基于用户的IP做认证。因为HTTP(S)协议是无状态的,HTTP长连接一般又很短很不稳定无法作为可靠认证机制,所以会使用用户IP作为认证方式之一,如果用户上网时无法固定出口的公网IP,那么很可能无法使用这些服务。

招商银行客户端基于IP的安全策略
snap2036

二级运营商对网银账户的支持就非常的差,前几年我自己用的是歌华宽带,完全无法使用招行网银,只能到公司进行大额转账,非常的不方便。

目前看来联通尚无此问题。在使用CGN之前,联通的IP看似非常紧张。我的路由释放了一个公网IP后,不到几秒钟就会重新上线。但是CGN上线之后,我的公网IP与内网IP可以保证固定对应的关系,看来不会出现像二级运营商那样网络出口不稳定的问题,招行网银等一系列对IP有强制要求的应用均工作正常。而且联通由于公网IP非常充足,目前仍能保持公网IP与内网IP一对一关系,所以百度仍然可以做到使用IP定位真实地址

(不然在国内使用个国内银行网银还要开个国内VPN实在太荒谬了,尤其是国内VPN现在非常的稀缺,最多只能找到海外回国看视频用的VPN)

不正规的联通

前面说了一些CGN在技术和具体实现上的问题,这个章节要讲的就是,这次北京联通上CGN的一个非常不正规的大问题。

这次北京联通部署的不正规的运营商级NAT的主要问题是:使用10.0.0.0/8网段

RFC 6598定义的CGN专用网段

前文已经讲了,CGN是一个国际认可的技术,方案可行,技术手段成熟,并且有相当完备的技术资料,以及国际公认的协议设置。

但是也就如前文所讲述的一系列缺陷,很多缺点并非是技术上无法实现或实现成本过高,只是 建设时偷懒或者设置错误。每种问题都有实际解决办法,但运营商就放在那不解决问题(爱用不用,反正国内运营商都一样)。

互联网工程任务小组(英语:Internet Engineering Task Force,以下简称为IETF)创建了 RFC 6598,详述了为ISP CGN部署使用的共享地址空间,以及NAT设备可以处理在入站和出站接口上出现的相同地址。ARIN根据此分配的需要将空间返还给IANA。分配的地址块为 100.64.0.0/10

对,没错,就像内网有 192.168.0.0/16 这种规定一样,CGN网络自身也是有专用网段的,100.64.0.0/10

使用 RFC 1918 规定的地址当做CGN地址

我们经常使用的 192.168.0.0/16 地址,也是由 IETF 定义的 RFC 1918。RFC 1918中包含三段地址:

  • 10.0.0.0/8(10.0.0.0 – 10.255.255.255),包含 16777216 个IP地址;
  • 172.16.0.0/12(172.16.0.0 – 172.31.255.255),包含 1048576 个IP地址;
  • 192.168.0.0/16(192.168.0.0 – 192.168.255.255),包含 65536 个IP地址;

这三段地址可以在内网中随意使用,公网上不会出现且不会存在这三段包含的真实IP地址。一般家庭用户和公司都会使用 192.168.0.0/16 这个段,而且多数都是使用24位掩码。大一点的公司会使用大一点的范围,但多数都是大材小用。

甭说多数公司的网管技术水平都非常低,就是我大学的整个机房楼都使用的错误网段(198.168.0.0/16),我工作过的某一级运营商内部使用的设备管理网段也是错的(172.32.0.0/16),更别说之前工作过的出差下煤窑,活着被开除提到的公司,公司网关对DHCP一窍不通不说,内网连接瞎搞并发数封禁,整个网段完全就是为了好记而瞎写的(12.12.0.0/16)。

snap2037

由于滥用IP在一般场合下很少出问题,所以很少有人 Realy Care。但是一旦出问题就需要全网改造,修复成本极高。

如果你在内网滥用非私网IP,那么假如真的有需要访问真正使用这个IP的服务器时……

这次的联通CGN也是同理,虽然仍然使用内网IP,但是使用的是 RFC 1918 而不是标准的 RFC 6598。

这个与路由有关:

  • 192.168.1.0/24 -> 路由器 -> 192.168.2.0/24。可以。
  • 192.168.1.0/24 -> 路由器 -> 192.168.1.0/24。不行!

即路由器的上行和下行不能在同一网段(不然还叫什么路由器)。

也就是说如果用户家用路由器内部使用的是10.0.0.0/8段,那么联通CGN升级之后就会导致用户内网 完全崩溃

一般来讲这种场景不太容易发生,大多数家庭用户都是不怎么管路由设置的,多数家用路由都是192.168.0.0/16网段,而且联通光纤入户的光猫还会自己额外多做一层路由(浪费公网IP、DMZ和端口映射支持巨差、WiFi信号污染),像华为这样的厂家还会在路由器界面和底层锁死设置,不让用户修改,非常缺德。

也就像我这种会自己改光猫桥接和有监控摄像头等有特殊需求的用户会更改自用网段。以前租房子就有人恶意偷网,不交网费钱,趁你不在家的时候把网线插到你路由上偷网,最简单的办法就是关了DHCP之后改成个特殊点的网段,让偷网者猜不到可以使用的网段。

看了一下其他地区,不仅北京联通,其他地区运营商也有使用 RFC 1918 规定的地址当做CGN地址的情况:

snap20170125174711

就像前文说的那样,很多问题并非是技术上无法实现……

 

在这一点上,某省的移动竟然比联通做得要好……

 

性能问题

这个小节的内容我还无法 100% 确定,毕竟联通CGN升级与近期GFW升级时间在一起,所以究竟是哪方面引起的问题还无从确定。

因为NAT有其 有状态 属性,所以当CGN变得不稳定时,遭殃的便是用户。而CGN升级之后,最大的问题就是,网速明显变慢,并且玩网络游戏变得十分不稳定。

联网游戏,尤其是要基于无连接UDP穿透的,延迟和掉线率都变得奇高,几乎无法正常游戏。

snap2025

说实话,中国互联网的建设方向就是大文件下载传输,不适合要求即时性非常高的应用场景。

滥用问题

可能这个问题与CGN关系不大

北京联通劫持流量是日常,经常在你网页里插东西。像这次升级的通知,或者网费催费通知,都是强插进来的。感觉有时候联通甚至不知道插什么好,干脆插个白页进来。

snap635

运营商劫持用户这事几乎是……你无法吐槽的事情。像劫持用户登录密码劫持用户下载链接强塞广告

因为我的PC是常年开着uBlock上网的,且经常访问的网站多数都是HTTPS的,所以之前并没有注意到,直到我过年回家感受了一下老家运营商的可耻程度。

snap_2017-01-26-06-39-54

当时可是把我吓坏了。我的网站上竟然有黄色内容,这要是被抓了可是要杀头的。赶紧拿着平板一点一点检查了所有的数据,发现所有账号密码都没丢,也没有异常登录情况。因为北京的路由还开着,于是在老家把流量跳到北京访问,发现这些危险内容就没有了。剩下的,我当时就懂了。

大过年的还熬夜给自己网站上HTTPS。

 

……老家这些人整天都上什么玩意……互联网么……真不知道日子怎么过的。

 

就连招商银行信用卡APP掌上生活都被联通注入了黄色广告:

snap_2017-01-26-06-27-51

 

 

而在有了CGN后,运营商流量将先由机房CGN设备先接管并隔离,可以说属于权力下放,真的变成了成语接龙:为所欲为。

难以发展的IPv6

IPv4枯竭唱衰,唱了差不多10多年了,结果到现在大家依旧是在用IPv4的样子。这就是下有对策,上面什么都没有。

我还在某运营商工作时,靠职权之便(其实是工作范围之内)检查过所有宽带用的线上设备和备用设备。几乎所有设备都支持IPv6,可以说当时想要在国内使用IPv6就已经没有额外的硬件成本了。然而就如同目前的发展趋势一样,运营商IPv6几乎没有任何进展,理由太多:

  • IPv6数据包与IPv4数据包格式差异大,网络审查系统需重新开发;
  • 懒政;
  • 路由器仍存在大量IPv4 only情况,多数开发商甚至刻意阉割IPv6模块,阻碍发展;
  • 基于IPv6与IPv4互通的技术叫做NAT64(就像CGN的NAT444一样理解就好),属于敏感词;
  • IPv6的普及会导致NAT技术消亡,而NAT技术则是阻止私人建站的手段之一。IPv6民用化意味着私人建站的复苏;

所以纵使IPv4已经枯竭到如此地步,IPv6依旧不能正常发展。(没准以后还会有NAT4444)

像苹果那种强制应用支持IPv6协议,也只是徒劳之功而已。

总结

不立Flag。

 

补充

2017-11-14:竟然发现北京电信在部署CGN时竟然还发过通告:北京电信宽带部署CGN割接的通告

26 comments

Skip to comment form

  1. 大致

    那些广告不都是收集你cookie里的关键字匹配的吗?你平常都用手机干啥了!

    1. 石樱灯笼

      你当是淘宝广告啊,还关键字匹配。

  2. haha

    在这个“基于IP的认证方式与多出口问题”中有个错字“ 我的路由施放一个公网IP后”应为“释放”。
    我的网络也是内网导致我的nas都不能远程!不过可以使用内网穿透的软件,frp之类的。

    1. 石樱灯笼

      感谢提醒,已更正。
      frp我还在了解阶段,不清楚他的流量模型是怎样的。

  3. hcl

    看现在卖的100元左右的路由器仍然没有 IPv6 相关的设置就知道 IPv6 在国内绝对没有任何大规模使用的可能性

    1. 石樱灯笼

      这个还是得看厂家。所有的路由内核都是从开源系统中抠出来的,厂家会做阉割,但还是有一些有良心的厂商会保留IPv6功能,只是现在非常少见了,而且可能也与政策有关,比如“必须隐藏IPv6功能”这种政策,可能有,也可能没有。

  4. Glegoo

    云南电信用的好歹还是:100.64.0.0/10 这个网段,不过云南联通还有公网 IP,公司的服务器用的都是联通的宽带+花生壳……

    1. 石樱灯笼

      公司宽带好像是上万元一年,固定IP,高连通率,上下行对等,不封端口,结果还用花生壳?

      1. Glegoo

        用不起企业专线啊,我们这边一年要几十万,我一个搞农业的,哎,就拉了一股联通的普通宽带,不过我们这个行业对稳定性要求也不高,反正网络断掉一天花也不会死……

        1. 石樱灯笼

          但是这不是很奇怪么,现在普通宽带都有明文禁止建站的。而且,一年宽带的钱购买2台阿里云低端主机的,如此抠门的公司竟然还自己搞服务器在内网建私站,我有点好奇你们的服务器是啥了,古董垃圾电脑,或者是个树莓派,或者是员工赞助的……
          唉,真是啥样的公司都有……
          话说我一直以为你肉身在国外,怎么突然变云南了。

          1. Glegoo

            哈哈,让猫哥见笑了,这套东西是我自己组装的,现代农业项目。有兴趣的话哪天可以交流一下。

      2. Subete
        Firefox 76.0 Firefox 76.0 Windows 10 x64 Edition Windows 10 x64 Edition
        Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

        1.其实现在有给中小企业的带固定IP(这个是真固定)宽带,价格一个月300左右(北京联通),需要公司身份开户。
        2.IPv6从2020年的视角来说,还是推动地比较有力的。

        1. 石樱灯笼
          Firefox 75.0 Firefox 75.0 Windows 7 x64 Edition Windows 7 x64 Edition
          Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0

          看来是降价了。以前是1200一个月。

          1. Subete
            Firefox 76.0 Firefox 76.0 Windows 10 x64 Edition Windows 10 x64 Edition
            Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

            嗯,这个叫“光快线”,上行10M、下行200M,月收费288元,按日拆解计费,中小公司完全够用了。
            其实在有固定IP的这个大前提下,这个套餐个人以公司名义办理也是可以的。不过开网站需要单独备案。
            这个玩意应该是李提出提速降费之后,2018年左右开始推出的。

            介绍:https://openapp.10010.com/bj/lightfast/to_lightfastline.action

          2. 石樱灯笼
            Firefox 75.0 Firefox 75.0 Windows 7 x64 Edition Windows 7 x64 Edition
            Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0

            光快线一直都有。这玩意意义不大,价格巨贵无比且上行10M够干球的。还不如去掉那个独立IP直接个人名义办理普通宽带,2018年价格是120一个月上行20M下行200M,不需要办理任何奇葩手续,如果在城里加点钱就可以用下行1000M了。

          3. Subete
            Firefox 76.0 Firefox 76.0 Windows 10 x64 Edition Windows 10 x64 Edition
            Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

            更正:有不同档次,实际上是宽带包+固定IP包的形式(一个月50)。上面还可以绑固话和IPTV(从光猫引出)。

          4. Subete
            Firefox 76.0 Firefox 76.0 Windows 10 x64 Edition Windows 10 x64 Edition
            Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

            本来就是卖带宽嘛。现在看来想两头都要的话,还真就得掏两份钱。
            当然,北京联通现在打打客服还可以很顺利的在五分钟之内要到公网IP,但以后可也真不好说。

            上行20M下行200M好像就是我现在在家用的宽带,还送一个手机号,给家人用了。

  5. lentrody

    虽然IPv6对审查不友好,但对于政府来说一人一IP还是有好处的。不过现在已经在应用层面上实行了基于手机号的实名制,IPv6好像还是没啥卵用……
    怕是只能让莉卡酱出马要求运营商升级IPv6才行了。

  6. 陈大猫

    目前看,IPV6从中国开始大规模应用是不可能的了,只能依靠外部力量推动。

  7. FROYO

    从文章中学了好多东西,感谢
    运营商是挺无耻的,三年前用的联通宽带,上下行对等的,用了没两年,突然某一天上行就只有100来K了,下行还是原来那样,工信部投诉网站都被封了,挂VPN能上,用宽带上不了,联通弄得什么玩意
    现在换了电信的,100.66开头的IP,光猫是华为的,按照背面管理IP192.168.1.1我是从来没打开过,总是拒绝访问,连个输用户名密码的地方都没有

  8. Lentrody

    还真的开始强制推行IPv6了,不知道是不是莉卡酱的功劳

    1. 石樱灯笼
      Google Chrome 75.0.3770.90 Google Chrome 75.0.3770.90 Windows 7 x64 Edition Windows 7 x64 Edition
      Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36

      不是。是运营商烧不起物联网设备的信令费了。

  9. TTL255

    《某省的移动》所使用的网段也不在RFC 6598–100.64.0.0/10范围内(100.64.x.x–100.127.x.x)

  10. Lentrody
    Firefox 73.0 Firefox 73.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0

    给我住的出租房换了路由器,下面直连的设备都能到获取IPv6。现在好像还没有支持IPv6流控的廉价路由或固件,不然就给整栋楼都弄上IPv6了。
    云南电信确实搞得还行,IPv4地址是比较正规的100.64.x.x,测了下NAT类型是PortRestrictedCone,挂BT时上传连接挺多的,40M上传带宽能占满,或许也用不着公网IP了?另外还测试了下PCP,但好像根本没有PCP server……

    1. 石樱灯笼
      Google Chrome 79.0.3945.88 Google Chrome 79.0.3945.88 Windows 7 x64 Edition Windows 7 x64 Edition
      Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36

      通IPv6仍然会是一件很困难的事情,协议的复杂度还是有点高,一般路由器厂家的开发人员都是完全不懂网络的(不要怀疑,我认识的很多给网络产品做开发的都不懂网络)
      根据我在几个省转悠后的结论,多数省的一级运营商都是使用的 100.64.0.0/10 。北京联通是特例。
      PCP就不要想了,你是不知道各地运营商是有多恨P2P。P2P流量能吃掉宽带理论带宽,而运营商带宽完全不够用(可以理解为市级或省级的超卖)。
      NAT能用端口受限圆锥就不错了,很多地区可是对称NAT的,二级运营商还是套了十几层的NAT,任天堂和索尼的游戏都玩不了,Steam只能指望中转服务器。

      说实话有IPv6这种好东西,本以为这会是二级运营商的春天,但结果是二级运营商对IPv6完全不感兴趣,很悲哀。
      IPv6离实用还是有太远的距离,光是运营商光猫套路由这一个大坑就很难解决。

  11. 六月和饭
    Google Chrome 79.0.3945.88 Google Chrome 79.0.3945.88 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36

    好怀念11年那会儿在学校用的电信,虽然只是800一年的4Mbps宽带,但是上下对等,有外网ip,还可以一个账号for循环拨20次,直接80M外加20个外网ip,那会儿校园网ipv4,ipv6用的也很爽,都是公网固定ip,100M上下对等,ipv6改下host竟然能直连google,不限制80端口,虽然不能从电信访问,现在这网络除了能上个网,下个pt都费劲,更别想做其他什么事了,不过ipv6倒是真的可以用了,能从电信访问校园网感觉挺好,希望各种应用和新出的路由器的ipv6能早日做好支持吧。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据