BGP のループバックインタフェース同士によるピア
BGP は他のルーティングプロトコルと同様、BGP 通信を行う IP アドレスがダウンしてしまうと BGP 自体がダウンしてしまいます。例えば Ethernet インタフェースの接触不良が原因でリンク UP/DOWN を繰り返すと BGP 接続が不安定になります。
このようなケースを避けるため、BGP 通信を行う送信元 IP アドレスをループバックアドレスにすることができます。
以下に構成例を示します。ループバックアドレス宛のルートは Static や IGP 等で学習している必要があります。
接続元インタフェースをループバック IF に指定するには neighbor コマンドにて update-source キーワードを使います。
RT1(config)# router bgp 12 RT1(config-router)# neighbor 10.2.2.2 remote-as 12 RT1(config-router)# neighbor 10.2.2.2 update-source loopback 0
iBGP (同一 AS 内の BGP ピア) についてはこのコマンドを互いに指定すれば OK ですが、eBGP のときはこれでは足りません。というのも eBGP の場合は TTL が 1 になるため、ループバックアドレスに辿り着くにはホップ数が足りないからです。
そこで neighbor コマンドにて ebgp-multihop キーワードで TTL を増やします。以下の例では RT2 から RT3 への eBGP に対し、TTL を 2 に増やしています。
RT2(config)# router bgp 12 RT2(config-router)# neighbor 10.3.3.3 remote-as 34 RT2(config-router)# neighbor 10.3.3.3 ebgp-multihop 2 RT2(config-router)# neighbor 10.3.3.3 update-source loopback 0
Loopback 接続を利用した等コスト負荷分散
先程の構成例で RT2 と RT3 の間には 2 つの経路が存在しますが、BGP ピアとしては 1 つだけです。なので RT3 にて BGP テーブルを確認すると、1.1.1.0/24 のルートは1つだけです。
RT3# show ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 10.2.2.2 0 12 i
*>i 4.4.4.0/24 10.4.4.4 0 100 0 i
一方、ルーティングテーブルを見ると NextHop が 10.2.2.2 となっており、10.2.2.2 は Static Route により 10.1.231.2 と 10.1.232.2 の 2 つの経路が存在しています。
RT3# show ip route 1.0.0.0/24 is subnetted, 1 subnets B 1.1.1.0 [20/0] via 10.2.2.2, 00:16:30 4.0.0.0/24 is subnetted, 1 subnets B 4.4.4.0 [200/0] via 10.4.4.4, 00:14:19 10.0.0.0/8 is variably subnetted, 9 subnets, 2 masks C 10.1.34.0/24 is directly connected, GigabitEthernet0/2 L 10.1.34.3/32 is directly connected, GigabitEthernet0/2 C 10.1.231.0/24 is directly connected, GigabitEthernet0/0 L 10.1.231.3/32 is directly connected, GigabitEthernet0/0 C 10.1.232.0/24 is directly connected, GigabitEthernet0/1 L 10.1.232.3/32 is directly connected, GigabitEthernet0/1 S 10.2.2.2/32 [1/0] via 10.1.232.2 [1/0] via 10.1.231.2 C 10.3.3.3/32 is directly connected, Loopback0 S 10.4.4.4/32 [1/0] via 10.1.34.4
このケースでは再帰ルーティングが使われ、1.1.1.0/24 へのルートが負荷分散されます。
動作確認をします。
CEF はデフォルトでは宛先単位で負荷分散されるため、まず RT1 に loopback 2 を作成し、IP として 1.1.2.1/24 を割り当て、BGP で広報します。
RT1(config)# interface loopback 2 RT1(config-if)# ip address 1.1.2.1 255.255.255.0 RT1(config)# router bgp 12 RT1(config-router)# network 1.1.2.0 mask 255.255.255.0
その後、RT4 から 1.1.1.1 と 1.1.2.1 宛に traceroute します。送信元 IP アドレスは BGP で広報されている 4.4.4.4 (Lo 1)を使います。
RT4# traceroute 1.1.1.1 source loop 1 Type escape sequence to abort. Tracing the route to 1.1.1.1 VRF info: (vrf in name/id, vrf out name/id) 1 10.1.34.3 12 msec 17 msec 8 msec 2 10.1.231.2 8 msec 8 msec 18 msec 3 10.1.12.1 14 msec 12 msec 15 msec RT4# traceroute 1.1.2.1 source loop 1 Type escape sequence to abort. Tracing the route to 1.1.2.1 VRF info: (vrf in name/id, vrf out name/id) 1 10.1.34.3 16 msec 11 msec 8 msec 2 10.1.232.2 16 msec 13 msec 17 msec 3 10.1.12.1 12 msec 15 msec 13 msec
2 HOP 目が 10.1.231.2 と 10.1.232.2 で変わっていることが分かります。
コメント