2009年3月5日 星期四

網路是很脆弱滴 @ 小隔間裡的人生
Internet 的興起靠的是大家都能亂搞,但是最終把 Internet 搞爛也是因為大家都在亂搞。

今天看到一則有趣的新聞,講的是發生在幾天前的一次網路大爆炸事件;故事很長,有興趣的人請直接參考這篇和這篇 (後面的 comments 很重要,一定要看),不想看那麼多英文字的人可以參考我下面講的超精簡版 :p

故 事的起源是某捷克 ISP SuproNet 買了某拉脫維亞網路設備廠商 MikroTik 的 router,為了要設 backup 所以打算照 convention 在丟給 backup ISP 的 AS-PATH 上面把自己的 ASN 多設幾次,此時出現了第一個錯誤:系統要求使用者輸入 "重複次數" 的地方他輸入成自己的 ASN (47868);這本來其實也沒什麼,不過無巧不巧的是堵到第二個錯誤:MikroTik 的 router 說最大重複次數是 16,但是它沒檢查你輸入的值就直接拿去用了,在這裡它是用一個 U8 來存的,所以得到的值是 252 (= 47868 % 256);上面兩件事碰在一起,這其實也沒什麼,常常有人在設錯,只不過這次很衰的是又碰上第三個錯誤:Cisco router 也有 bug,在碰到長度超過 256 的 AS-PATH 時會 reset BGP connection,252 再加上本來就有的 4 個 ASN 就超過 256 然後觸發自爆指令,一時之間全球網路上沒有設定好的 border router 就一直送 BGP update,據統計約是每秒 10 萬次左右,這誰也頂不住啊 XD (以上看不懂的人請參考 RFC 4271。)

這些其實都是可以預防的。首先,第一個輸入錯誤基 本上可以藉由訓練和事先規劃來避免 (至少我之前還在種花的時候所看到的每次改接都需要事先提出改接計畫書、大規模改接前也有演練);再來,第二個錯誤早在先前的版本裡面就已經修掉了,會發 生這個錯誤顯然是因為沒換新版本;最後的第三個錯誤確實是 Cisco 的 bug (spec 並沒有規定 AS-PATH 不能超過 256 個…),但是如果網管人員有確實設定 bgp maxas-limit 的話也不會爆炸。只能說,這次實在是太帶賽了,剛好讓這些因素全部撞在一起… *boom*

從這個事件可以看得出來,其實網路是很脆弱的 (到底當初設計的時候說要能撐得過核彈攻擊是誰唬爛的 ? XD),隨便一個非網路核心的國家的一個 ISP 的一個小工程師打錯一個指令就能把它給毀了 XD 而且,這種事還不是第一次發生,去年也有過一次類似的事件 (這裡有中文簡介),但是規模小很多,只有毀了 YouTube 而已 :p 我們能做什麼呢 ? 其實沒辦法做什麼,只能好好祈禱下次不要那麼註死、要是不小心碰到了的話網管也要能快速排除 (在這兩次事件中網管的表現都還蠻不錯的,差不多兩三個小時就搞定了)。

PS. 有兩張圖很有趣,值得特別提出來。第一張是網路爆炸的災情圖,作者打趣地說這張圖某種程度上代表了 Cisco router 的佔有率 XD

沒有留言: