BGPピアリングはトランスポート層でTCP(ポート179)を使用します。このため、OSPFなどのマルチキャストベースのプロトコルと異なり、BGPネイバーは直接接続されている必要がありません。
BGPの可用性と冗長性を高めるため、一般的にループバックインタフェース間でピアリングを行う設計が推奨されています。この際、送信元IPアドレスを指定するために、update-source
コマンドが使われます。
eBGPでの送信元インタフェース変更
最初に、外部BGP(eBGP)ピアリングでループバックアドレスを使用する場合の設定を見ていきます。
R1(config)#router bgp 1 R1(config-router)#neighbor 2.2.2.2 remote-as 23 R1(config-router)#neighbor 2.2.2.2 update-source loopback 0
R2(config)#router bgp 23 R2(config-router)#neighbor 1.1.1.1 remote-as 1 R2(config-router)#neighbor 1.1.1.1 update-source loopback 0
上記の設定は、R1とR2のループバックインタフェースを送信元にして、ピアリングを確立するためのものです。しかし、このままではネイバーがアップしません。これは、各ルータが相手のループバックアドレスへの到達性を持っていないためです。
R1#sh ip bgp summary
BGP router identifier 1.1.1.1, local AS number 1
BGP table version is 3, main routing table version 3
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
2.2.2.2 4 23 0 0 1 0 0 never Idle
トラブルシューティング:ループバックへのスタティックルートの追加
それぞれのルータに対して、スタティックルートを設定してみましょう。
R1(config)#ip route 2.2.2.2 255.255.255.255 192.168.12.2
R2(config)#ip route 1.1.1.1 255.255.255.255 192.168.12.1
これで到達性が確保されたはずですが、依然としてネイバーはアップしません。
この原因は、eBGPがデフォルトでTTL (Time To Live) = 1 を使用し、直接接続されたネイバーのみとピアリングを試みるためです。ループバックアドレスのように直接接続されていないアドレスに対しては、ebgp-multihop
コマンドを使用してTTLを増やす必要があります。
R1(config)#router bgp 1 R1(config-router)#neighbor 2.2.2.2 ebgp-multihop
R1にこの設定を加えると、R1からTCP 179番ポートを使用してセッションの試みが始まります。しかし、R2側でebgp-multihop
が設定されていないため、TCP RST(リセット)が送信され、セッションは確立しません。
R2にも同様に設定を行います。
R2(config)#router bgp 23 R2(config-router)#neighbor 1.1.1.1 ebgp-multihop
これで、BGPセッションが確立され、ネイバーがアップします。
R1# *Apr 26 06:35:00.613: %BGP-5-ADJCHANGE: neighbor 2.2.2.2 Up
Wiresharkなどのパケットキャプチャツールで確認すると、TTLがデフォルトの1から255に変更されていることが分かります。
iBGPでの送信元インタフェース変更
次に、内部BGP(iBGP)でループバックアドレスを送信元とする設定例を確認します。iBGPでは、デフォルトでTTLが255であるため、ebgp-multihop
のようなマルチホップ設定は不要です。
R2(config)#router bgp 23 R2(config-router)#neighbor 3.3.3.3 remote-as 23 R2(config-router)#neighbor 3.3.3.3 update-source loopback 0
R3(config)#router bgp 23 R3(config-router)#neighbor 2.2.2.2 remote-as 23 R3(config-router)#neighbor 2.2.2.2 update-source loopback 0
iBGPの場合、TTLが255であるため、マルチホップ設定は不要ですが、各ルータのループバックアドレスへの到達性を確保するためにスタティックルートを追加します。
R2(config)#ip route 3.3.3.3 255.255.255.255 192.168.23.3
R3(config)#ip route 2.2.2.2 255.255.255.255 192.168.23.2
数秒後、ネイバーがアップします。
R2# *Apr 26 06:49:50.618: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Up
まとめ
BGPピアリングでループバックインタフェースを使用する場合、eBGPではebgp-multihop
コマンドが必要であること、iBGPではTTLのデフォルトが255であり追加設定が不要であることが重要なポイントです。
また、ループバック間でのピアリングを行うことで、物理インタフェース障害時にもピアリングの維持が可能になり、ネットワーク全体の可用性が向上します。
その他 BGP関連記事は >> ルーティングプロトコル(BGP)まとめ << より参照できます。
コメント