facebook史上最严重宕机,全网宕机近七小时,高管赴推特道歉。近7个小时时间,全都挂了facebook全网宕机,连内网都废了。twitter成为了最大赢家。对一家互联网巨头来说,这样的状况实在太尴尬。这已经是facebook创办以来最严重的一次网络访问事故。直到下线近7个小时,美国西部时间下午三点左右,facebook、instagram等诸多产品才恢复正常访问。(目前只是美国地区恢复正常,全球其他国家和地区依然没有恢复。)
整个事件可以概况为:facebook负责bgp变更的工程师,将包含facebook权威(authorized)域名服务器的网段185.89.218.0/23和129.134.30.0/23过滤掉了,从而造成的连锁反应。
以下是完整的整个事件的前因后果:
facebook网络工程师,更新bgp路由配置时,将185.89.218.0/23和129.134.30.0/23这两条路由过滤掉了,这两条路由分别包含512个ip地址,一共1024个ip地址,其中:
185.89.218.0/23代表ip地址从185.89.218.0开始到185.89.219.255结尾的512个地址。
129.134.30.0/23代表ip地址从129.134.30.0开始到129.134.31.255结尾的512个地址。
意味着internet上其他路由器将没有通往这1024个ip地址的路由,怎么办?
丢弃处理!
可是要命的是,这1024个ip地址恰恰包含facebook公司权威dns服务器的ip地址。这样就出大事了。要想透彻理解为何要出大事,首先要了解dns是如何工作的?
当用户在浏览器里输入facebook 之后敲回车键,浏览器需要将facebook 解析成ip地址之后才能建立tcp连接,然后tls安全连接,然后是http交易。
通常用户的本地dns服务器就是家庭网关ip、或者公司网关、或者公司dns server,比如192.168.1.1 、10.0.0.1、172.16.1.1之类的,也有的用户使用诸如1.1.1.1 、8.8.8.8、114.114.114.114的dns服务器。但是这些这些dns服务器,仅仅是域名解析的搬运工。当用户的解析facebook 请求到来时,它们先检查自己的缓存里是否有facebook 与ip地址的条目,如果有,直接返回给用户。
如果没有,需要这些域名解析的搬运工比如1.1.1.1,去根域名服务器(一共13个虚拟ip地址)去查询,返回com域名服务器(一级)ip地址列表。
1.1.1.1这台不知疲倦的搬运工再联系com域名服务器(使用ip地址联系),com域名服务器给1.1.1.1 返回facebook 域名服务器的ip地址列表。就是这么几台服务器才是最权威的数据源头,因为它们才真正知晓facebook内部服务器域名与ip地址的映射关系。
可是当1.1.1.1这台搬运工尝试联系facebook 域名服务器的ip地址列表时,无法连接,因为internet上没有facebook 域名服务器的ip地址列表的路由表,facebook域名服务器的ip地址为何从internet全球路由表里消失了,因为facebook网络工程师将它们(185.89.218.0/23和129.134.30.0/23)过滤出去了。
这样1.1.1.1就无法将facebook 域名解析返回给用户,用户就无法访问facebook的网站。
为何facebook全球有30多亿用户,该次事件只影响到其中的8000多万的用户?
如上文所说,域名解析搬运工如1.1.1.1、8.8.8.8,如果成功解析facebook网站的域名,通常会缓存一段时间,这样当下一个用户访问facebook网站时,可以立马将结果返回给用户,这样可以省却不少的时间,同时刷新缓存定时器。
这就意味着,如果一台域名搬运工一直有用户在解析facebook域名,一直在刷新缓存定时器,那么这个缓存一直不会被删除,一直可以被直接返回给用户。所以,即使在互联网无法访问facebook权威域名服务器,但是依靠分布在全球各地的域名解析搬运工的缓存机制,依然有很多用户可以访问facebook网站。毕竟facebook其他服务器是可路由的、是可以到达的!
当然如果有的域名搬运工,缓存的内容由于没有域名解析的刷新,超时最后被删除。当域名搬运工试图联系facebook权威服务器时,就出现问题了。
facebook负责变更bgp的工程师为何不在第一时间做回滚(rollback)操作?
做变更的工程师通常都是远程vpn操作,而做路由变更操作是一种极度高风险的操作,因为一旦路由配置出错,工程师就无法再访问正在远程操作的路由器了。为了保险起见,为了不和路由器失去联系,工程师在commit变更代码时,会使用一个confirm选项,后面跟着一个数字,单位是分钟。比如
commit confirm 2
这条代码的意思是,将当前的修改配置commit, 两分钟之后自动回滚到修改前的版本。在这两分钟内,工程师发现远程ssh软件与路由器的远程ssh连接依然没有断,那么就认为当前的修改没有问题,于是再次使用 commit命令确认当前修改,那么修改的配置就真正的生效了。
相反,如果工程师敲完命令立马自己的远程软件ssh断了,说明当前的修改让路由器与internet失去了联系,路由出问题了。好在这种影响只会影响2分钟,2分钟之后自动回滚到修改前的版本,工程师依然可以再次联系到路由器,检查自己的配置哪里出了问题。
很显然,在这两分钟内facebook工程师没有尝试去ping一下facebook内部权威域名服务器。否则他们一定不会commit这次变更操作。
为了简化操作,工程师在等待confirm 的时间内,可以使用自动化的脚本,将公司内部最关键的服务器ping一遍,其中包括域名服务器、域控制器、时间服务器等等,确保它们全部没有问题再commit配置版本。
源:车小胖谈网络
1、相关新闻 据bbc等媒体报道,utc时间2021年10月4日15时39分(即北京时间10月4日23时39分),社交网络facebook及其子公司messenger、instagram和whatsapp全球无法使用长达7个小时。
facebook在其twitter中发表官方声明“our engineering teams have learned that configuration changes on the backbone routers that coordinate network traffic between our data centers caused issues that interrupted this communication. this disruption to network traffic had a cascading effect on the way our data centers communicate, bringing our services to a halt” (翻译:调度数据中心之间流量的骨干网路由器配置变化造成了这次通讯中断。这种网络流量中断对数据中心的通信产生了连锁效应,最终导致我们服务宕机。)
可以看出官方的答复并没有很清楚地说明错误原因。因此我们复盘给出宕机事故的根本原因。
2、downdetector监测到facebook网络波动
图1 downdetector监测到facebook网络波动
downdetector网站通过收集社交网络中的中断信息来推断断网,如图1所示。downdetector在edt时间的10月4日11时44分(即北京时间10月4日23时44分)检测到facebook网络波动问题,具体原因没有说明。
3、facebook和whatsapp服务中断原因分析
facebook的as为as32934,whatsapp的as为as11917。
北京时间10月5日凌晨0时(utc时间10月4日16时整)观察到facebook(as32934)出现网络波动,其prefix数量和ip数量都有所减少。直到北京时间10月5日早上7时整,prefix数量和ip数量恢复,如图2所示。其中,prefix数量由10月4日23时30分的129个减少为10月5日0时的103个,prefix数量减少了26个,共计5,888个ip。丢失ip块明细如下:
129.134.25.0/24、129.134.26.0/24、129.134.27.0/24、129.134.28.0/24、129.134.29.0/24、129.134.30.0/23、129.134.30.0/24、129.134.31.0/24、129.134.65.0/24、129.134.66.0/24、129.134.67.0/24、129.134.68.0/24、129.134.69.0/24、129.134.70.0/24、129.134.71.0/24、129.134.72.0/24、129.134.73.0/24、129.134.74.0/24、129.134.75.0/24、129.134.76.0/24、129.134.79.0/24、157.240.207.0/24、185.89.218.0/23、185.89.218.0/24、185.89.219.0/24、69.171.250.0/24
?图2 网动仪捕获到facebook(as32934)有明显波动情况发生
facebook有4个权威dns服务器,分别是a.ns.facebook (129.134.30.12)、b.ns.facebook (129.134.31.12)、c.ns.facebook (185.89.218.12)和d.ns.facebook (185.89.219.12),4个dns服务器ip都在丢失的ip块中。
因此,这次故障的原因是调度数据中心之间网络流量的骨干路由器配置更改导致边界网关协议撤销了facebook自治域as32934下包含facebook域名服务器ip的ip地址块,抹去了facebook需要的dns路由信息,紧接着dns服务器离线,用户无法解析facebook和相关域名并访问服务。
同时,在北京时间10月5日凌晨0时开始也监控到了whatsapp(as11917)下所有prefix、ip和路径的丢失,如图3所示。
图3 网动仪捕获到whatsapp (as11917)有明显波动情况发生
whatsapp服务也无法访问的原因是:在2019年facebook 合并旗下所有服务并实现集中化,使公司可以统一了解用户的互联网使用习惯。但是,这也使得本次单点故障影响了整个facebook服务体系。
综上所述,埃文科技网动议捕获到facebook的as32934和whatsapp的as11917的网络波动,波动时间也与新闻报道的facebook断网时间吻合。服务中断原因是主干路由器上的配置更改导致边界网关协议(bgp) 撤销了托管facebook域名服务器的ip地址前缀,进而引发的一系列服务异常。
检查hosts文件是否设置过ipv6之类的。
还没有评论,来说两句吧...