Closed33

CCNP-ENARSI_BGP

ito_110ito_110

BGP(Border Gateway Protocol)

AS間で経路情報を交換する動的ルーティングプロトコル

  • BGP-4がほぼ唯一のEGPとなっている(BGPはEGPの一種)
  • 各ASにはIANA(Internet Assigned Numbers Authority)からASN(AS Number:AS番号)が設定される
    • このASNによって経路決定される
  • BGPでは「経路情報(NLRI:Network Layer Reachability Information)の広告」を扱い、IGPのような自動ネイバ探索は実施しない
    • 基本的に手動で設定する
  • BGPにはメトリックが存在しない
    • 代わりに経路情報に付加された様々な情報を元に最適な経路を選択する = パス属性(Path Attribute)とよぶ。
  • TCP(ポート:179)を利用するので信頼性が高い
  • 使用するデータベースは「ネイバーテーブル」 「BGPテーブル」 「ルーティングテーブル」の3種類
    • ピアから受信したルート情報はBGPテーブルに格納される
    • ピアにアドバタイズするルート情報は BGPテーブルに格納されている中の最適パスのみ
    • ルーティングテーブルに格納するのは BGPテーブルに格納されている中の最適パスのみ
  • 自身で生成した経路のNext Hopは「0.0.0.0」になる
  • トリガーアップデートを行う
ito_110ito_110

iBGPとeBGP

BGPにて経路情報の広告をする相手は主に下記の2点

iBGP(Internal BGP)

  • 同一ASのネイバとの経路情報交換に使うBGP
  • AD値は200

eBGP(External BGP)

  • 異なるASのネイバとの経路情報交換に使うBGP
  • AD値は20
ito_110ito_110

BGPの最適パス選択アルゴリズム

下記の優先順位で最適経路を選択する

優先順 属名 説明
1 Weight Cisco独自の設定
ローカルルータ内のみ有効な属性
大きい値が優先
2 Local Preference ASからの出口を示す属性
大きい値が優先
3 ローカルルート ローカルルート
自身で生成したルートが優先される
4 AS_Path 通貨するAS番号が示す属性
最短のルートが優先される
5 Origin ルートの生成元を示す属性
IGP・EGP・incompleteの順で優先
6 MED 外部ASへの入口を示す属性
小さい値が優先
7 ネイバータイプ eBGP・iBGP・ルートの順で優先
8 IGPメトリック 小さい値が優先される
ito_110ito_110

コマンド:BGPの基本的な設定

BGPを有効にする

(config)#router bgp {自身のAS番号}

BGPピアを確立する相手を指定する

(config-router)#neighbor {ネイバのIPアドレス} remote-as {ネイバのAS番号}

ピアに通知する経路情報を指定

(config-router)#network {広告したいネットワークアドレス} [mask {サブネットマスク}]
ito_110ito_110

コマンド:BGPの情報確認

BGPの稼動状態

show ip bgp summary

BGPで扱う経路情報を格納したBGPテーブルを表示

show ip bgp

ルーティングテーブルのBGPで学習した経路情報を表示

show ip route bgp
ito_110ito_110

Next Hopの書き換え動作

Next Hop属性は宛先へ向かうためのネクストホップを示す属性

この属性の動作は以下

  • eBGPピアに経路情報を送る時は、Next Hopを自身のIPアドレスに変更する
  • eBGPピアから送られてきた経路情報をiBGPピアに送る時は、Next Hopを変更しない
ito_110ito_110

BGPピアグループ

同じアウトバウンドポリシー(ルートマップやディストリビュートリストなど)を適用するピアをグループ化する機能

BGPピアグループの特徴やルールは下記

  • ローカルでのみ有効
  • 設定をグループごとにまとめられるので設定効率が上がる
  • UPDATEメッセージがグループごとに生成されるようになるのでルータの負荷が減る
  • アウトバウンドのポリシーは個別に設定できない
  • インバウンドのポリシーは個別にも設定できる
ito_110ito_110

コマンド:BGPピアグループの設定

ピアグループを作成する

(config)#router bgp {AS番号}
(config-router)#neighbor {グループ名} peer-group

ピアグループごとに共通になるパラメータを設定(オプション)

(config-router)#neighbor {グループ名} remote-as {AS番号}
(config-router)#neighbor {グループ名} update-source {インターフェース}
(config-router)#neighbor {グループ名} route-map {ルートマップ名} {in | out}

ピアグループにまとめるピアを指定

(config-router)#neighbor {ピアのIPアドレス} peer-group {グループ名}
  • AS65001
  • RA_Loopback1_1.1.1.1
# BGPピアグループの設定なし
**router bgp 65001

neighbor 2.2.2.2 remote-as 65001
neighbor 3.3.3.3 remote-as 65001
neighbor 4.4.4.4 remote-as 65001
neighbor 2.2.2.2 update-source Loopback1
neighbor 3.3.3.3 update-source Loopback1
neighbor 4.4.4.4 update-source Loopback1
neighbor 2.2.2.2 route-map MAP1 out
neighbor 3.3.3.3 route-map MAP1 out
neighbor 4.4.4.4 route-map MAP1 out**
# BGPグループの設定あり
**router bgp 65001
neighbor group1 peer-group
neighbor group1 remote-as 65001
neighbor group1 update-source Loopback1
neighbor group1 route-map MAP1 out

neighbor 2.2.2.2 peer-group group1
neighbor 3.3.3.3 peer-group group1
neighbor 4.4.4.4 peer-group group1**
ito_110ito_110

BGPのステータス

  • Idle:初期状態
  • Connect:TCP接続の完了を待っている状態
  • Active:TCP接続を開始して、TCP接続の完了を待っている状態
  • Open Sent:BGPピアからのOPENメッセージを待っている状態
  • Open Confirm:BGPピアからのKeepaliveメッセージを待っている状態
  • Established:BGPピアが確立している状態
ito_110ito_110

BGPメッセージ

  • Open:BGPセッションで使用するメッセージ。バージョン番号やAS番号などの基本情報が含まれ、オプション領域にMD5認証値を含むこともできる
  • Notification:BGPセッションのエラー通知に使用するメッセージ
  • Update:経路の追加や削除が発生した場合に送信するメッセージ
  • Keepalive:BGPピア関係維持のために定期的に送信するメッセージ
  • Route Refresh:相手ルータに対し全経路情報を要求するメッセージ
ito_110ito_110

LoopbackをeBGPピアにする際の注意点と解決策

  • 注意点1:直接接続ではないので neighborコマンドで指定するアドレスへの経路がない
    → スタティックルートなどで経路を作成する

  • 注意点2:受信するBGPメッセージの送信元アドレスと neighborコマンドで指定するピアのアドレスが一致しなくなる

    → 「update-source」コマンドで送信元アドレスを変更する

  • 注意点3:eBGPパケットのTTL(time to live)は「デフォルトで1」なので、直接接続していない(コードC以外の)経路にはパケットを送信しない

    → 「ebgp-multihop」コマンドでTTLを変更する(2以上にすることで直接接続していない経路にもパケットを送信するようになる)

    → 「disable-connected-check」コマンドで直接接続していない経路にもパケットを送信させる

ito_110ito_110

BGPの経路集約

BGPテーブルにある経路情報を集約してアドバタイズする

設定コマンド

(config-router)#aggregate-address {集約アドレス} {サブネットマスク} [summary-only] [as-set]
  • summary-only:集約経路のみをアドバタイズ
  • オプション無:個別経路と集約経路の両方をアドバタイズ
  • as-set:集約前のAS_Pathアトリビュートを含む形でアドバタイズ
ito_110ito_110

BGPの自動経路集約

BGPの自動経路集約では、BGPへ再配送されるルートに対して集約される
※networkコマンドで指定したルートなどBGPでアドバタイズするルートが自動集約される訳ではない
※Ciscoの機器ではBGPにおける自動集約がデフォルトで無効

自動集約を有効化

(config)#router bgp {自身のAS番号}
(config-router)#auto-summary

自動集約を無効化

(config)#router bgp {自身のAS番号}
(config-router)#no auto-summary
ito_110ito_110

BGPの認証

BGPはMD5認証をサポート
MD5認証では、パスワードを使用してお互いを認証するので証明書は不要

認証設定コマンド(ピアに設定する場合)

(config-router)#neighbor {IPアドレス}password {パスワード}

認証設定コマンド(ピアグループに設定する場合)

(config-router)#neighbor {グループ名} password {パスワード}
ito_110ito_110

コマンド:BGPで受信するプレフィックス数の制限

(config-router)#neighbor {ネイバのIPアドレス} maximum-prefix {上限値}

上限値を超える数のプレフィックス(経路情報)を受信した場合は、そのネイバとの関係を切断する
プレフィックスを大量に受信することによるメモリ枯渇を防ぐ

ito_110ito_110

AS_Path属性を基にしたフィルタリング

設定コマンド①AS_Path属性を基にしたフィルタリングを行うには「ip as-path access-list」コマンドを使用

(config)#ip as-path access-list {ACL番号} {permit | deny} {正規表現}
  • ACL番号・・・1~500の中から任意の値を指定

正規表現

特殊文字 説明
. 任意の1文字と一致
_ 数字以外の文字と一致
* 直前の文字を0回以上繰り返し
^ 入力した文字列の先頭と一致
$ 入力した文字列の末尾と一致

設定コマンド②AS_Path属性を基にしたフィルタリングは「neighbor filter-list」コマンドで適用

(config-router)#neighbor {ネイバのIPアドレス} filter-list {ACL番号} {in | out}
  • in:BGP経路を受信する時にフィルタリング
  • out:BGP経路を送信する時にフィルタリング
ito_110ito_110

distribute-listを用いたフィルタリング

設定コマンド

(config-router)#neighbor {ネイバのIPアドレス} distribute-list {ACL番号} {in | out}
  • in:BGP経路を受信する時にフィルタリング
  • out:BGP経路を送信する時にフィルタリング
ito_110ito_110

BGPセッションリセットの方法

リセットを行うことで、BGPの設定変更がすぐに反映される
リセットしない場合、パスアトリビュートの変更やプレフィックスリストの変更等を行ってもすぐには反映されない
手法は2種類。ハードリセットとソフトリセット

コマンド:ハードリセット

clear ip bgp *

ハードリセットは再接続に時間がかかる

コマンド:ソフトリセット

clear ip bgp * soft [in|out]
ito_110ito_110

コマンド:BGPアトリビュート変更用ルートマップの設定

(config)#route-map {マップ名} [permit | deny] [シーケンス番号]
(config-router-map)#match {条件}
(config-router-map)#set {動作}
  • マップ名 :任意の名前を入力
  • permit:matchに一致した経路情報に対してsetの動作を適用して送受信する
  • deny:matchに一致した経路情報を送受信しない
  • シーケンス番号 :ルートマップの処理を行う順番(若い番号から順に処理される)
  • match ip address {ACL}:一致条件にACL番号またはACL名を使用する
  • match ip address prefix-list {リスト名}:一致条件にプレフィックスリストを使用する
  • match tag:一致条件にタグを使用する
  • set tag :「match」に一致した経路情報にタグを付ける
  • set as-path prepend {追加したいAS番号}:「match」に一致した経路情報にAS_Path属性を追加で付与する
  • set local-preference {値}:「match」に一致した経路情報のLocal_Preference値を変更する
ito_110ito_110

コマンド:ルートマップの適用

(config)#router bgp {自身のAS番号}
(config-router)#neighbor {ネイバのIPアドレス} route-map {マップ名} [in | out]
ito_110ito_110

コマンド:ネイバー単位でのBGPアトリビュート変更

ネイバー単位でWeightの値を変更する場合、下記のコマンドが必要

(config)#router bgp {自身のAS番号}
(config-router)#neighbor {ネイバのIPアドレス} weight {Weightの値}
ito_110ito_110

Community属性を基にしたルートのグループ化

Communityアトリビュートはパスアトリビュートの一種
ただし、最適パス選択アルゴリズムには使用されない
BGPルートに対してタグ付けを行い、ルートのグループ化に使用される

Community値の付与によりグループ化したルートをBGPピアに通知する設定

# 「AS番号(16ビット)+ 識別子(16ビット)」の形式でCommunity値を設定する場合に使用する
(config)#ip bgp-community new-format

# Community値を通知するコマンド。デフォルトではピアにCommunity値は通知されないためこのコマンドで通知設定が必要
(config)#router bgp {自身のAS番号}
(config-router)#neighbor {ネイバのIPアドレス} send-community

コミュニティ値を付与するルートマップの設定

グループ化したいルートのACLを作成し、ルートマップの条件として使用する

(config)#route-map {マップ名} [permit | deny] [シーケンス番号]
(config-router-map)#match {条件}
(config-router-map)#set community {コミュニティ値}
  • マップ名:任意の名前を入力
  • permit:matchに一致した経路情報に対してsetの動作を適用して送受信する
  • deny:matchに一致した経路情報を送受信しない
  • シーケンス番号:ルートマップの処理を行う順番(若い番号から順に処理される)
  • match ip address {ACL}:一致条件にACL番号またはACL名を使用する
  • コミュニティ値:matchに一致した経路情報にコミュニティ値を追加で付与する

ルートマップの適用

(config)#router bgp {自身のAS番号}
(config-router)#neighbor {ネイバのIPアドレス} route-map {マップ名} [in | out]
ito_110ito_110

ルートリフレクタ(Route Reflector:RR)

ルートリフレクタはiBGPピアから受信したルートを別のiBGPピアに反射する(伝える)機能

iBGPではiBGPスプリットホライズン(iBGPピアから受信した経路情報を他のiBGPピアに伝えない)という働きがあるため、AS内の一部BGPスピーカが経路情報を学習できないという状況が発生する。これを回避するにはフルメッシュにピアを張る(全スピーカと隣接関係を結ぶ)方法があるが、フルメッシュでは帯域消費やルータ負荷の増加といった問題が発生する。

→ ルートリフレクタを使用することでフルメッシュにすることなく iBGPスプリットホライズンの問題を解決できる

ルートリフレクタの動作

ルートリフレクタではBGPスピーカを「ルートリフレクタ」「クライアント」「ノンクライアント」という役割で分ける

以下のルールで動作

  • ルートリフレクタはクライアントから受け取った経路情報をクライアントとノンクライアントに伝える
  • ルートリフレクタはノンクライアントから受け取った経路情報をクライアントに伝える
ito_110ito_110

コマンド:ルートリフレクタの設定

(config)#router bgp {AS番号}
(config-router)#neighbor {IPアドレス | ピアグループ名} route-reflector-client
ito_110ito_110

BGP同期

BGP同期とは、iBGPピアから通知された経路情報は IGPでも通知されるまで使用できないというルール
現在はデフォルトでBGP同期は無効になっている

ito_110ito_110

コマンド:BGP同期の有効化・無効化

# BGP同期の有効化
(config-router)#synchronization

# BGP同期の無効化
(config-router)#no synchronization

ito_110ito_110

MP-BGP(Multiprotocol BGP)

MP-BGPは、BGPを拡張してIPv4以外に対応できるようにしたプロトコル
IPv6環境やVRFやMPLS-VPNなどで利用される

ito_110ito_110

MP-BGPを使ったIPv6 BGPの基本的な設定

# IPv6を有効にする
(config)#ipv6 unicast-routing
# BGPを有効にする
(config)#router bgp {自身のAS番号}
# ルータIDを設定する
(config-router)#bgp router-id {IPv4アドレス形式}
# BGPピアを確立する相手を指定する
(config-router)#neighbor {ネイバのIPアドレス} remote-as {ネイバのAS番号}
# IPv4アドレスファミリの無効化
(config-router)#no bgp default ipv4-unicast
# address-familyモードへの移行
(config-router)#address-family ipv6 [vrf vrf名] [unicast | multicast | vpnv6]
  • unicast :IPv6ユニキャストルーティングを利用する場合に指定。省略した場合、デフォルトで「unicast」となる。
  • multicast:IPv6マルチキャストアドレスプレフィックスを利用する場合に指定
  • vpnv6:MPLS-VPNでMP-BGPを利用する場合に指定
# ピアとの情報交換の有効化
(config-router-af)#neighbor {ネイバのIPアドレス} activate
# ピアに通知する経路情報を指定
(config-router-af)#network {広告したいネットワークアドレス}
ito_110ito_110

ASの接続種類

ASは接続状態により「スタブAS」 「トランジットAS」 「非トランジットAS」に分類される

  • スタブAS:1つのASとだけ接続しているAS(シングルホームASとも呼ばれる)
  • トランジットAS:複数のASと接続し、他ASのトラフィックが通過するAS(マルチホームトランジットASとも呼ばれる)
  • 非トランジットAS:複数のASと接続しているが、他ASのトラフィックが通過しないAS(マルチホーム非トランジットASとも呼ばれる)
ito_110ito_110

RIB-failure

ベストパスとなっているBGPルートがルーティングテーブル(RIB)にないと発生するエラー
スタティックルートの重複や記載なしなどが主な要因

ito_110ito_110

eBGPにおけるループ回避

自身と同じAS番号の場合は破棄する

このAS番号の破棄を無効化するには下記のコマンドが必要

# allowas-inの有効化
(config)#router bgp {自ASN}
(config-router)#neighbor {ネイバーのIPアドレス} allowas-in

指定したネイバーからの経路情報に自身のAS番号が含まれても、それを破棄せずに学習するようになる
ito_110ito_110

ダミーのAS_pathの設定方法

AS65040からAS65010宛のパケットをAS65030を経由するように設定する

# ダミーASPATHを設定する
RB(config)#route-map ASPATH permit 10
RB(config-route-map)#set as-path prepend 65020
# 各コマンドの解説

**RB(config)#route-map ASPATH permit 10**
route-map:route-mapコマンド
ASPATH:ルートマップの名前
permit 10:シーケンス番号の設定

**RB(config-route-map)#set as-path prepend 65020**
as-path prepend 65020:ASパス属性を追加

RBにダミーASPATHを設定することで、最短で通信できるAS65030を選択するようになる

route-map - match / set commandより引用

ito_110ito_110

ルートリフレクタについて再度まとめ

ルートリフレクタについて理解が浅かったので、再度メモにまとめる

ルートリフレクタとは?

iBGPのルート情報を別のiBGPへ伝達する機能

なぜルートリフレクタは必要?

前提として、iBGPには「iBGPスプリットホライゾン」が存在する
iBGPスプリットホライゾンは「iBGPのルート情報を別のiBGPへ伝達しないようにする」機能であり、通信のループ防止が目的

このiBGPスプリットホライゾンを回避するにはフルメッシュにピアを張るというような手法が存在するが、この方法では「帯域消費」・「ルータ負荷の増加」というような問題が発生する

このフルメッシュの問題を回避しつつルート情報を伝達させるためにルートリフレクタが存在する

このスクラップは2024/03/10にクローズされました