BGPのトラブル【CCNPレベル】解答と解説

(所属カテゴリー:IPルーティング | シスコ---投稿日時:2009年12月 4日)

解答

R1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ip route 2.2.2.2 255.255.255.255 10.1.1.2
ip route 2.2.2.2 255.255.255.255 10.2.2.2

router bgp 1
 neighbor 2.2.2.2 update-source loopback0
 neighbor 2.2.2.2 ebgp-multihop
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


R2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ip route 1.1.1.1 255.255.255.255 10.1.1.1
ip route 1.1.1.1 255.255.255.255 10.2.2.1

router bgp 2
 neighbor 1.1.1.1 update-source loopback0
 neighbor 1.1.1.1 ebgp-multihop
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

解説

EBGPネイバーは、直接接続のIPアドレスを利用して確立することが一般的です。直接接続のIPアドレスを利用していれば、あまり難しいことは考えなくても大丈夫です。普通にneighbor remote-asコマンドでお互いの直接接続のIPアドレスを指定すれば、問題なくネイバーを確立できます。
ところが、直接接続ではないIPアドレスでEBGPネイバーを確立するときには、単にneighbor remote-asコマンドだけ設定してもネイバーがEstablished状態になりません。

直接接続ではないIPアドレスでEBGPネイバーを確立するときには、次の3点に注意してください。

  1. 相手のIPアドレスへルーティング可能であること
  2. 送信元IPアドレスを相手が指定したネイバーのIPアドレスと一致させること
  3. TTLを増やすこと

以降では、この3点についてどのように設定すればいいかを見ていきます。

1.相手のIPアドレスへルーティング可能であること

まず、相手のIPアドレスへルーティングできなければ話になりません。BGPでは、指定したネイバーのIPアドレスに対してまずTCPコネクションを確立します。ネイバーのIPアドレスへルーティングできなければTCPコネクションの確立すらできなくなってしまいます。
AS間ではOSPFなどのルーティングプロトコルを利用することは、あまりないのでスタティックルートの設定を行います。R1、R2が2本のシリアルリンクで接続されているので、お互いのLoopback0へのスタティックルートを2つずつ設定して、ロードバランスできるようにします。

R1 スタティックルートの設定
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ip route 2.2.2.2 255.255.255.255 10.1.1.2
ip route 2.2.2.2 255.255.255.255 10.2.2.2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

R2 スタティックルートの設定
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ip route 1.1.1.1 255.255.255.255 10.1.1.1
ip route 1.1.1.1 255.255.255.255 10.2.2.1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

スタティックルートを設定したあとのR1、R2のルーティングテーブルは次のようになります。

R1 show ip route
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
R1#show ip route
~省略~

Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
     2.0.0.0/32 is subnetted, 1 subnets
S       2.2.2.2 [1/0] via 10.2.2.2
                [1/0] via 10.1.1.2
     10.0.0.0/24 is subnetted, 2 subnets
C       10.2.2.0 is directly connected, Serial1/1
C       10.1.1.0 is directly connected, Serial1/0
C    192.168.1.0/24 is directly connected, FastEthernet0/0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

R2 show ip route
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
R1#show ip route
~省略~

Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
S       1.1.1.1 [1/0] via 10.2.2.1
                [1/0] via 10.1.1.1
     2.0.0.0/32 is subnetted, 1 subnets
C       2.2.2.2 is directly connected, Loopback0
     10.0.0.0/24 is subnetted, 2 subnets
C       10.2.2.0 is directly connected, Serial1/1
C       10.1.1.0 is directly connected, Serial1/0
C    192.168.2.0/24 is directly connected, FastEthernet0/0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.送信元IPアドレスを相手が指定したネイバーのIPアドレスと一致させること

BGPネイバーを確立するには、受信したBGPパケットの送信元IPアドレスが自身で設定しているネイバーのIPアドレスと一致しなければいけません。お互いが正しくネイバーとして相手を認識していることを確認しています。デフォルトでは、BGPパケットの送信元IPアドレスはパケットを出力するインタフェースのIPアドレスとなります。すると、Loopback0のIPアドレスを利用してネイバーを確立しようとしても、送信元IPアドレスの不一致でネイバーの確立ができません。
このようなとき、neighbor update-sourceコマンドを使います。ネイバーに送信するBGPパケットの送信元IPアドレスとして、指定したインタフェースのIPアドレスを利用します。

※ネイバーの確認はAS番号の一致でも行っています。

次のようにR1とR2で、それぞれが送信するBGPパケットの送信元IPアドレスをLoopback0のIPアドレスにします。

R1 BGPパケットの送信元IPアドレスをLoopback0に
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
router bgp 1
 neighbor 2.2.2.2 update-source loopback0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

R2 BGPパケットの送信元IPアドレスをLoopback0に
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
router bgp 2
 neighbor 1.1.1.1 update-source loopback0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

なお、送信元IPアドレスの不一致でネイバーを確立できないとき、ネイバーのステータスはずっと「Active」状態のままになります。

3.TTLを増やすこと

ここまでの1.および2.については、EBGPネイバーもIBGPネイバーも共通の注意点です。EBGPネイバーでもIBGPネイバーでも直接接続ではないIPアドレスを利用するときに、1.および2.について注意しなければいけません。3.のTTLを増やすのは、EBGPネイバーを直接接続ではないIPアドレスで確立するときに考慮しなければいけない注意点です。IBGPネイバーの場合は関係ありません。

EBGPネイバーは直接接続のIPアドレスを利用して確立することを前提としています。そのため、EBGPネイバーへ送信するBGPパケットのIPヘッダのTTLは1となっています。TTLが1では直接接続ではないインタフェースに到達できません。そのため、直接接続のIPアドレスのEBGPネイバーへBGPパケットを送信するためには、IPヘッダのTTLを増やさなければいけません。そのためのコマンドがneighbor ebgp-multihopコマンドです。R1とR2でそれぞれ次のようにneighbor ebgp-multihopコマンドを設定します。

R1 2.2.2.2あてのBGPパケットのTTLを増やす
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
router bgp 1
 neighbor 2.2.2.2 ebgp-multihop
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

R2 1.1.1.1あてのBGPパケットのTTLを増やす
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
router bgp 2
 neighbor 1.1.1.1 ebgp-multihop
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

なお、IBGPネイバーの場合は直接接続ではないIPアドレスを利用することが前提です。IBGPネイバーへ送信するBGPパケットのTTLは255です。また、Ciscoルータでは直接接続のIPアドレスのEBGPネイバーで上記のneighbor ebgp-multihopコマンドが設定されていなければ、そもそもBGPパケットを送信しなくなります。その結果、ネイバーのステータスはずっと「Idle」のままになってしまいます。

1.~3.までの設定を追加すると、R1とR2間でのEBGPネイバーがEstablished状態になります。

R1 BGPネイバーの確認 show ip bgp summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
R1#sh ip bgp summary
BGP router identifier 1.1.1.1, local AS number 1
BGP table version is 1, main routing table version 1

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
2.2.2.2         4     2       4       4        1    0    0 00:00:07        0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

R2 BGPネイバーの確認 show ip bgp summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
R2#show ip bgp summary
BGP router identifier 2.2.2.2, local AS number 2
BGP table version is 1, main routing table version 1

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
1.1.1.1         4     1       4       4        1    0    0 00:00:52        0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Google
Web n-study.com

各コンテンツの最新記事

有料コンテンツライブラリ(ITエンジニア教育資料)

ネットワーク技術雑誌レビュー

ベンダ資格受験記

オススメ!ネットワーク技術雑誌・書籍

MindMapでおべんきょ

結果を出せるコーチング

Geneのつぶやき

The Power of Words

スポンサードリンク

スポンサードリンク