変更要約: 初版
3.6eBGPとポリシーベースルーティング
AS間を結ぶeBGP(AD 20・TCP 179・直接接続ネイバー)の隣接確立条件と、ベストパス選択アルゴリズム(Weight→LOCAL_PREF→自発経路→AS_PATH最短→ORIGIN→MED→eBGP優先→IGPメトリック)の順序、そして宛先以外の条件で経路を上書きするPBR(ポリシーベースルーティング)を、「なぜこの経路が選ばれたか」「どの属性を触れば意図した経路になるか」という判断として学びます。
BGPはIGPと発想が根本的に違います。IGPが「最短経路を計算する」ことを目的とするのに対し、BGPは組織のポリシー(どのISPを優先するか、どのトラフィックをどこへ流すか)を経路属性で表現するためのプロトコルです。したがってBGPのトラブルシュートは「なぜ最短でない経路が選ばれたのか」ではなく、ベストパス選択アルゴリズムのどの段で決着がついたのかを追う作業になります。この節ではその選択順序を実務の意図(インバウンド/アウトバウンドのどちらを制御したいか)と結びつけ、さらにBGPでは表現しきれない要件に応えるPBRを扱います。
3.6.1eBGPセッションの確立
- BGPはTCP 179番上で動作し、隣接は自動発見されず
neighbor <ip> remote-as <as>で明示的に指定する。異なるAS番号を指定すればeBGP(AD 20)、同じAS番号ならiBGP(AD 200)となる。ADの差から分かるとおり、eBGP経路はIGPよりも優先される(OSPF 110やEIGRP 90より小さい)。 - eBGPの既定は直接接続の隣接を前提とし、TTL 1でパケットを送る。したがってループバックアドレス同士でピアリングする場合は、
neighbor <ip> ebgp-multihop 2とneighbor <ip> update-source Loopback0の両方が必要になる(前者でTTLを延ばし、後者で送信元アドレスを相手の期待値に合わせる)。片方だけではセッションがActiveのまま上がらない。 - セッション状態は
show ip bgp summaryで読む。Idleが続くなら相手IPへの到達性やAS番号の設定違い、Activeを繰り返すならTCP 179への到達不可(ACL/ファイアウォール遮断・update-source不整合)、Establishedなら正常でPfxRcd(受信プレフィクス数)が意味を持つ。経路が入らない場合、まずセッションが上がっているかを確認するのが鉄則。
3.6.2ベストパス選択アルゴリズム
- 前提として、ネクストホップが到達可能でない経路は候補にすらならない(
show ip bgpで>が付かない)。この確認を飛ばして属性をいじり続けるのが最も多い遠回りである。候補が複数あるときに初めて、以下の順で上から比較して決着する。 - 順序は(1)Weightが最大(Cisco独自・そのルータ内のみ有効で伝播しない)→(2)LOCAL_PREFが最大(AS内全体に伝播しアウトバウンドの出口選択を統一する)→(3)自ルータで生成した経路→(4)AS_PATHが最短→(5)ORIGINが最良(IGP < EGP < incomplete)→(6)MEDが最小(隣接ASに対して入口の希望を伝える)→(7)eBGPをiBGPより優先→(8)ネクストホップへのIGPメトリックが最小→以降は古いeBGP経路・ルータIDが小さい方など。
- 制御したい方向で使う属性が決まるのが実務の核心。アウトバウンド(自ASからの出方)は自分で決められるので
LOCAL_PREFが第一選択(1ルータだけならweight)。インバウンド(相手ASからの入り方)は相手の判断次第なので、こちらからできるのはAS_PATH prependで自経路をわざと長く見せる、MEDで希望を伝える(ただし相手が尊重するとは限らない)といった間接的な誘導に限られる。
3.6.3PBR(ポリシーベースルーティング)
- 通常のルーティングは宛先アドレスのみで転送先を決める。PBRはこれを上書きし、送信元アドレス・プロトコル・ポート・パケット長などの条件で転送先を変えられる。「経理部のサブネットからの通信だけ専用の暗号化回線へ」「バックアップトラフィックだけ安価な回線へ」といった、宛先では表現できない要件に応える手段である。
- 構成はルートマップで行い、
match ip address <ACL>で対象を選びset ip next-hop <ip>(またはset interface)で転送先を指定する。適用は転送してくるパケットが入ってくる側=入力インタフェースにip policy route-map <name>を設定する(出力側ではない点が頻出の誤り)。ルータ自身が生成するパケットに適用するにはip local policy route-map <name>を使う。 - ルートマップは上から順に評価し最初に一致したエントリで確定する。また末尾には暗黙の拒否があるが、PBRにおける「拒否(match しなかった)」は破棄ではなく通常のルーティングにフォールバックすることを意味する。指定したネクストホップがダウンしたときに通常ルーティングへ落とすには
set ip next-hop verify-availabilityを併用する。
「eBGPはAD 20でIGPより優先」「ループバックピアリングにはebgp-multihopとupdate-sourceの両方が必要」「ベストパス順=Weight→LOCAL_PREF→自発→AS_PATH→ORIGIN→MED→eBGP優先→IGPメトリック」「ネクストホップ到達不可なら候補外」「アウトバウンドはLOCAL_PREF・インバウンドはAS_PATH prependやMEDで間接誘導」「PBRは入力インタフェースに適用」が頻出です。制御したい方向から属性を逆引きする練習が効きます。
あなたの組織は2社のISP(ISP-AとISP-B)とeBGPでマルチホーム接続しています。要件は「自社から出ていく(アウトバウンド)通信は帯域の広いISP-Aを優先し、ISP-A障害時のみISP-Bへ切り替わること」です。ところが show ip bgp を見ると、多くの宛先でISP-B経由の経路がベストパス(>)に選ばれています。ここで「ISP-A側のインタフェースコストを下げよう」と考えるのはIGPの発想を持ち込んだ誤りで、BGPのベストパス選択でIGPメトリックが効くのは第8段まで降りてきたときだけです。実際に show ip bgp <prefix> で属性を確認すると、両者ともWeightは0、LOCAL_PREFは既定の100で同じ、自発経路でもなく、AS_PATHの長さでISP-B経由のほうが短かったため第4段で決着していたことが分かりました。要件は「帯域の広いISP-Aを優先」なので、AS_PATHより上位の段で決着をつける必要があります。ここでLOCAL_PREFを使うのが正解です。ISP-Aから受信する経路に route-map で set local-preference 200 を適用すれば、既定100のISP-B経由より上位(第2段)で勝つため、AS_PATHの長短に関係なくISP-Aが選ばれます。weight を使う手もありますが、weightはそのルータ内でしか有効でAS内の他ルータへ伝播しないため、複数の境界ルータを持つ構成では出口の判断がルータごとにばらつくという部分解になります。LOCAL_PREFならAS内全体で統一されるので、この要件には LOCAL_PREF が適切です。次に「外部から自社へ入ってくる(インバウンド)通信もISP-A経由に寄せたい」という追加要件が出ました。ここで LOCAL_PREF を触っても意味がありません——インバウンドの経路選択を行うのは相手側のASだからです。こちらからできるのは、ISP-Bへ広告する自経路に AS_PATH prepend で自ASを複数回付けてわざと長く見せるか、MED で希望を伝えることですが、いずれも相手のポリシー次第で無視され得る間接的な誘導にすぎません。最後に、「経理部サブネットからの通信だけは、宛先に関わらず監査用の専用回線を通したい」という要件が来ました。これは宛先ベースのルーティングでもBGP属性でも表現できないため、PBRの出番です。経理部サブネットを送信元とするACLを作り、route-map で match ip address させて set ip next-hop に専用回線側のアドレスを指定し、経理部のトラフィックが入ってくる入力インタフェースに ip policy route-map を適用します。ここで出力インタフェース側に適用してしまうのが典型的な誤設定で、その場合PBRは一切機能しません。
| 要件 | 使う手段 | 効く範囲・注意 |
|---|---|---|
| アウトバウンドをAS全体で統一 | `LOCAL_PREF`(大きいほど優先) | AS内に伝播。ベストパス第2段で決着 |
| 1台のルータだけで出口を変えたい | `weight`(大きいほど優先) | そのルータ内のみ・伝播しない(第1段) |
| インバウンドを誘導したい | `AS_PATH prepend`/`MED` | 決めるのは相手AS=間接的で無視され得る |
| 宛先以外の条件で経路を変えたい | PBR(route-map+`ip policy`) | **入力インタフェース**に適用。未一致は通常ルーティング |
| 経路が候補に上がらない | ネクストホップ到達性を確認 | 属性調整より先に確認(`show ip bgp`の`>`) |
ひっかけ: 「アウトバウンドをISP-Aに寄せたいので weight を設定すれば十分」は部分解です——weightは設定したルータ内でしか効かず伝播しないため、境界ルータが複数あると出口がばらつきます。AS全体で統一するならLOCAL_PREFです。また「MEDを設定すれば確実にインバウンドを誘導できる」も誤り=MEDは相手ASへの希望の表明にすぎず、相手のポリシーで無視され得ます。PBRを出力インタフェースに適用するのも典型的な誤設定です。
3.6.4この節のまとめ
- eBGPはTCP 179・AD 20でIGPより優先。ループバックピアリングには
ebgp-multihopとupdate-sourceの両方が必要 - ベストパスはWeight→LOCAL_PREF→自発→AS_PATH→ORIGIN→MED→eBGP優先→IGPメトリックの順。前提としてネクストホップ到達性が必要
- アウトバウンドはLOCAL_PREF(AS全体)/weight(1台のみ)、インバウンドはAS_PATH prependやMEDで間接誘導。宛先以外の条件ならPBRを入力インタフェースへ
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 2社のISPとeBGPでマルチホーム接続している。アウトバウンド通信を帯域の広いISP-A経由に統一したいが、`show ip bgp` ではAS_PATHが短いISP-B経由がベストパスに選ばれている。AS内の複数の境界ルータで一貫して同じ判断をさせたい。最も適切な対処はどれか。
Q2. 経理部サブネット(10.10.5.0/24)を送信元とする通信だけを、宛先に関わらず監査用の専用回線(ネクストホップ 172.16.9.2)へ転送したい。他の通信は通常のルーティングテーブルどおりに転送する。設定として最も適切なものはどれか。
Q3. ループバックアドレス同士でeBGPピアリングを構成したが、セッションが `Active` 状態を繰り返し `Established` にならない。両ルータ間のループバック宛の疎通自体はスタティックルートで確保されている。原因として最も可能性が高いものはどれか。

