目次
BGPの基本設定
BGPの基本設定の流れは、次の通りです。
- BGPのルーティングプロセスの有効化
- ネイバーの設定
- BGPルートの生成
BGPルーティングプロセスの有効化
BGPの設定では、最初にBGPルーティングプロセスを有効化します。グローバルコンフィグレーションモードで次のコマンドを入力します。
(config)#router bgp <AS>
(config-router)#
<AS> : AS番号
BGPルーティングプロセスは一つしか有効にできません。
BGPネイバーの設定
次に、BGPでルート情報を交換するBGPネイバーを設定します。OSPFなどのIGPと異なりBGPでは、ネイバーを明示的に手動で設定します。BGPのコンフィグレーションモードで次のコマンドを入力します。
(config)#router bgp <AS1>
(config-router)#neighbor <ip-address> remote-as <AS2>
<AS1> : 自身のAS番号
<ip-address> : ネイバーのIPアドレス
<AS2> : ネイバーのAS番号
EBGPネイバー、IBGPネイバーはrouter bgpコマンドのAS番号とneighbor remote-asコマンドのAS番号によって決まります。
- EBGPネイバー
- router bgpのAS番号≠neighbor remote-asのAS番号
- IBGPネイバー
- router bgpのAS番号=neighbor remote-asのAS番号
BGPネイバーの設定は、ネイバーを確立する両方のルータで認識を合わせて設定しなければいけません。ネイバーを確立するためには、受信したBGP OPENメッセージの送信元IPアドレスとAS番号がneighbor remote-asコマンドで指定したネイバーのIPアドレスとAS番号に一致していないといけません。その様子を表したものが次の図です。
なお、BGPメッセージの宛先IPアドレスは、neighbor remote-asコマンドで指定したIPアドレスです。送信元IPアドレスは、出力インタフェースのIPアドレスを利用します。IBGPネイバーの場合、BGPメッセージの送信元IPアドレスとして利用するインタフェースを変更しなければいけないことがあります。送信元IPアドレスとして利用するインタフェースを変更する場合は、neighbor update-sourceコマンドを使います。
BGPルートの生成
BGPネイバーを設定すれば、そのネイバーからBGPルートを受信できます。そして、さらに他のBGPネイバーにBGPルートをアドバタイズすることが可能です。
他のASから受信したルートをアドバタイズするだけでなく、自AS内のネットワークのルート情報をBGPルートとして生成するためには、次の3通りの方法があります。
- networkコマンド
- AS内のIGPから再配送
- aggregate-addressコマンド
これらのいずれか、あるいはいくつかを組み合わせて、自AS内のルートをBGPで他のASにアドバタイズすることができます。ルートのアドバタイズはBGPテーブル上のベストパスのみです。つまり、自AS内のルートをBGPでアドバタイズするということは、BGPテーブルにアドバタイズしたいルート情報を載せてベストパスにすると言い換えることができます。
networkコマンド
BGPでアドバタイズするルート情報を生成するコマンドがnetworkコマンドです。BGPのコンフィグレーションモードで次のように入力します。
(config)#router bgp <AS>
(config-router)#network <address> [mask <subnetmask>]
<address> : ネットワークアドレス
<subnetmask> : サブネットマスク
networkコマンドにより、指定したルート情報をBGPテーブルに載せてベストパスとします。maskのオプションは、サブネッティングもしくは集約されている場合に必要です。クラスフルなネットワークアドレスの場合は、maskオプションは必要ありません。
上記のBGPのnetworkコマンドが機能するためには、条件があります。すなわち、「networkコマンドで指定したルート情報と完全に一致するルート情報がルーティングテーブルに存在していることが必要である」という条件です。ルートの情報源は何でも構いません。OSPFやEIGRPなどのIGPでもスタティックルートでも直接接続でも構いません。「完全に一致」しているルート情報が必要なので注意してください。
逆に言えば、ルーティングテーブルに載ってさえいれば、そのルータに直接接続されていないネットワークのルート情報であってもBGPルートとして生成することができます。以下の図でR1には100.0.0.0/8のネットワークは直接接続されていません。ですが、R1のルーティングテーブルに100.0.0.0/8が登録されていれば、networkコマンドでBGPルートとして100.0.0.0/8のルート情報を生成できます。
OSPFやRIP、EIGRPなどのIGPでもnetworkコマンドを使いますが、BGPのnetworkコマンドとは全く意味が異なりますので注意してください。IGPのnetworkコマンドはルーティングプロトコルを動作させるインタフェースを指定するためのコマンドです。そのため、ルータに直接接続されているネットワークアドレスを指定します。一方、BGPはBGPでアドバタイズしたいルート情報を指定するためのコマンドです。ルータに直接接続されているネットワークアドレスを指定する必要はありません。
networkコマンドで生成したBGPルート情報にはWell known Mandatoryのパスアトリビュートが付加されます。デフォルトのWell known Mandatoryのパスアトリビュートは次の通りです。
- ORIGINアトリビュート:「i (IGP)」
- NEXT_HOPアトリビュート:「0.0.0.0」またはルーティングテーブル上のIGPルートのネクストホップ
- AS_PATHアトリビュート:空白
AS内のIGPから再配送
networkコマンドによるBGPルートの生成は1つずつ設定しなければいけません。生成したいBGPルートが100個あるとすると、networkコマンドも100個設定しなければいけません。これは非常に手間になってしまいます。そこで、BGPルートを一括で生成するためにAS内のIGPから再配送を行います。BGPへの再配送は、BGPのコンフィグレーションモードでredistributeコマンドを利用します。
(config)#router bgp <AS>
(config-router)#redistribute <protocol> route-map <route-map-name>
<AS> : AS番号
<protocol> : 再配送元のルーティングプロセス
<route-map-name> : 適用するルートマップ名
以下の図のR1は、100.1.1.0/24~100.1.10.0/24の10個のOSPFルートを一括してBGPルートとしてBGPテーブルに登録している例です。
redistributeコマンドで生成したBGPルートに付加されるWell known Mandatoryのパスアトリビュートは以下の通りです。
- ORIGINアトリビュート:「? (Incomplete)」
- NEXT_HOPアトリビュート:「0.0.0.0」またはルーティングテーブル上のIGPルートのネクストホップ
- AS_PATHアトリビュート:空白
ORIGINが「? (Incomplete)」となってしまうことに注意が必要です。ORIGINが「?」のままで他のASにBGPルートをアドバタイズするのは、望ましくありません。再配送時にルートマップを適用して生成するBGPルートのORIGINを「?」から「i」に変更する設定を行うのが一般的です。また、再配送元のIGPルートをすべてBGPルートとして生成するわけはありません。再配送するときに、ルートマップでフィルタして、BGPルートとして生成したいルートのみとします。
再配送については、以下の記事をご覧ください。
ルートマップについては、以下の記事をご覧ください。
aggregate-addressコマンド
aggregate-addressコマンドは、BGPの集約ルートを生成するためのコマンドです。複数のBGPルートを集約したBGPルートを生成することができます。BGPのコンフィグレーションモードで次のコマンドを利用します。
(config)#router bgp <AS>
(config-router)#aggregate-address <network-address> <subnet-mask>
<AS> : AS番号
<network-address> : 集約ルートのネットワークアドレス
<subnet-mask> : 集約ルートのサブネットマスク
aggregate-addressコマンドで指定したルートがBGPテーブルに載せられベストパスとなり、他のBGPネイバーにアドバタイズされます。ただし、aggregate-addressコマンドを利用するための条件は、集約ルートの範囲に含まれるBGPルートが少なくともひとつBGPテーブルに存在していることです。
aggregate-addressコマンドの詳細は、以下の記事をご覧ください。
BGPの設定確認
BGPの設定確認には、次のshowコマンドを利用します。
- show ip protocols
- show ip bgp summary
- show ip bgp
- show ip route bgp
show ip protocols
show ip protocolsコマンドはルータに設定されているルーティングプロトコル全般の概要を確認するためのコマンドです。BGPの概要として、次のような内容を確認できます。
- AS番号
- 設定しているネイバー
- ネイバーに対して適用しているフィルタ
Router#show ip protocols Routing Protocol is "bgp 8127" Outgoing update filter list for all interfaces is not set Incoming update filter list for all interfaces is not set IGP synchronization is disabled Automatic route summarization is disabled Neighbor(s): Address FiltIn FiltOut DistIn DistOut Weight RouteMap 161.8.17.2 192.10.32.254 1 WEIGHT 212.12.8.254 Maximum path: 1 Routing Information Sources: Gateway Distance Last Update 192.10.32.254 20 01:46:22 212.12.8.254 20 00:26:17 161.8.17.2 200 00:18:58 Distance: external 20 internal 200 local 200
show ip bgp summary
show ip bgp summaryコマンドは、BGPテーブルのサマリーを表示します。その表示の最後でBGPネイバーの状態を確認することができます。
R1#show ip bgp summary BGP router identifier 203.8.1.1, local AS number 8127 BGP table version is 87, main routing table version 87 41 network entries using 4141 bytes of memory 70 path entries using 3360 bytes of memory 10 BGP path attribute entries using 600 bytes of memory 1 BGP rrinfo entries using 24 bytes of memory 5 BGP AS-PATH entries using 120 bytes of memory 1 BGP community entries using 24 bytes of memory 0 BGP route-map cache entries using 0 bytes of memory 4 BGP filter-list cache entries using 48 bytes of memory BGP using 8317 total bytes of memory BGP activity 77/36 prefixes, 107/37 paths, scan interval 60 secs Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 161.8.17.2 4 8127 188 180 87 0 0 01:49:03 10 192.10.32.254 4 1 179 161 87 0 0 01:48:46 29 212.12.8.254 4 1 49 50 87 0 0 00:26:19 30
BGPネイバーが正常に稼働しているかどうかは、表示の右端の「State/PfxRcd」の部分をみます。この部分が数字になっていれば、BGPネイバーはEstablished状態です。数字は、該当のネイバーから受信したBGPルートの数です。
なお、show ip bgp summaryではBGPネイバーの概要だけしかわかりません。BGPネイバーの詳細な情報を確認したいときは、show ip bgp neighborコマンドを使います。
show ip bgp
show ip bgpコマンドはBGPテーブルを確認するためのコマンドです。BGPネイバーから受信したルート情報、およびBGPネイバーにアドバタイズするルート情報はすべてBGPテーブルに格納されます。
R1#show ip bgp BGP table version is 87, local router ID is 203.8.1.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * 2.0.0.0 212.12.8.254 0 0 1 200 i *> 192.10.32.254 0 250 1 200 i *> 3.0.0.0 212.12.8.254 0 0 1 500 400 300 i * 4.0.0.0 212.12.8.254 0 0 1 i *> 192.10.32.254 0 250 1 i * 5.0.0.0 212.12.8.254 0 0 1 i *> 192.10.32.254 0 250 1 i * 6.0.0.0/23 212.12.8.254 0 0 1 i *> 192.10.32.254 0 250 1 i
BGPルート情報にはパスアトリビュートが付加されています。show ip bgpコマンドでは、BGPルート情報ごとに次のパスアトリビュートを確認できます。
- NEXT_HOPアトリビュート (出力例のNext hopの列)
- MEDアトリビュート (出力例の Metricの列)
- LOCAL_PREFERENCEアトリビュート (出力例のLocPrfの列)
- WEIGHTアトリビュート (出力例のWeightの列)
- AS_PATHアトリビュート (出力例のPathの列)
- ORIGINアトリビュート (出力例のPathの右端の文字)
また、ベストパスは「>」で表されます。たとえば、上の出力例で2.0.0.0/8というネットワークアドレスに対して次の2つのルート情報があります。
パスアトリビュート | ルート情報1 | ルート情報2 |
NEXT_HOP | 212.12.8.254 | 192.10.32.254 |
MED | 0 | 0 |
LOCAL_PREFERENCE | なし | なし |
WEIGHT | 0 | 250 |
AS_PATH | 1 200 | 1 200 |
ORIGIN | i | i |
2.0.0.0/8に対する2つのルート情報のうち、ルート情報2の方がベストパスとして選ばれています。この例では、WEIGHTアトリビュートによってベストパスが決定されています。WEIGHTアトリビュートはCisco独自のアトリビュートです。ルータローカルで利用し、BGPルートに付加されません。
各ルート情報に付加されているすべてのパスアトリビュートを確認したいときは、show ip bgp <prefix>コマンドで個別のルート情報を指定してください。
show ip bgpコマンドではBGPテーブル全体を表示します。ここから特定のネイバーと送受信したBGPルートのみを抽出するには、次のshowコマンドを使います。
- show ip bgp neighbor <ip-address> advertised-routes
- 指定したBGPネイバーにアドバタイズしたBGPルート情報のみを表示
- show ip bgp neighbor <ip-address> routes
- 指定したBGPネイバーから受信したBGPルート情報のみを表示
show ip route bgp
show ip route bgpコマンドでは、ルーティングテーブルのルート情報のうちBGPで学習したものだけを表示することができます。BGPのルート情報は、「B」というコードで表されます。また、BGPのアドミニストレイティブディスタンスは、EBGPルートが20でIBGPルートが200です。
BGPの仕組み
- BGPの概要 ~AS間でルート情報を交換~
- BGPの動作
- BGPの基本設定と確認コマンド
- BGPピアグループ(Peer Group) ~ネイバーの設定をまとめよう~
- BGPネイバーの状態
- BGPコンフェデレーションの設定
- BGPコンフェデレーションの設定例
- BGPネイバー認証
- BGP Well Known Mandatory アトリビュート -ORIGIN/AS_PATH/NEXT_HOP-
- 図解!BGPベストパス選択アルゴリズム
- BGP 基本的な設定についての演習[Cisco]
- BGPの基本的な設定についての演習 ~トラブルシュート~
- BGP KEEPALIVEタイマ/ホールドタイムの設定
- BGPルート 最小送信間隔の設定
- BGPルートダンプニング
- マルチホーム – インターネット接続の冗長化 –
- マルチホームAS BGPルートフィルタのポイント
- マルチホームAS ベストパス選択のポイント
- マルチホームAS IGPとBGPの連携のポイント
- マルチホームAS BGPの設定例
- IP-VPNでのBGPの利用 設定例
- BGPルートフィルタの種類
- BGPルートフィルタ -ディストリビュートリスト-
- BGPルートフィルタ -ディストリビュートリスト設定例-
- BGPルートフィルタ -プレフィクスリスト-
- BGPルートフィルタ -プレフィクスリスト設定例-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)設定例-
- BGPルートフィルタ -ルートマップ(route-map)-
- BGPルートフィルタ -ルートマップ(route-map)設定例-
- BGP neighbor allowas-inコマンド
- BGP neighbor as-overrideコマンド
- BGPルート RIB Failure
- BGPルート アドミニストレイティブディスタンスの制御
- BGPルートの負荷分散
- BGPルート 条件付き生成
- BGPルート 条件付きアドバタイズ
- BGP ルート集約 自動集約
- BGPルート集約 networkコマンドによる集約
- BGPルート集約 networkコマンドによる集約 設定例
- BGP ルート集約 aggregate-addressコマンドによる集約
- aggregate-addressコマンドのオプション summary-only
- aggregate-addressコマンドのオプション attribute-map
- aggregate-addressコマンドのオプション as-set
- aggregate-addressコマンドのオプション advertise-map
- aggregate-addressコマンド as-set/attribute-map/advertise-map 設定例
- BGP選択型集約の概要
- BGP選択型集約 suppress-map
- BGP選択型集約 unsuppress-map
- BGP 選択型集約 suppress-map/unsuppress-map 設定例
- BGP local-as ~ネイバーに他のASのように見せる~
- BGP neighbor remove-private-ASコマンド
- bgp fast external-fallover
- BGP プレフィクス数の制限
- BGP COMMUNITYアトリビュートの使い方
- BGP Well-known COMMUNITYのルートフィルタ設定例
- BGP プライベートCOMMUNITYによるルート制御の設定例
- [演習]BGP応用 Part1:BGP基本設定
- [演習]BGP応用 Part2:ルート集約
- [演習]BGP応用 Part3:ポリシーベースルーティング
- [演習]BGP応用 Part4:トラブルシューティング
- BGP 設定ミスの切り分けと修正 Part1
- BGP 設定ミスの切り分けと修正 Part2
- BGP 設定ミスの切り分けと修正 Part3
- BGP 設定ミスの切り分けと修正 Part4
- BGP 設定ミスの切り分けと修正 Part5
- BGP 設定ミスの切り分けと修正 Part6
- BGP 設定ミスの切り分けと修正 Part7
- IPv6 BGPの設定例 Part1
- IPv6 BGPの設定例 Part2
- 2021年10月4日 Facebookに何が起こったか?
- IPv4 BGPネイバーでのIPv6プレフィックスの交換