📑

BGPのlocal prefの設定の重要性

に公開

私が管理しているサービスで起きたネットワーク障害についての雑記です

新たにトランジットを開始(悪夢の始まり)

Vultrにトランジットしようと思い、VultrでVM調達し、BGPのセットアップを完了させた。

ここまでは順調に進んだため、もう全て終わったと思い寝たら、
次の日...

GoogleのAPIを使った機能が使えない?!

翌朝、「GoogleのAPIを使った機能が使えません」と報告が来ていた。
しかし、他に動かしていたDiscord APIを利用するサービスは正常に動作していた。
問題の解決を図るため、GoogleのAPIにtracerouteしたところ...

原因発覚!

traceroute to googleapis.com (142.250.199.110), 30 hops max, 60 byte packets
 1  x.y.z.126 (x.y.z.126)  0.314 ms  0.289 ms  0.273 ms
 2  x.y.z.225 (x.y.z.225)  2.211 ms  2.313 ms  2.338 ms
 3  x.y.z.224 (x.y.z.224)  2.422 ms  2.408 ms  2.434 ms
 4  x.y.z.225 (x.y.z.225)  4.391 ms  4.487 ms  4.468 ms
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * x.y.z.225 (x.y.z.225)  9.650 ms  9.597 ms
11  x.y.z.224 (x.y.z.224)  9.595 ms  9.578 ms  9.677 ms
12  x.y.z.225 (x.y.z.225)  11.484 ms  11.527 ms  11.658 ms
13  x.y.z.224 (x.y.z.224)  11.712 ms  11.743 ms *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * x.y.z.224 (x.y.z.224)  16.560 ms  16.578 ms
20  x.y.z.225 (x.y.z.225)  18.366 ms  18.448 ms  18.423 ms
21  x.y.z.224 (x.y.z.224)  18.457 ms  18.474 ms  18.385 ms
22  x.y.z.225 (x.y.z.225)  20.239 ms  20.242 ms *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * x.y.z.225 (x.y.z.225)  24.467 ms  24.402 ms
29  x.y.z.224 (x.y.z.224)  24.467 ms  24.487 ms  24.503 ms
30  x.y.z.225 (x.y.z.225)  26.208 ms  25.817 ms  26.167 ms

おわかりいただけただろうか?

いわゆるピンポンが起きていたのだ。

本来なら、

「コアルーター」、「エッジルーター」、「グローバル」

という順番で外に出ないといけないはずなのに、

「コアルーター」、「エッジルーター(1)」「エッジルーター(2)」「エッジルーター(1)」「エッジルーター(2)」

という順番になっており、ループしていたのだ...

解決方法

とりあえず、iBGPとeBGPの優先度を明示するようにした。

具体的にいうと、local_prefの数値を指定した。

これは特性上数が大きいものに優先してパケットが流れるようになっているからではないかと私は予想している。

最後に

BGPは本当に複雑だ。でも維持をするのが本当に楽しいのでみんなもやってみよう!

GitHubで編集を提案
Neody

Discussion