BGPの基本設定

BGPの基本設定の流れは、次の通りです。

  1. BGPのルーティングプロセスの有効化
  2. ネイバーの設定
  3. BGPルートの生成

BGPルーティングプロセスの有効化

BGPの設定では、最初にBGPルーティングプロセスを有効化します。グローバルコンフィグレーションモードで次のコマンドを入力します。

BGPルーティングプロセスの有効化

(config)#router bgp <AS>
(config-router)#

<AS> : AS番号

BGPルーティングプロセスは一つしか有効にできません。

BGPネイバーの設定

次に、BGPでルート情報を交換するBGPネイバーを設定します。OSPFなどのIGPと異なりBGPでは、ネイバーを明示的に手動で設定します。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ネイバーの条件
図 BGPネイバーの条件

なお、BGPメッセージの宛先IPアドレスは、neighbor remote-asコマンドで指定したIPアドレスです。送信元IPアドレスは、出力インタフェースのIPアドレスを利用します。IBGPネイバーの場合、BGPメッセージの送信元IPアドレスとして利用するインタフェースを変更しなければいけないことがあります。送信元IPアドレスとして利用するインタフェースを変更する場合は、neighbor update-sourceコマンドを使います。

BGPルートの生成

BGPネイバーを設定すれば、そのネイバーからBGPルートを受信できます。そして、さらに他のBGPネイバーにBGPルートをアドバタイズすることが可能です。

EBGPネイバーに対してのみこのような動作が可能です。IBGPネイバーに対してはスプリットホライズンのルールにより動作は異なります。

他のASから受信したルートをアドバタイズするだけでなく、自AS内のネットワークのルート情報をBGPルートとして生成するためには、次の3通りの方法があります。

  • networkコマンド
  • AS内のIGPから再配送
  • aggregate-addressコマンド

これらのいずれか、あるいはいくつかを組み合わせて、自AS内のルートをBGPで他のASにアドバタイズすることができます。ルートのアドバタイズはBGPテーブル上のベストパスのみです。つまり、自AS内のルートをBGPでアドバタイズするということは、BGPテーブルにアドバタイズしたいルート情報を載せてベストパスにすると言い換えることができます。

networkコマンド

BGPでアドバタイズするルート情報を生成するコマンドがnetworkコマンドです。BGPのコンフィグレーションモードで次のように入力します。

BGPルート生成 networkコマンド

(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のルート情報を生成できます。

図 networkコマンドによるBGPルートの生成例
図 networkコマンドによるBGPルートの生成例

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アトリビュート:空白
Well known Mandatoryのアトリビュート以外にMEDも付加されます。MEDはルーティングテーブル上の該当ルートのメトリックです。

AS内のIGPから再配送

networkコマンドによるBGPルートの生成は1つずつ設定しなければいけません。生成したいBGPルートが100個あるとすると、networkコマンドも100個設定しなければいけません。これは非常に手間になってしまいます。そこで、BGPルートを一括で生成するためにAS内のIGPから再配送を行います。BGPへの再配送は、BGPのコンフィグレーションモードでredistributeコマンドを利用します。

BGPルート生成 AS内のIGPから再配送

(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テーブルに登録している例です。

図 AS内のIGPから再配送
図 AS内のIGPから再配送
図ではOSPF LSDBを簡略化しています。LSDBには必ずしもネットワークアドレス/サブネットマスクのフォーマットで登録されているわけではありません。

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のコンフィグレーションモードで次のコマンドを利用します。

BGPルート生成 aggregate-addressコマンド

(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_HOP212.12.8.254192.10.32.254
MED00
LOCAL_PREFERENCEなしなし
WEIGHT0250
AS_PATH1 2001 200
ORIGINii
表 2.0.0.0/8 に対するBGPルート

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の仕組み