BGP(Border Gateway Protocol)は、異なるAS(自律システム)間で経路情報を交換する際に使われる重要なプロトコルです。このブログでは、特に内部BGP(iBGP)の動作確認について、Ciscoルータを使った設定手順を解説します。
BGPとピアリングの基本
BGPを使用するルータ同士はピアリング(隣接関係の確立)を行い、経路情報を交換します。BGPはTCPのポート179を使い、TCPセッションを確立してピアリングを実現します。このため、ピアリングするルータ間はTCPセッションが確立できるよう、ネットワーク的に接続されていることが前提です。
BGPには、異なるAS間で行われる外部BGP(eBGP)と、同じAS内で行われる内部BGP(iBGP)があります。本記事では、同じAS内のiBGPピアリングにフォーカスして、ルータ間での接続確認方法を解説します。
直接接続リンク間でのピアリング
まず、直接接続されたリンク(例:192.168.12.0/24)を使って、iBGPピアリングを行います。設定の流れは以下の通りです。
ステップ1:BGP設定
ルータのBGPプロセスを起動し、相手ルータとのネイバーを設定します。
R1(config)#router bgp 12 R1(config-router)#neighbor 192.168.12.2 remote-as 12
R2(config)#router bgp 12 R2(config-router)#neighbor 192.168.12.1 remote-as 12
この時、AS番号を指定し、neighborコマンドでピアのIPアドレスとAS番号を明示的に設定します。自動でネイバーを検出する機能はBGPにはありません。
ステップ2:ピアリングの確認
ピアリングが正常に確立されると、以下のようなログが表示されます。
R1# *Apr 26 03:13:00.720: %BGP-5-ADJCHANGE: neighbor 192.168.12.2 Up
ピアリングの確認 – show ip bgp neighborsコマンド
BGPピアリングが確立されたかどうかは、show ip bgp neighborsコマンドを使って確認することができます。このコマンドは、BGP隣接ルータとのセッション状態や詳細なネゴシエーション情報を表示するために使用されます。
以下は、R1から隣接ルータR2(IP: 192.168.12.2)とのピアリングを確認する例です。
R1#show ip bgp neighbors 192.168.12.2 BGP neighbor is 192.168.12.2, remote AS 12, internal link BGP version 4, remote router ID 2.2.2.2 BGP state = Established, up for 00:06:00 Last read 00:00:20, last write 00:00:32, hold time is 180, keepalive interval is 60 seconds
- BGP neighbor is 192.168.12.2 :隣接しているBGPピアのIPアドレス(192.168.12.2)を示しています。
- remote AS 12 :ピアリングしている隣接ルータが属しているAS番号(12)です。内部BGP(iBGP)の場合、AS番号は両ルータで同一である必要があります。
- BGP version 4 :BGPのバージョンを表します。BGPはバージョン4が現在広く使用されている標準です。
- BGP state = Established :Established状態は、BGPセッションが正常に確立されたことを意味します。この状態になると、経路情報の交換が開始されます。他の状態(例えばIdleやActive)は問題がある可能性を示します。
- Up for 00:06:00 :ピアリングが確立されてからの経過時間を示します。セッションが長時間安定していることが、信頼性の指標となります。
- Hold time is 180, keepalive interval is 60 seconds :BGPピア間での通信確認に使われるHoldタイムとKeepalive間隔を示しています。Holdタイムは、BGPメッセージが受信されなくなるとセッションが切れるまでの時間です(通常180秒)。Keepalive間隔は、ピアに対して生存確認のメッセージを送信する間隔で、通常60秒です。
ピアリング状態のサマリ – show ip bgp summaryコマンド
BGPの隣接関係と、現在のピアリング状態をサマリで確認するためには、show ip bgp summaryコマンドが便利です。このコマンドでは、BGPセッションの簡単な状態や、各ピアから学習したプレフィックス数などが表示されます。
R1#show ip bgp summary BGP router identifier 1.1.1.1, local AS number 12 BGP table version is 2, main routing table version 2 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.12.2 4 12 46 45 2 0 0 00:38:01 0
- BGP router identifier 1.1.1.1 :ルータIDは、BGPのピアリングにおいて一意に識別されるIDです。通常、最も高いループバックアドレスか、ルータに設定されたIPアドレスが使用されます。
- local AS number 12 :このルータが所属しているAS番号です。
- Neighbor :隣接ルータのIPアドレスを示しています。この例では192.168.12.2がピアリングしている隣接ルータです。
- V :BGPのバージョン番号です。この場合は「4」です。
- AS :隣接ルータが所属するAS番号です。内部BGPなので、自ルータと同じ12が表示されています。
- MsgRcvd / MsgSent :MsgRcvdは隣接ルータから受信したBGPメッセージ数、MsgSentは送信したメッセージ数を示します。この数値が継続的に増加していることは、正常にBGPメッセージがやり取りされていることを示します。
- TblVer :BGPルーティングテーブルのバージョンです。これは、BGP経路が変更された際に更新されるバージョン番号です。
- InQ / OutQ :BGPメッセージの受信キュー(InQ)と送信キュー(OutQ)の数です。通常、これらの値は「0」であることが望ましいです。数値が0でない場合、ピアとのメッセージ交換が正常に行われていない可能性があります。
- Up/Down :ピアリングが確立してからの時間です。この時間が継続的に伸びている場合、ピアリングが安定していることを示します。
- State/PfxRcd :Stateは、隣接ルータのBGPセッションの状態を表します。隣接ルータから受信したプレフィックスの数を示します。この例では「0」が表示され、R1はR2から0つの経路(プレフィックス)を学習していることがわかります。(要は経路は学習していません)
学習したプレフィックスの確認 – show ip bgpコマンド
最後に、show ip bgpコマンドを使って、実際にBGPで学習した経路(プレフィックス)を確認します。
その前に、networkコマンドを使用してR2のループバックアドレスをR1へアドバタイズします。BGPでプレフィックスをアドバタイズする場合は、アドバタイズするネットワークとサブネットマスクは正確に設定する必要があります。
R2(config)#router bgp 12 R2(config-router)#network 2.2.2.2 mask 255.255.255.255
すると、R1でR2のループバックアドレスを学習します。それでは、show ip bgpコマンドを実行します。
R1#show ip bgp
BGP table version is 2, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*>i 2.2.2.2/32 192.168.12.2 0 100 0 i
- Network :学習したネットワークプレフィックスです。ここではR2のループバックアドレス(2.2.2.2/32)を学習しています。
- Next Hop :このプレフィックスに到達するための次のホップのIPアドレスです。ここでは192.168.12.2が次のホップとして表示されています。
- Metric / LocPrf / Weight :経路の優先度を決定するための各種メトリックです。内部BGPの場合、通常はデフォルト値が設定されます。
- Path :Origin属性。networkコマンドにより学習したルートのため、IGP(i) と学習しています。
ループバックアドレス間でのピアリング
GPはTCPを使用するため、ルータ間の物理的な接続(直接接続リンク)に依存しません。BGPピアリングの可用性や冗長性を高めるため、ループバックアドレス間でピアリングすることが一般的です。
ステップ1:ループバックアドレス間のピアリング設定
以下の手順で、ループバックアドレス間でのピアリングを設定します。各ルータで静的ルートを設定し、相手のループバックアドレスへの経路を定義します。
R1(config)#ip route 2.2.2.2 255.255.255.255 192.168.12.2
R1(config)#router bgp 12
R1(config-router)#neighbor 2.2.2.2 remote-as 12
R1(config-router)#neighbor 2.2.2.2 update-source loopback 0
R2(config)#ip route 1.1.1.1 255.255.255.255 192.168.12.1
R2(config)#router bgp 12
R2(config-router)#neighbor 1.1.1.1 remote-as 12
R2(config-router)#neighbor 1.1.1.1 update-source loopback 0
update-source loopbackコマンドで、ループバックインターフェースをピアリングの送信元アドレスに設定します。
ステップ2:ピアリングの確認
設定が正しければ、ルータ間でピアリングが確立され、次のようなログが出力されます。
R1(config)# *May 31 10:26:51.426: %BGP-5-ADJCHANGE: neighbor 2.2.2.2 Up
これにより、ループバックアドレス間のピアリングが成功し、BGP経路情報の交換が可能となります。
まとめ
内部BGP(iBGP)のピアリングは、直接接続リンクやループバックアドレスを使って柔軟に設定でき、冗長性や可用性を向上させることができます。BGPのピアリング状態や学習したプレフィックスを確認するコマンドも動作確認時に使用するとよいです。
その他 BGP関連記事は >> ルーティングプロトコル(BGP)まとめ << より参照できます。
コメント