几个网络小故逝(第三集)
几个网络小故逝(第一集)
几个网络小故逝(第二集)
几个网络小故逝(第三集)(本文)
几个网络小故逝(大结局)
久等了,继续我们的小故逝,掺杂大量笔者的思考。如果你也是一个喜欢折腾网络的人,不妨进来看看笔者的胡说八道和天马行空。建议按顺序阅读,以便于最大化感受笔者的牢骚。

1. 家家有本难念的v6
二十一世纪赛博乌托邦
IPv6,互联网协议第六版,这个名词在网工中间应该无人不知无人不晓了,下面为了简便叙述就称呼为v6(相对应的,IPv4就称呼为v4),其优点就是能提供海量地址空间,完全碾压只有40多亿个地址的IPv4。去年这个时候上面发的这个文件说是要去NAT,其实就是大力发展IPv6,包括互联网接入要有v6,专线要默认开通v6,设备要支持v6,等等等等。
本来IPv6确实是一个好东西,甚至笔者也是通过IPv6 + Shadowsocks的方案在外连接到家里的网络,但是既然他能出现在本期《网络小故逝》里面,你懂的。
1.1 丰满的理想
为什么要推行v6?从表面上来看,道理很简单,就是要引入巨大的地址空间,解决IPv4地址分配耗尽的问题。
这里先提一嘴v4。从时代上来看,v4最开始发布于1981年的RFC791中,在那个年代,计算机存储空间和处理性能都是非常昂贵的,再加上可能当时认为『世界上怎么会有这么多计算机』,于是就把地址空间大小定在了2^32,也就是40多亿。这个决定在当时到底对不对,已经无从考证,所以笔者也就不再多去考虑。
Who the hell knew how much address space we needed?
—— Vinton G. Cerf, 2011
(美国互联网先驱,被公认为『互联网之父』之一)
到了九十年代,科学家们发现,v4的地址空间太小了,在可预见的未来就能被耗尽,于是他们提出来的应对措施,就是v6(注意,并非NAT,前一篇文章提到过NAT最初的设计目标并非为了缓解IPv4地址的耗尽)。有了v4的前车之鉴,v6的地址空间有了长足发展,一口气加到了2^128,基本上可以认为未来几百年都还够用——至于在那之后会咋样,不知道,也许会有IPv60吧,到那时候笔者已经转生提瓦特了,如果真有这么个玩意,而且这篇文章还被哪个存档措施给存档下来了,记得回来留个言。
这里多嘴说一句,如果看过我上一篇博文的朋友应该知道,v4地址缺乏不仅仅只是因为他地址空间本来就小,更重要的是分配的不均衡,以及像国内(大陆地区,下同)这样的高总量低人均的情况。对于美国,由于他有先发优势(别忘了互联网前身是什么),以及在分配上有很大的话语权,再加上人口不多,基本上能做到人均数个v4地址(其他一些国家和地区也是类似情况)。所以路由器的端口转发/DMZ功能对他们来说是常态,毕竟没有CGNAT(运营商级NAT,俗称的大内网)的存在,直接转发一下就能连上了。
话题回来。正是因为地址足够多,有望每个终端都分一大堆地址,所以从一开始v6就被寄予厚望,想要让他来实现一些目前已经丢失在了互联网长河中的东西:端到端原则。这个名词在不同语境下具体意思并不一致,但目前来说,他的意思是,如果中间没有防火墙等措施,终端应该是可以通过直接敲IP的方式连上的,没有NAT,没有更高OSI层次的流量转发,单纯就是端到端连接。
像这样的需求其实并不少见,最简单的比如你找运营商申请公网IP以便在其他地方能够连接到家里的网络,复杂一点的比如BT/PT下载,比如说P2P游戏,比如说两个端点直接起IPSec隧道(走IP 50协议通信那种),等等等等。端到端原则在v4网络上比较少见的主要原因自然就是NAT的存在,让终端无法直连,只能通过有公网IP的服务器进行转发,或者研究各种神奇的NAT打洞技术,在复杂的网络环境中杀出一条血路。所以其实很多v6的原教旨主义人员(我实在是想不出来有什么其他名词可以用来称呼此类人群)实际上是非常抗拒v6环境中的NAT之类的设备的存在的,『把互联网变回原来的样子』,甚至近乎于到了病态的程度。
说到这里还得再多嘴一句,有种说法是,所有的网络工程师都有个共同的理想:网络Fabric化。直观理解就是,想象有一台覆盖全球的,非常巨大的且故障率超低的三层交换机,上面有几百几千亿个端口,所有能上网的终端,大到超级计算机,小到儿童手表,不论你有线连接还是无线连接,都是直接连接到这个交换机的一个端口。这样做的好处在于:
- 各终端之间可以直接互联,没有弯弯绕绕
- 网内全线速交换,各点之间有充足带宽(比如说,儿童手表也可以连入万兆以太网)
- 通信可以按需进行,不再需要关心底层实现
- 高度灵活,高抗灾性,高可用性
- .....
可以想象的是,IPv6必然在其中拥有一席之地。
好了,上面的理想讲完了,现在开始泼冷水。
1.2 骨感的现实
我不确定目前还是不是所谓的转型阵痛期,但是这些都是笔者所观察到的情况,再丰满的理想,碰到骨感的现实,也得低半个头。笔者也知道这样的话很丧气,但是有什么办法呢,不丧气我还会写这个吗?
1.2.0 疯狂的原教旨主义者
这一小节单开一个1.2.0,因为笔者觉得有必要单独谈谈这一点。
1.2.0.1 薛定谔的NAT/NPT
上面提到,原教旨主义者们最大的争议之点就是IPv6环境中需不需要存在NAT(剩下的一些争议点比较分散,比如v6的动态前缀问题,下面再说),甚至有一份RFC4864详细列出了一些v6不需要NAT(包括Basic NAT和NAPT)的理由,比如说:
- v6地址空间足够大,不需要NAT来扩充地址空间
- NAT本质上是有状态的,会破坏通信
- 大量协议在设计时没有考虑到NAT,NAT会破坏这部分协议
笔者长期以来的看法是,梦想很重要,但是你得脚踏实地,不然就会变成幻想。v6原教旨主义者极力反对NAT的出现,最直接的结果就是,根本就没有出现类似于RFC2663这样的针对NAT的『标准』(虽然其实这个也并非是强制性标准)。但问题是,这个世界上并不会因为这一点而缺少IPv6 NAT(下面简称NAT66,也就是把v6地址转换为v6地址的NAT),甚至因为有实际需求,各类网络设备的厂商,比如思科,华为,华三,3Com,甚至是Linux中的iptables,都纷纷加入了具体实现并不完全一致的NAT66功能。这就导致在需要用到NAT66的时候,可能会引入各种神奇的小故障,或者说,『玄学问题』——而且还不一定能及时发现,因为NAT66并不是一种『推荐用例』,很多较真一点的地方不会去使用,这就缺乏了大规模测试的可能性,更加容易引发问题。
除了NAT66,还有个相对折衷的东西叫做NPT66(IPv6 到 IPv6 网络前缀转换),这个倒是有相关标准,RFC6296,其理念比较接近于NAT最开始的定义:单纯对地址进行处理,不涉及端口重映射,所以是无状态的,当然也就不仅仅局限于TCP/UDP流量。具体来说,在网络边缘,我可以把上游运营商给我的前缀,比如说2001:db8:1001::/48,转换为内网使用的地址段前缀,比如说fd00::/48,而其余部分(也就是后缀)保持不变。
好了,问题又来了,NPTv6可以被认为是某种程度上得到了官方认可,但是实际上呢?大厂商的网络设备笔者不清楚,但据说早年前Linux上使用NPTv6,是和CONNTRACK机制不太兼容的.....不确定现在如何,好像NETMAP能解决这个问题?笔者不太清楚,就不再多叙述了。不过有一点,即使你支持很好,注意到我说的是Linux,也就是软路由方案。正经商用里面软路由不是上计,因为他缺乏硬件加速,全靠CPU硬算,而如果是硬路由,路由功能和NAT44当然可以硬件加速,但是v6的NPT呢?搞不好还是用CPU硬算,这就形成了明显短板。
1.2.0.2 连不上的安卓手机
如果你是安卓手机用户(估计很多朋友都是),你可能有所耳闻,Google官方表态反对DHCPv6,仅支持SLAAC,这就导致如果你的v6内网依赖DHCPv6作为主要(甚至是唯一)的地址下发措施,那么安卓手机就无法接入v6网络。甚至,在安卓支持RDNSS之前,连入纯v6网络都是个麻烦事,因为你得手动给他配置v6 DNS,而不能依赖v4网络中通过DHCP拿到的v4 DNS。
SLAAC的优点有不少,比如无状态,比如主动通过以便快速更新前缀和其他信息,但是部分企业(及类似的受管理网络)可能更青睐于DHCPv6,因为SLAAC本质上是一种不可控的地址下发方式,或者说,他不是在下发地址,而是在下发前缀,让终端自己拼一个地址出来;另一方面,DHCPv6就和传统网络中DHCP一样,通过一个有状态的服务器去管理和下发地址,最直接的好处就是可以对网内设备进行一定程度上的管理,可以做日志记录,审计,满足合规性和其他安全性要求,而不是看着网内突然冒出来一个通过SLAAC上线的设备,却不知道是谁的。
抛开这些因素不谈,DHCPv6对于一个企业来说也是有用的,比如说自动上线的IP电话(依赖DHCP option 120/125),PXE引导(option 60/66/67)。虽然说你完全可以给单独的这些业务划分VLAN,特定情况特定处理,但是....我不太觉得部分企业会想这么多,毕竟所有设备共用一个192.168.0.0/16的厂子还成过经典案例,世界不就是个草台班子么。
1.2.0.3 有处不在的地址块
IPv6的地址结构,一开始就被划分得明明白白,后64位是接口ID,可以粗略理解为主机位,而前64位就可以根据前缀长度来具体确定,比如拿到个地址2001:db8::1/48,你就知道这玩意有48个前缀位,64 - 48 = 16个子网位,可以划分2^16 = 65536个子网。所以很多协议都是基于『接口ID固定为64位』这个原则去设计的,甚至大部分操作系统都会期望自己能拿到/64的地址。
问题在于,出于鬼知道什么原因,有部分地方提供的前缀长度大于64,来到了/96甚至/112(当然其中有个例外,/127,类似IPv4网络中的/31,适用于点对点网络),就会引发很多微妙的问题,首当其冲的当然就是SLAAC机制的失效,因为终端拿到的前缀太长,后面没办法按标准塞下自己EUI-64生成的地址,如果此时没有DHCPv6去辅助分配的话,设备就可能就会因此拒绝接入网络。
不过这个问题的严重性似乎稍微弱一点,也许这种情况可能更多地出现在校园网这种神奇的地方,或者说企业内网这种受管理的,也有可能是某个超小型VPS供应商....所以具体什么情况,笔者也不太确定。
1.2.1 楼下饭店路由器
我们先来聊一点轻松些的话题。
还是上面那份文件,去NAT化,其中两个要求,第一个就是让各种接入的宽带都要有提供v6通信能力,比如说你的流量卡,打开之后能看到运营商给你下发了v6地址;比如说你家宽带,配置好PD前缀下发,下面的设备就能拿到前缀并生成可路由的v6地址,或者是你打开NDP Proxy,也能拿地址,再不济你直接动用NAT66,虽然和原来的理论相悖,好歹下面的设备也能访问其他v6服务,所以也不是全无价值。另外一个要求就是,各种网站和接入的专线要支持v6入站,DNS服务器要支持解析AAAA地址,让v6真正用起来。
好了,你配置好了家里的v6,还通过VPN开通了外部安全访问,很舒服啊,打算就去楼下饭店吃个午饭。出小区右手边二百米,点了一份鱼香肉丝盖饭,然后你掏出手机准备付钱,顺手连上了餐厅WiFi,却发现扫码支付特别慢,干啥都要转圈半天。完事之后你回到座位上打算看看家里NAS的片子,却发现连接不上。
为什么会出现这样的问题?
IPv4在互联网中的统治地位,目前来看暂时还很难撼动,各种积重难返的老设备,甚至只是一个厂家在设计时偷懒的路由器,都有可能只支持IPv4网络。
在传统的纯v4网络结构里面,一切都很平常,光猫拨号或者路由器拨号,被分配到一个地址,然后就做NAT给下面的设备上网,都是一些成熟的东西了。现在需要推广IPv6,原来的v4网络当然不能一弃了之,所以就自然而然地产生了v4v6双栈网络。按照理想的情况下,v4走v4,v6走v6,井水不犯河水,但是事实真的这么好吗?
1.2.1.1 浓重的油烟味
为什么我会举饭店的例子,是因为这个场景用来解释『改造v6支持的投入产出比过低了』这个痛点,简直完美:
- 小本经营,很多都是用家宽给客户提供网络接入,无力承担专线(以及对应的运营商配套服务)
- 客户数量有大有小
- 客户对网速的需求,有,但不多,可能也就是吃饭的时候刷刷短视频
- 客户流动性比较大,尤其是开在交通枢纽旁边的餐饮店
- 经营人员对于网络的了解程度不高,关注度也不高
国内移动互联网大规模发展可能也就是在2012年前后,最早不会超过2010年。虽然『餐厅等小型商业场所开始提供WiFi接入』可能比这个再晚一些,但毕竟也是距离现在很久之前的事情了。如果翻看WiFi技术的发展时代,不难发现,WiFi4(802.11n)标准发布于2008年,而他的下一代,WiFi5(802.11ac),却一直得等到2014年,且仅支持5GHz波段,下一个支持2.4G波段的标准,WiFi6(802.11ax),得等到2019年。
也就是说如果餐馆老板在2008到2019这十年内(甚至直到今日)给自己的餐馆设置了WiFi接入,那么极有可能他用的依然是WiFi4路由器。原因也很简单:厂家看到移动互联网风头,所以生产量大,库存量大,社会上保有量也就大了,被顾客买去的几率当然也就大了不少。而且不要忘了,国内还有大量的农村市场和城乡结合部市场,这些地方的餐馆也逐渐开始提供WiFi接入,但是时至今日,你还能在这些地方的市场上买到WiFi4路由器,可能是库存货,可能是倒卖了不知道多少手的,鬼知道呢,反正价格比较便宜,而且还能上网,就对了。如果你在某个餐厅灰不拉几的角落看到一个覆盖了不少油烟的路由器,可以很安全地假设这玩意就是WiFi4的。
于是好玩的事情就来了:理论上来说,不论你是WiFi几,与你使用什么版本的IP协议没有任何关系,但是实际上呢?一个万年不升级的WiFi4路由器,在被生产出来的那个年代里,大概率在固件里头就不支持v6,毕竟不影响普通上网;即使固件自动升级了,可能也默认关闭v6,又怎么给客户提供v6接入呢?而且提供IPv6对于餐馆来说可以说是基本上没有任何的好处:
- 单栈v4并不影响客户访问网络,因为公网上的v6-only服务少之又少
- 餐厅老板并不知道怎么设置,只知道插上电能上网,就扔一边去了
- 客户是来吃饭的,不是来开展商业金融会谈的,提供的网络能刷短视频就行
本来这种情况在还没有大规模推行v6的时候不是个问题,但是现在,问题来了。考虑如下情景:
- 某DNS服务器同时提供A和AAAA解析,某域名同时有A和AAAA记录(别忘了那份文件,互联网大厂一般都开始支持了)
- 某餐馆里面的路由器原样转发DNS解析结果,但是不支持v6,也不屏蔽返回的AAAA记录
- 客户的设备解析域名,拿到了v6地址,所以优先发起v6连接
- 但是路由器不支持v6,所以连接不会成功,设备就卡在那了,直到超时
所以你的扫码支付也就卡在那了。
理论上来说,确实有一种叫做Happy Eyeballs的机制,可以让设备在v6连接失败时自动回退到v4地址,但是还是那个问题,各个厂商对于这玩意的实现不一定一致,你无法保证能够快速回退,于是该卡还得卡。对于不明就里的人来说,他可能会认为自己手机信号不好,可能会认为餐馆里用的人太多了,才会卡——因为这些都是很正常的情况,所以也就无人在意。
总之,一句话就是,顾客不会因为你的饭店不支持v6而不来吃饭,投入产出比无限接近于0。
1.2.1.2 光猫很想接管
我知道,在玩网络的朋友眼里,光猫拨号,以及光猫受控,是十恶不赦的事情,主要是本着『我的网络我做主』的原则,也有可能是追求极致性能,所以想让拨号的操作交给路由器进行,光猫就老老实实当好光电转换器的角色就行。
但是凡事都有两面性,光猫拨号与光猫受控的另一个方面却是运营商可以很方便地统一下发配置,这里的配置也就包括了IPv6的配置,所以现在新开家宽,默认情况下都是光猫拨号。
上文提到,餐馆用的可能也是家宽,但是此时就会出现两种很好玩的情况:
假如所有设备直接连接到光猫(包括直接连接光猫的WiFi,那么运营商下发的最新配置就可以直接被应用,光猫开始分配v6地址,提供v6路由,所以用户就连上了v6网络。
但是啊,但是,早期一些的光猫,可能内置WiFi性能并不强,甚至根本没有内置WiFi,于是很多人第一直觉当然就是『买个WiFi回来接上就行了』,于是他们买了个路由器回来接上,打开。很显然这就回到了1.2.1.1中提及的情景:不论你光猫怎么龙飞凤舞地提供v6,只要你经过了这个不支持v6的路由器,那就统统都免谈。
当然这个情况最近几年可能会好一些了,很多地方都开始直接使用光猫提供的WiFi,而且餐馆老板也乐意,反正省下了路由器的钱。
1.2.2 PMTU黑洞
网上能找到不少人反映,开启IPv6之后好像干啥都慢半拍。除了上面提到的DNS问题之外,可能还有一个原因:PMTU黑洞。
因为这玩意比较复杂,所以笔者依然不班门弄斧了,具体可以参考以下资料:
至于为什么出现这样的问题....是的,基本上还是过于理想的设计所导致的。从设计规范上来看,v6不允许中间路由设备对数据包进行分片,遇到超出MTU设置的包直接丢,然后返回一个ICMPv6信息通知源主机调整分片设置。问题就出现在这里:部分(甚至很多)运营商的设备无法传输ICMPv6信息,可能是因为安全原因禁用了,可能是因为在半路上丢包了,总之源站收不到这个信息,也就无动于衷,只能等上层协议栈(例如TCP)超时重发,一来二去的,速度就慢下来了(而且别忘了中间还有TCP队头阻塞问题之类的,进一步拖慢)。
1.2.3 小网络Multihoming
It seems the engineers who have to deal with this kind of scenarios reached a reluctant consensus since I wrote this blog post more than a decade ago: NAT66 or NPT66 is the way to go. For obvious reasons, that conclusion will never make it past IETF IPv6 True Believers.
自从我十多年前写这篇博文以来,那些不得不应对此类情况的工程师们似乎达成了一个勉强的共识:NAT66 或 NPT66 才是出路。出于显而易见的原因,这个结论在 IETF IPv6 忠实拥护者看来是绝对不会接受的。
Multihoming,翻译为中文就是多宿主,用大白话讲,就是想多拉两条上联口,可能是跨运营商的,用来保证负载均衡或者故障转移。
对于大网络来说,其实不必讨论那么多,大网络有自己的地址分配(学名叫做PI地址段)和AS号,还能和运营商起BGP,可以做到Multihoming。但对于小网络,比如小企业甚至是家庭,Multihoming就变得非常好玩了。小网络很难获得单独的v6地址分配与AS号分配(或者承担不起价格),而且更有可能的是运营商根本不愿意跟你起BGP会话,更有可能是是每条线路都有单独的不同的前缀,由运营商分配给你,可能还是动态的,所以这条路根本走不通。而且就算是能起BGP的企业,也会因为BGP线路价格昂贵的原因,仅仅把BGP线路用于保障重要业务,至于其他业务?老老实实用普通宽带去。(同样,关于这一点还得再下面提及)
另外还有些别的解决办法:
- 一次性下发所有线路的前缀到各个终端,让终端在网卡上配置多个v6地址——但本质上还是治标不治本,选择哪个源地址发送数据取决于终端,而且如果你需要统一进行负载均衡的时候,也无法控制终端行为
- 让备用线路处于v4-Only状态,但本质上依然是治标不治本,这就相当于没有做v6多宿主
- 通过隧道运营商转接——且不论国内有没有这玩意,隧道运营商转接本质上也是一种workaround,引入的延迟和『不干净』IP地址(比如典型的HE的v6)也是风险之一
于是就剩下了争议比较大的选项,其中一个就是通过NAT/NPT进行Multihoming。在v4年代,这么玩很正常,因为那会儿NAT44是被广泛使用的,而且别忘了,NAT这玩意可是有状态的,也就是说完全可以用各种规则来分流,系统会自动记住分流的情况,以便数据包回来的时候能正确转发。但是问题来了,如上所述,NAT66是被视为十恶不赦的方案,所以生产级的NAT66长期缺乏共识(可能这两年好些了),可能部分设备提供这样的做法,另一部分设备无法做到(尤其是家用路由器和低端商用路由器,基本上做不到),这就引入了非常明显的不确定性因素。至于另一位主角,NPTv6,除了接受度高一点之外,处境基本上也差不多,甚至还有厂商混淆了NAT66和NPTv6这两种技术,导致想找资料都显得困难。
笔者不确定目前对于小网络IPv6 Multihoming,都有些什么好方案,所以上面的信息可能过时。不过更多情况下,小网络对于这类问题的态度,一般都是一刀切,不仅仅包括Multihoming问题,甚至包括整个IPv6。
1.2.4 蜘蛛网般的内网
笔者曾经不止一次抱怨过,作为『IPv6建设优秀单位』的学校,校园网里面完全不支持IPv6。对于这个问题,学校给出来的解释是,设备太多,无法统一升级到支持v6的状态。其实这种情况并非少见,不管是校园网还是小企业,这就进一步印证了上面提到的投入产出比问题。
1.2.4.1 老旧的设备
这一点在上面有所提及,就是饭店路由器的例子。校园网这种虽然也是类似的老旧设备,但是还有另一个问题是系统复杂,设备数量多。以笔者所在的大专院校为例,学校有两个校区(根据路边社消息,第三个校区还在新建中),校内教学楼,宿舍楼,食堂,都有不少AP,路由器,三层交换机,而且别忘了还有一群监控探头。虽然说终端设备可以不必完全支持v6,但是剩下设备的改造也比较麻烦,支持的要打开要配地址,不支持的要升级设备。学校的钱也不是万能的,据说这种公办类型的动账更是麻烦,又要招标,又要计算定额,又要折旧,根本没办法说换就换更换。
即使换成功了,原来你v4怎么路由的,在v6上还得再来一次,麻不麻烦先不说,有时候怎么配都不知道,就比如笔者上次搭建杏泉网络的时候,配置OSPFv3足足花了半天时间,真的是头大,毕竟有关v6的资料少之又少,而且还是英文为主——当然这个问题可能不大,真正的大客户一个电话就能把厂商技术员摇过来,所以可能还行?
而且抛开技术问题不谈,这里借用一下老领导最喜欢的说法:搞的过程中出事了,你来负责吗?——其本意就是,得找个什么玩意去承担责任。叠加上这个因素,就基本上更加没有动力去改v6支持。
这里多插一句,笔者怀疑,那些支持v6的学校很多都是为了政治任务,不然也不会搞出来『评选IPv6建设优秀单位』这种玩意。这个评测,基本上就是看你学校官网是否支持v6,以及v6覆盖度如何,然后就没了。我不确定这么个评选是不是放水专用评选,毕竟对学校来说『xxxx优秀单位』是个好名头,不过很显然,如果没有这个评选,搞不好学校根本不会去动手搞v6。
1.2.4.2 复杂的审计
近几年来,各个地方都在讲网络安全,企业和学校内网都有不少地方加上了审计,什么出口审计,接入审计,一大堆。当然还有校园网典型场景,你要交网费,交了网费后才能通过Web Portal认证,才能上网。
好了,现在说要改造IPv6,假设钱不是问题,路由设备也支持v6,只有一个问题:改造之后会不会出现漏网之鱼呢?
我不确定早年间是故意的,还是当时忘了,还是当时没办法解决这个技术问题,总之当时部分高校使用IPv6是可以免流甚至绕过认证的,而且根据网络搜索来看,时至今日这种情况似乎依然存在:

路由设备支持v6,可以让一个网络在v6环境下跑起来并正常使用,但是审计设备呢?即使是在改造v6过程中连带着审计设备一起改造,根据墨菲定律,会出事的地方是一定会出事的,可能真的有那么一个地方没有做好改造,导致不该放行的流量过去了,虽然从技术层面上来看看你无关紧要,但是技术的尽头是行政,到了这个层面会发生什么事就不好说了。毕竟从领导角度看,就是因为改这玩意改出来的事故,你就得把v6关了,然后老老实实背锅——除非按上文所述有政治任务,不然估计很难有『技术团队连夜攻关解决网络安全问题』这种情况的出现。
最后多说一句,如果是绕过认证是缺陷,那么v6免流可能有一部分故意的因素在里头,因为早年间公网v6服务并不普及,而学校在购买教育网带宽的时候,赛尔网络(就是他运营和管理的教育网)为了推广v6,会等量赠送v6带宽。换句话说,可能情况就是,如果学校购买了100M教育网v4带宽,那么在这个跑满的同时,你还能继续跑100M的v6带宽。如果因为做人情,或者单纯就是体现『我们学校支持v6』而把这部分带宽下发给校园网内部使用,能产生v6免流这种事情也就不奇怪了。
不过上面这段话你可能有疑问,什么叫『100M教育网』。那是因为,教育网这玩意更加抽象:
1.2.4.3 堵车的教育网
如果你去看绝大多数大学的官网宣传,尤其是看他们网络中心的网站,很有可能会看到他们在宣传学校接入互联网总带宽『40.6Gbps』或者说『20.3Gbps』或者说别的有零有整的数据。不用怀疑,那个小数点后面的数字就是教育网带宽。
关于什么是教育网,这里不多展开,你只需要知道,由于历史原因,国内的教育网目前处于一个非常畸形的存在,主要表现之一就是价格不是一般的贵。如果你用『"教育网" 中标 公告』这个关键词去搜索,很容易就能找到各个大学的中标公告,其中都会列出来采购价格和采购带宽等信息。笔者在这里摘选几个,可以点击链接查看详情:
- 中科大:中标金额300万元,带宽2.5G
- 成都大学:中标金额120万元,带宽1G
- 西北大学:中标金额189万元,带宽2G
- 安徽财经大学:中标金额36万元,带宽200M
- 湖北交通职业技术学院:中标金额30万元,带宽300M
以上价格均为年付。
当然其实不可否认的是,这个价格不仅仅是包括带宽,还包括那几个几十个C类地址段(/24)的IPv4地址和几个/48的IPv6地址,以及*.edu.cn这个域名(甚至绝大多数学校,抛开合规性,购买教育网的主要原因也就是为了这个edu.cn域名),但是价格就是价格,几十上百万的价格扔进去了,换来的只有顶多两三个G,甚至只有数百兆的网络,分摊到全体教职工和在校学生,你打算怎么用,几万人就在这抢两三G甚至几百兆带宽,是打算一人分100Kbps吗?
所以很多学校都会去采购相对便宜不少的御三家带宽,用作师生日常上网使用。运营商那边也很乐意接这种单子,毕竟是大批量稳定采购,甚至还可能主动帮学校构建与设计内网,总之服务得特别周到,就是为了吃下这个大单子。
现在话题回来,教育网其实是非常早就开始提供IPv6及其带宽的,所以早期改造v6的学校,很多情况下v6流量都是从教育网流出,再经过交换点接入公网(所以那时候有不少工作在教育网IPv6上的PT站点,比如六维空间)。本来这其实就是一个很简单的场景,但是随着时间推移,御三家带宽也开始支持IPv6。好了,现在我们就回到了上面提到的Multihoming问题。
如果你做多宿主吧,投入的时间精力成本,以及产出,依然是严重不均衡(别忘了,即使是一个大学,也几乎没办法和御三家起BGP,都是NAT出去的),如果你不做吧,现在公网v6服务很多了,让一堆用户挤占一条线路的v6带宽,不还是会碰到上面的100K问题么——更进一步,如果一堆人继续挤占教育网的v6带宽,情况估计只会更惨。权衡之下,很多学校干脆就用老办法,NAT66,凑合跑,甚至更进一步地,直接一刀切关闭v6,大家都用v4吧。
后者的情况其实更常见,笔者的学校就是这个情况:v6带宽仅仅拉到了学校中心机房,用作对外发布,校园网内网用户继续NAT44,反正又不是不能用。
1.2.4.4 省事中的省事
小企业内网部署IPv6的一个难点(我不确定算不算难点,但确实存在)是,IPv6没必要。这个没必要,其实有几方面可以解释:
- 很多企业的内网服务,比如内网云盘,都是直接敲IP的。对,没有内网域名,没有TLS,纯粹就是敲IP,可能还加个端口,
192.168.3.3:81,然后就连上了。别问为什么端口是81,问就是80被OA占了。这种情况下,IPv6的长地址就成了不便:2001:db8::dead:beef:1234:5678,输入完一大串已经烦死了,中间还得注意是一个冒号还是两个冒号,如果要改端口,两端还得加中括号....对于一般人来说属实不便。 - 内网设备就那些,数量并不多,IPv4地址空间掰一小块下来都能完美覆盖,也就没必要上v6了
- 部分还在用和新购入的安全设备,对于v6的支持依然很差(甚至部分设备审计v6流量还要另外买授权),笔者看过的例子是因为开通了v6,员工老是能绕过上网限制(就,上班时间不能看视频网站,之类的),最后老板忍无可忍,一拍板,直接关闭了v6
- 网管技术不是很过关,或者单纯只是『月薪三千我跟你折腾个什么劲』,所以最后就缺失了IPv6
基本上就是以上的那么几个原因。
1.2.5 运营商的脸色
1.2.5.1 大剪刀的日子
笔者在网络大剪刀那一篇里面提到过(其实目前情况都是如此),运营商上针对所谓的PCDN用户(实际上有多少是真的PCDN,那就不得而知了)的处理手段,通常就是三件套:
- NAT等级调节为NAT4(对称NAT)
- 停止下发IPv6
- 限速到极低(例如上行5Mbps)
当然现在的进化形式是直接给你拔线停宽带,『低价值用户携号转网无需挽留』,不过因为和本文关系不大,在此略过。
被大剪刀的宽带没有了v6地址,那么有更何况去访问IPv6内容呢?当然根据趋势来看,即使上头真的下命令说,禁止关闭IPv6功能,运营商也依然有得是办法,比如给你拉到IPv6 NAT去,就给你分一个fd00::/7地址,用去吧。
1.2.5.2 瘸腿专线
我不确定之前提过没有,但是目前部分运营商推出了这样的一种『专线』,他的形式一般是入户给你拉一根光纤,但是里面分开成两个业务,比如说,100/10的『专线』和1000/50的『商务宽带』,再接到你的路由器上。
后者的商务宽带,这玩意其实没什么好说的,就是大号家宽,除了价格贵一点之外就没有别的什么了,单纯家宽,路由也是跟家宽一致,所以不再叙述。至于那根专线,还是有点料的,虽然同样是PON,而且带宽小一些,但是至少路由走起来比家宽顺畅很多,根据我一个朋友的观察来看,JMS(就是本站旁边广告那个Just My Socks)在晚上时候,商务宽带线节点全炸(不是阻断,而是速度起不来,看视频一顿一顿的,抓包发现有大量的TCP重传,导致速度起不来),而那根专线则十分丝滑,百兆速度很舒服。与此同时,这根专线提供的是独占固定IPv6,也就是说不会像家宽那样需要定期重新拨号,你要真拿去跑什么业务的话不会因此中断。
但是问题来了,这玩意同样是有不同价位之分的,最便宜一档SKU里面提供的专线并不提供公网IPv4。现在问题来了,如果你想通过拉专线的形式对外提供服务(有可能是你公司的官网,也有可能是别的什么东西),现在目前这根线只有公网6没有公网4,你会考虑加点钱上更高价格但是有公网4的线路吗?
如果这个问题,用户回答了『会』,那么这根线的v6到底还有没有用,就值得商榷了。换句话说,v4在目前绝对是兼容性最好普及范围最广的,估计很多人都会很自然地想到,v4能用为何还要去使用v6呢?
而且老实说,我很怀疑这个回答在大多数情况下的答案是『是』。因为正如上文所说,虽然这几年都在大力建设IPv6,而且我自己也清楚,经常去的几个餐馆,在今年也都纷纷支持了v6,但这里毕竟算是半个城区,如果你到稍微偏一些的乡镇,到那些还用着七八年前光猫和路由器的地方去,v6连接性还能安好吗?所以如果你的专线不支持公网4,那么对外提供服务的能力,毫无疑问会被削减很多了。
当然上面说了这么多,这种专线也并非一无是处。除了上面提到的更好的路由外,更稳定的链路也是优点之一。考虑这么一个场景:混合云,也就是企业自己有部分机房,云上再购买部分机房,互联起来,通过云对外提供服务,以便发挥各自的优势。既然像这样的专线有稳定链路,意味着你可以放心地通过这条链路,在你的机房和云上机房建立VPN。至于单v6,这个特点反而成了优势,因为云端可以单独以很低的价格(甚至完全免费)给单独的网卡申请到同样是静态的v6地址,而VPN协议根本不在乎你底层是v4还是v6,也不在乎里面传输的数据是v4还是v6,只要能连上,——静态IP,不中断的链路,稳定路由,此时搭建的VPN质量不是一般的高。
IPv6的章节到这里暂时告一段落。
其实,v6这玩意还是挺方便的,但是目前依然有不少痛点,作为用户,看来估计只能先等等了。
2. 用BGP刷抖音?
世界加钱可及
BGP,应用十分广泛的广域网路由协议,想必各位网工都不陌生。
不过今天我们不聊技术,也不聊理想,因为笔者都不熟悉。笔者目前的BGP技能仅限于给机器配AS,Router-ID,邻居地址,本端网段,就完了。别的技术只会查文档,甚至可能还折腾半天,最后不仅漏路由了,搞不好还成了流量中转站,电信联通的移动在机器上快乐地转发着。
今天就聊聊笔者看到的一些情况,也顺便作为BGP学习记录,当个乐子看就好。
2.1 为啥要BGP
家宽不必说,略过,因为全世界应该没有什么地方家宽也能拉BGP的(有的话踢我一脚)。
企业专线...国内这个情况我不确定是不是特例,但应该不至于是,因为全世界很多地方的宽带接入都是这个样子:通过PPPoE或者IPoE或者静态配置,拿到IP(这个IP是运营商分给你的,归属权是运营商),然后局端一般是写一条静态路由指向你的IP,客户端就是设置默认网关指向运营商网关(本质上也相当于配置了路由),然后就通了。多个IP同理,比如订购专线时候从运营商购买(更正确说法是租赁)到了198.18.0.0/28的IP地址,除去必要占用(网络号,广播地址,网关地址)之外,还剩下13个IP可用,你就在这里面挑一个IP配置到路由器WAN口,剩下的就你来处理了,要么是配置到NAT地址池让下面的客户机上网,要么奢侈一把,配置到路由器之后的机器上(且,显然,此时无需开启NAT),让这些机器也能对外提供服务——如果这个机器上面开了某种Hypervisor的话,你就可以母鸡生小鸡,开一大堆的VPS了。
上面这段话的要点是,IP归属权属于运营商——毕竟没有自己IP分配的运营商....有,但占比不大,不算主流。但其实如果你有足够的钱的话(再加上你是足够大的公司的话),你是可以自己购买(当然本质上还是租赁)IP地址的(目前v4一票难求,v6好买一些)。此时你就拥有了这些IP地址的所有权。但问题在于,互联网本质上还是一个去中心化的结构,你给你的机器配置了这些IP,只是你本地而已,对端(尤其是局端)并不认识,自然也不会让你上网,也不可能帮你把连接转过来。
这就是动态路由协议出场的时候了。所谓动态路由协议,基本上都可以抽象为,路由器自动地通过一定方式,告诉别的路由器『我能转发什么网段,优先级是多少』。既然是自动的,那么只要你把自己的IP段配置好,并告诉上一级路由器『这个IP段可以转发到我的机器上』,上一级路由器就会自动帮你转告给上上一级的路由器,以此类推,之后全网的路由器都能知道这个地址段的流量怎么转发了(此处忽略路由聚合等技术),于是你就可以正常收发包。
动态路由协议有很多,BGP就是其中一种。这里不会具体去讨论BGP比其他协议(例如OSPF)在某些特定场景下到底好在哪里,你只需要知道,总之就是BGP目前应用非常广泛,就行了。
2.2 BGP之痛
BGP听着很好,但是有个问题:贵,大写的贵。
我们来看电信给出来的这个价格表(目录价,好像是这么个说法)。里面的一些名词,老实说,笔者也不确定到底对应的是什么SKU,但是假设这份价格表就是现行目录价的话,我们可以粗略对比一下价格:
- “专线上网”:100M 17140元
- 专线上网(BGP路由接入):100M 全穿透 56400元
是的,就是带了个BGP属性,价格原地翻了三倍多。即使按照最便宜的『非穿透』BGP来计算,价格也会比普通情况下的连接要翻倍很多。至于这里的非穿透和全穿透到底指代什么,可能真的要向业内人士求证了——有说法是,全穿透BGP允许其他AS的流量通过你这个AS,而非穿透则不允许,不确定是不是这样。
于是这就出现了一个问题,你可能也已经发现了:国内出现了一大堆神奇的BGP衍生产品,什么全穿透BGP,半穿透BGP,静态BGP,还有各种乱七八糟的不是BGP却挂着BGP名头的玩意(比如部分多线机房),不论是价格和质量都参差不齐。此外,由于如此高昂的价格,如果你不是专门做网络相关的(比如上文提到的云服务器),估计你应该也不会想着去接BGP了吧——一个月多花三倍的钱就为了刷抖音,哥们,你认真的?
最后提一嘴代播(好像部分会叫高大上一些,就是上面提到的静态BGP)。这玩意说起来也简单,就是你有自己的IP段,请运营商在他的AS里面广播你的IP段。从远端来看,你的IP段被归类在运营商AS之下。然后运营商再拉根线过来插你机器上,也不用起BGP之类的动态路由协议了,运营商那边直接一条静态路由指过来就行,本质上和上面提到的普通专线差不多,只是这次不是运营商在提供IP罢了。如果你是御三家都申请一下代播,然后三根线都接到同一个入口路由器上,也能勉强实现类似BGP的效果(即同一个IP,不同运营商用户走不同路由),而且价格便宜很多。当然你也能猜到,这么干,稳定性什么的比不上真正的BGP。
行了,就聊这么多,因为笔者就知道这么多了。
笔者这个穷逼没见过世面,现在能写出来这些文字已经很不容易了。
3. 未完待续...
这一篇博文够长了,写得Typecho的编辑器都有点内存泄漏了(反正Chrome提示GB级别的高内存占用)
第四集,我们再继续聊
我校的 ipv6 情况是,分配教育网公网 ip,只分配 /128 到单个设备,普通的 WiFi 接入点分配的 ipv6 到教育网正常,到其他站点路由在校内三跳后压根不通。ipv4 是普通的 nat,2023年暑假前非教育网出口是联通,暑假改造时替换成了电信,改造期间两种出口兼有,很神奇。
有朋友在核心机房托管了设备,那里有线接入分配的 ipv6 似乎实现了 nat66。
幸好我需要的 ipv6 only 的服务都在教育网之内。
只支持 dhcpv6,搭配深澜的漏洞可以获取所有人的准入信息,ipv6 地址写着 :: 的绝大多数都是安卓用户(有时 Windows 也获取不到然后 ipconfig /renew6 一下就有了),精准开盒。
非常感谢这篇文章,让我完全明白了校园网 ipv6 为何如此错误百出。
目前v6这个情况还不知道什么时候是个头,没有NAT,以及安卓不支持DHCPv6之后,一些在IPv4上十分顺理成章的事情就变得费解了不少,难搞