解答
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点に注意してください。
- 相手のIPアドレスへルーティング可能であること
- 送信元IPアドレスを相手が指定したネイバーのIPアドレスと一致させること
- 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 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━







