概要

BGPで学習したネットワーク(BGPルート)宛てのパケットを負荷分散することもできます。BGPルートの負荷分散を行うための2つの方法について解説します。

BGPルートの負荷分散

OSPFなどIGPではデフォルトで等コストロードバランスが可能です。あるネットワークに対する等コストのルート情報があれば、複数のルートをルーティングテーブルに登録して負荷分散が可能です。BGPでも負荷分散は可能です。主な方法として、次の2つあります。

  • NEXT_HOPのIPアドレスへのパケットが負荷分散されるようにする
  • ベストパス以外のBGPルートもルーティングテーブルに載せるようにする(maximum-paths)

この2つのBGPルートの負荷分散の方法について解説します。

NEXT_HOPのIPアドレスへの負荷分散

BGPで学習したルート情報のネクストホップは、NEXT_HOPアトリビュートのIPアドレスです。BGPのルート情報でパケットをルーティングするとき、NEXT_HOPアトリビュートのIPアドレスにパケットを転送するために、ルーティングテーブルを再検索します。

そこで、NEXT_HOPアトリビュートのIPアドレスへのルーティングで負荷分散されるようにすれば、BGPルートでの負荷分散が可能です。

図 NEXT_HOPのIPアドレスへの負荷分散の例 1
図 NEXT_HOPのIPアドレスへの負荷分散の例 1

この図は、NEXT_HOPのIPアドレスへの負荷分散の例を表しています。R1とR2がお互いのループバックインタフェースのIPアドレスでネイバーを確立しています。

R1はR2からBGPで100.2.2.0/24のルートを学習しルーティングテーブルに登録しています。そのネクストホップは、2.2.2.2です。2.2.2.2へパケットをルーティングするためのルートをOSPFで学習していて、等コストロードバランスができるようになっています。

図 NEXT_HOPのIPアドレスへの負荷分散の例 2

R1に100.2.2.0/24あてのパケットがやってくると、BGPルート情報にマッチします。そのネクストホップアドレスが2.2.2.2です。ルータは、2.2.2.2に転送するためにルーティングテーブルを再検索します。2.2.2.2へ転送するためのルートは、等コストロードバランスができるようになっているので、結果的に100.2.2.0/24へのルーティングが2つのリンクで負荷分散できるようになります。

このような負荷分散は、IBGPネイバーから学習したルートでもEBGPネイバーから学習したルートでも同じです。

maximum-paths

BGPでは、基本的にベストパスのルート情報のみをルーティングテーブルに載せます。maximum-pathsコマンドによってベストパス以外のルート情報もルーティングテーブルに載せて、負荷分散できるようになります。

maximum-pathsコマンドで複数のBGPルートをルーティングテーブルに登録するためには、各ルートのWEIGHT、LOCAL_PREFERENCE、MED、AS_PATH、ORIGINなどのアトリビュートがすべて同じである必要があります。BGPのアトリビュートは、IGPでのメトリックに相当するので、やはり等コストロードバランスと考えることもできます。

maximum-pathsコマンドの構文は次の通りです。

BGP maximum-pathsコマンド

(config)#router bgp <AS>
(config-rouer)#maximum-paths {1-6}

<AS>: AS番号
{1-6}: ルーティングテーブルに載せるルートの数

maximum-pathsの設定例

図 maximum-paths確認用トポロジ
図 maximum-paths確認用トポロジ

図のネットワーク構成において、R3でmaximum-pathsコマンドの動作について確認します。

maximum-pathsコマンドを設定する前の各ルータのBGPの設定は次の通りです。

R1 BGP設定

router bgp 1
 no synchronization
 bgp log-neighbor-changes
 network 172.16.1.0 mask 255.255.255.0
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 ebgp-multihop 255
 neighbor 3.3.3.3 update-source Loopback0
 no auto-summary

R2 BGP設定

router bgp 1
 no synchronization
 bgp log-neighbor-changes
 network 172.16.1.0 mask 255.255.255.0
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 ebgp-multihop 255
 neighbor 3.3.3.3 update-source Loopback0
 no auto-summary

R3 BGP設定

router bgp 100
 no synchronization
 bgp log-neighbor-changes
 neighbor 1.1.1.1 remote-as 1
 neighbor 1.1.1.1 ebgp-multihop 255
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 2.2.2.2 remote-as 1
 neighbor 2.2.2.2 ebgp-multihop 255
 neighbor 2.2.2.2 update-source Loopback0
 no auto-summary

また、R3のBGPテーブルおよびルーティングテーブルは次の通りです。

R3 BGPテーブル、ルーティングテーブル

R3#show ip bgp
~省略~

   Network          Next Hop            Metric LocPrf Weight Path
*  172.16.1.0/24    2.2.2.2                  0             0 1 i
*>                  1.1.1.1                  0             0 1 i
R3#show ip bgp 172.16.1.0
BGP routing table entry for 172.16.1.0/24, version 2
Paths: (2 available, best #2, table Default-IP-Routing-Table)
  Advertised to non peer-group peers:
  2.2.2.2
  1
    2.2.2.2 (metric 2) from 2.2.2.2 (2.2.2.2)
      Origin IGP, metric 0, localpref 100, valid, external
  1
    1.1.1.1 (metric 2) from 1.1.1.1 (1.1.1.1)
      Origin IGP, metric 0, localpref 100, valid, external, best
R3#show ip route
~省略~

Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
O       1.1.1.1 [110/2] via 192.168.13.1, 00:05:26, FastEthernet0/0
C    192.168.13.0/24 is directly connected, FastEthernet0/0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/2] via 192.168.23.2, 00:05:26, FastEthernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
C       3.3.3.3 is directly connected, Loopback0
     172.16.0.0/24 is subnetted, 1 subnets
B       172.16.1.0 [20/0] via 1.1.1.1, 00:04:28
C    192.168.23.0/24 is directly connected, FastEthernet0/1

R3ではR1から受信したルートがベストパスになっています。これはR1のルータIDがR2のルータIDよりも小さいからです。そして、ベストパスであるR1から受信したルートのみがルーティングテーブルに登録されています。

この状態から、R3でmaximum-pathsコマンドの設定を行います。

R3 maximum-pathsコマンド

router bgp 100
 maximum-paths 2

maximum-pathsコマンド設定後、R3のBGPテーブルおよびルーティングテーブルは次のように変化します。

R3 maximum-pathsコマンド設定後のBGPテーブル、ルーティングテーブル

R3#show ip bgp
~省略~

   Network          Next Hop            Metric LocPrf Weight Path
*  172.16.1.0/24    2.2.2.2                  0             0 1 i
*>                  1.1.1.1                  0             0 1 i
R3#show ip bgp 172.16.1.0
BGP routing table entry for 172.16.1.0/24, version 2
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Multipath: eBGP
  Advertised to non peer-group peers:
  2.2.2.2
  1
    2.2.2.2 (metric 2) from 2.2.2.2 (2.2.2.2)
      Origin IGP, metric 0, localpref 100, valid, external, multipath
  1
    1.1.1.1 (metric 2) from 1.1.1.1 (1.1.1.1)
      Origin IGP, metric 0, localpref 100, valid, external, multipath, best
R3#show ip route
~省略~

Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
O       1.1.1.1 [110/2] via 192.168.13.1, 00:13:42, FastEthernet0/0
C    192.168.13.0/24 is directly connected, FastEthernet0/0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/2] via 192.168.23.2, 00:13:42, FastEthernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
C       3.3.3.3 is directly connected, Loopback0
     172.16.0.0/24 is subnetted, 1 subnets
B       172.16.1.0 [20/0] via 2.2.2.2, 00:00:54
                   [20/0] via 1.1.1.1, 00:00:54
C    192.168.23.0/24 is directly connected, FastEthernet0/1

maximum-pathsコマンドを設定しても、ベストパスはやはり1つのみ決まります。そして、ベストパス以外でもAS_PATH、MED、LOCAL_PREFERENCE、WEIGHT、ORIGINが同じであればルーティングテーブルに載せられるようになります。

図 maximum-pathsコマンドの動作
図 maximum-pathsコマンドの動作

次に、maximu-pathsコマンドが機能しない場合も見ておきましょう。R3でR1から受信するルートのMEDアトリビュートを変更します。

R3  R1から受信するルートのアトリビュートを変更

route-map TEST permit 10
 set metric 10
!
router bgp 100
 neighbor 1.1.1.1 route-map TEST in

R1から受信するBGPルートのMEDを変更したあと、BGPテーブルおよびルーティングテーブルは次のようになります。

R3 BGPテーブル、ルーティングテーブル (アトリビュート変更後)

R3#show ip bgp
~省略~

   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.1.0/24    2.2.2.2                  0             0 1 i
*                   1.1.1.1                 10             0 1 i
R3#show ip bgp 172.16.1.0
BGP routing table entry for 172.16.1.0/24, version 3
Paths: (2 available, best #1, table Default-IP-Routing-Table)
Multipath: eBGP
Flag: 0x800
  Advertised to non peer-group peers:
  1.1.1.1
  1
    2.2.2.2 (metric 2) from 2.2.2.2 (2.2.2.2)
      Origin IGP, metric 0, localpref 100, valid, external, best
  1
    1.1.1.1 (metric 2) from 1.1.1.1 (1.1.1.1)
      Origin IGP, metric 10, localpref 100, valid, external
R3#show ip route
~省略~

Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
O       1.1.1.1 [110/2] via 192.168.13.1, 00:26:50, FastEthernet0/0
C    192.168.13.0/24 is directly connected, FastEthernet0/0
     2.0.0.0/32 is subnetted, 1 subnets
O       2.2.2.2 [110/2] via 192.168.23.2, 00:26:50, FastEthernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
C       3.3.3.3 is directly connected, Loopback0
     172.16.0.0/24 is subnetted, 1 subnets
B       172.16.1.0 [20/0] via 2.2.2.2, 00:00:13
C    192.168.23.0/24 is directly connected, FastEthernet0/1

このようにアトリビュートを変更すると、maximum-pathsコマンドを設定していてもベストパス以外はルーティングテーブルに登録されなくなります。

まとめ

ポイント

  • BGPルートの負荷分散を行うには、主に次の方法があります。
    • NEXT_HOPのIPアドレスへのパケットが負荷分散されるようにする
    • ベストパス以外のBGPルートもルーティングテーブルに載せるようにする(maximum-paths)

BGPの仕組み