BGPのピア確立と経路選択
BGP は TCP セッション上でピアを確立し、属性付きの経路情報を交換し、ベストパスを選んで RIB へ反映する。
BGP は OSPF や EIGRP のようにリンク上の Hello だけで隣接ルータを自動発見するわけではない。基本的には、相手の IP アドレスと AS 番号を明示的に設定し、TCP 179 上で BGP セッションを確立する。
neighborを設定 ↓TCP 179で接続 ↓OPENメッセージでAS番号や能力を確認 ↓BGPセッションがEstablishedになる ↓UPDATEで経路と属性を交換 ↓インポートポリシーを適用 ↓ベストパス選択 ↓RIBへ投入 ↓エクスポートポリシーを適用して他ピアへ広告BGP では「受け取った経路を全部使う」「使う経路を全部広告する」とは限らない。どの経路を受け入れるか、どの経路を優先するか、どの経路を広告するかをポリシーで制御する。
ピア確立で確認されること
Section titled “ピア確立で確認されること”BGP ピアが Established になるには、主に次の条件が必要になる。
| 項目 | 意味 |
|---|---|
| 到達性 | neighbor の IP アドレスへ TCP 接続できる |
| remote-as | 相手の AS 番号が設定と一致する |
| local address | 送信元 IP が相手の neighbor 設定と合う |
| 認証 | MD5 などを使う場合、鍵が一致する |
| TTL | eBGP で直接接続でない場合、ebgp-multihop などが必要 |
| address-family | IPv4 / IPv6 など、使う AF が有効になっている |
Cisco IOS / IOS XE では、IPv4 unicast だけの基本構成なら neighbor は通常 IPv4 unicast で自動的に有効になる。no bgp default ipv4-unicast を使う場合は、IPv4 unicast も自動では有効にならない。そのため、IPv4 と IPv6 の両方を扱う構成では、address-family ごとに neighbor ... activate を入れて、その neighbor をどの AF で使うのかを明示する。
BGP セッションを張る neighbor アドレスと、交換する経路の address-family は分けて考える。IPv4 と IPv6 の両方の経路を交換する場合でも、BGP セッション自体は IPv4 アドレスで張ることも、IPv6 アドレスで張ることもできる。ただし、IPv4 neighbor で IPv6 unicast AF を有効化するような構成では、IPv6 NLRI の NEXT_HOP が実際に到達可能な IPv6 アドレスになっているかを必ず確認する。NEXT_HOP が解決できないと、BGP table には見えても RIB に入らない。
iBGP は、物理インターフェースのアドレスではなく Loopback アドレス同士でピアを張ることが多い。Loopback は物理リンクの up/down に直接引きずられないため、IGP などで Loopback への到達性を確保しておけば、特定リンクの障害だけで BGP neighbor アドレスが変わりにくい。ただし、Loopback を BGP の送信元にするには update-source Loopback0 が必要になる。
BGPの状態
Section titled “BGPの状態”代表的な状態は次のとおり。
| 状態 | 意味 |
|---|---|
| Idle | BGP セッションを開始していない |
| Connect | TCP 接続を試みている |
| Active | TCP 接続を再試行している |
| OpenSent | OPEN メッセージを送信済み |
| OpenConfirm | KEEPALIVE 待ち |
| Established | 経路交換できる状態 |
Active は「正常に動いている」という意味ではない。TCP 接続や相手設定に問題があると Active で止まることがある。
BGP は UPDATE メッセージで経路情報を送る。
UPDATE には、主に次の情報が含まれる。
| 情報 | 内容 |
|---|---|
| NLRI | 宛先プレフィックス |
| Path Attributes | AS_PATH、NEXT_HOP、LOCAL_PREF などの属性 |
| Withdrawn Routes | 取り消す経路 |
BGP の経路は、宛先プレフィックスだけではなく属性とセットで意味を持つ。
ベストパス選択
Section titled “ベストパス選択”BGP は同じ宛先に複数の経路候補がある場合、属性に基づいてベストパスを選ぶ。
代表的な判断材料は次のとおり。
| 属性 | 考え方 |
|---|---|
| Weight | Cisco ローカルの優先値。大きい方を優先 |
| LOCAL_PREF | AS 内の出口選択。大きい方を優先 |
| Local originate | 自分で生成した経路を優先 |
| AS_PATH | 短い方を優先 |
| ORIGIN | IGP、EGP、Incomplete の順で優先 |
| MED | 通常は同じ隣接 AS から受信した経路同士で比較し、小さい方を優先 |
| eBGP / iBGP | eBGP 経路を iBGP 経路より優先 |
| IGP metric to NEXT_HOP | NEXT_HOP までの IGP metric が小さい方を優先 |
MED は、異なる隣接 AS から受信した経路間では通常比較されない。そのため、異なる AS から受け取った経路へ MED を設定しても、期待どおりに優先経路が変わらないことがある。Cisco IOS / IOS XE で比較範囲を変える場合は bgp always-compare-med などの設定が関係するため、show bgp で候補経路の受信元 AS と属性を確認する。
実装や設定により詳細な順序は変わることがある。重要なのは、BGP が単純な最短経路プロトコルではなく、属性とポリシーで経路を選ぶという点である。
RIBへ入る条件
Section titled “RIBへ入る条件”BGP がベストパスを選んでも、必ずルーティングテーブルへ入るとは限らない。
主な条件は次のとおり。
- NEXT_HOP に到達できる
- 同じ宛先により優先される Administrative Distance の経路がない
- 受信ポリシーで拒否されていない
- aggregate や dampening などの制御で抑制されていない
BGP の show bgp に経路が見えていても、show ip route に入っていない場合は、NEXT_HOP 到達性と Administrative Distance を確認する。
広告の考え方
Section titled “広告の考え方”BGP では、ベストパスを選んだあと、広告ポリシーに従って他のピアへ経路を送る。
特に iBGP には、iBGP で学習した経路を別の iBGP ピアへ広告しないという制約がある。そのため、大規模な AS では Route Reflector などが必要になる。
よくある確認コマンド
Section titled “よくある確認コマンド”show ip bgp summaryshow bgp ipv4 unicastshow ip route bgpshow ip bgp neighborsIPv6 では次を使う。
show bgp ipv6 unicast summaryshow bgp ipv6 unicastshow ipv6 route bgp