AS_PATHプリペンド
BGPで経路を広告するときに、AS_PATH属性に自分のAS番号をわざと複数回付け加えて、経路を長く見せる手法。相手のASに、その経路を選ばれにくくし、通信の入口を制御する。
イマシルちゃんの解説
BGPのルータは、道を選ぶとき、「通ってきた国(AS)の数が少ない道」を優先するんだ。
そこで、使ってほしくない道のほうには、自分の国の名前を何回も書いて、「この道は遠いよ」って見せかけるんだよ。
すると、相手はもう一方の近く見える道を選んでくれる。
本当は同じ距離なのに、ちょっとした演出で、通ってほしい道をお願いできるんだ!
より深い解説
定義
AS_PATHは、BGPの経路情報に含まれるパス属性の1つで、その経路が通ってきたASの番号の並びを表す。BGPのルータは、ほかの条件が同じなら、AS_PATHの短い経路を優先する。AS_PATHプリペンドは、経路を広告するときにAS_PATHの先頭に自分のAS番号を余分に追加して、AS_PATHを長くする設定である。
例
AS 65001 が、2本の回線(ルータR1、R2)で、相手のASと接続している場合
| 広告するルータ | 広告するAS_PATH | 長さ |
|---|---|---|
| R1(主回線) | 65001 | 1 |
| R2(副回線) | 65001 65001 65001 | 3 |
相手のASは、AS_PATHが短いR1からの経路を選ぶ。R1との接続が切れると、R2からの経路だけが残るため、R2が使われる。このように、副回線として使いたいルータからの広告のAS_PATHを、主回線より長くすることで、主・副の関係を作れる。
「出口」と「入口」の制御
| 制御したいもの | 主な方法 |
|---|---|
| 自分のASから出ていく通信の経路 | LOCAL_PREF(自AS内で、どの出口を優先するかを決める) |
| 相手のASから自分のASに入ってくる通信の経路 | AS_PATHプリペンド、MED |
AS_PATHプリペンドは、自分では直接決められない「相手からの通信がどちらの回線を通るか」に影響を与えるための手段である。ただし、最終的にどの経路を選ぶかは相手のASのポリシー次第であり、相手がLOCAL_PREFなどで別の判断をすれば、意図どおりにならないこともある。
経路選択の主な順序(一般的な実装)
AS_PATHの長さは、LOCAL_PREFの次に比べられる、影響の大きい属性である。
午後での問われ方
「通常は一方のルータで通信し、使えないときはもう一方を使う」という冗長構成で、副系のルータが広告するAS_PATH長を、主系と比べてどうするかが問われる。答えは、副系のほうを長くする、である。