概要

EBGPネイバーを確立するための設定について、設定ミスの切り分けと修正を行います。

ネットワーク構成

下記のネットワーク構成で、R1とR2間でEBGPネイバーを確立しようとしています。

図 BGP設定ミスの切り分けと修正 Part1 ネットワーク構成
図 BGP設定ミスの切り分けと修正 Part1 ネットワーク構成

設定の概要

R1およびR2で、次のようにEBGPネイバーをお互いのLoopback0のIPアドレスで確立する設定を行いました。

R1

interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface FastEthernet0/0
 ip address 192.168.1.1 255.255.255.0
!
interface Serial1/0
 ip address 10.1.1.1 255.255.255.0
!
interface Serial1/1
 ip address 10.2.2.1 255.255.255.0
!
router bgp 1
 no synchronization
 bgp log-neighbor-changes
 neighbor 2.2.2.2 remote-as 2
 no auto-summary

R2

interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!
interface FastEthernet0/0
 ip address 192.168.2.2 255.255.255.0
!
interface Serial1/0
 ip address 10.1.1.2 255.255.255.0
!
interface Serial1/1
 ip address 10.2.2.2 255.255.255.0
!
router bgp 2
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.1.1.1 remote-as 1
 no auto-summary

上記のようにEBGPネイバーの設定を行ったのですが、R1とR2間のEBGPネイバーはいつまで経っても確立されません。R1でshow ip bgp summaryを見ると、ずっとIdle状態のままです。

R1 show ip bgp summary

R1#show 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       0       0        0    0    0 never    Idle

問題

  • EBGPネイバーがIdle状態でとどまってしまう原因はなんですか?
  • 解決するためにはどのように設定をすればよいですか?

解答

EBGPネイバーがIdle状態でとどまってしまう原因はなんですか?

  • お互いのLoopback0のIPアドレスに対する接続性がない
  • BGPメッセージの送信元IPアドレスをLoopback0に変更していない
  • BGPメッセージのTTL値が1のままになっている

解決するためにはどのように設定すればよいですか?

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

R2#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

なお、BGPメッセージの送信元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


BGPの仕組み