Quantity of Shit

便所の落書き

BGP Load Balancing & DMZ Link Bandwidth

BGPでは、eBGPピアからの経路にリンクの帯域幅を拡張コミュニティ属性として付加することができ、その帯域幅に応じて負荷分散を実行できる。
neighbor dmzlink-bwコマンドで、eBGPピアから広告された経路にリンクの帯域幅情報を付加する。
bgp dmzlink-bwコマンドで、広告された経路に付加されている帯域幅に基づいて負荷分散を実行する。

ということで試してみます。

Topology

Logical

f:id:shiva85:20170604232238p:plain

R3のG0/0.13なら192.168.13.3
Loopbackは3.3.3.3みたいな感じです
R2,R4間の帯域幅は100Mです
R3.R5間は10Mに設定しています

Physical

f:id:shiva85:20170604232433p:plain

Initial Configuration

Spoiler

Task

  1. AS100と200で任意のIGPを張ります
    *ここではOSPFを使用します
  2. R2,4とR3,5の間でeBGPを張ります
  3. AS100,200内でiBGPをフルメッシュで張ります
    *source-updateでLoopbackを指定します
    *eBGPからの経路はNextHopを変更してiBGPに広告します
  4. R1とR6のLoopbackをBGPで広告します
  5. R2とR3でeBGPリンクの帯域幅をR1に広告します
  6. R1でeBGPリンクの帯域幅に応じた負荷分散が実行されるようにします
  7. R1のL0からR6のL0にトラフィックを送信する際、dmzlink-bwによって適切にトラフィックが分散されていることを確認します

Configuration

Task 1~4

Task4までは普通のBGPの設定なのでConfigだけ貼っ付けます

Spoiler

Task 5

現時点ではまだ帯域幅が付加されていません。

R2(config)#do sh ip b 6.6.6.6
BGP routing table entry for 6.6.6.6/32, version 8
Paths: (2 available, best #2, table default)
  Advertised to update-groups:
     5
  Refresh Epoch 6
  200
    3.3.3.3 (metric 3) from 3.3.3.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, internal
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 1
  200
    192.168.24.4 from 192.168.24.4 (4.4.4.4)
      Origin IGP, localpref 100, valid, external, best
      rx pathid: 0, tx pathid: 0x0

eBGP経路に帯域幅を付加するには次のコマンドを使います。

neighbor X.X.X.X dmzlink-bw

入力例

R2(config)#router bgp 100
R2(config-router)#nei 192.168.24.4 dmzlink-bw

確認

R2(config-router)#do sh ip b 6.6.6.6
BGP routing table entry for 6.6.6.6/32, version 8
Paths: (2 available, best #2, table default)
  Advertised to update-groups:
     5
  Refresh Epoch 6
  200
    3.3.3.3 (metric 3) from 3.3.3.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, internal
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 1
  200
    192.168.24.4 from 192.168.24.4 (4.4.4.4)
      Origin IGP, localpref 100, valid, external, best
      DMZ-Link Bw 12500 kbytes
      // 帯域幅が拡張コミュニティ属性として付加されている
      rx pathid: 0, tx pathid: 0x0

R3も同様に設定します

Task 6

負荷分散を実行するために次のコマンドで使用する経路を増やします。

R1(config)#router bgp 100
R1(config-router)#maximum-paths ibgp 2
// iBGPピアから広告された同じ宛先へのパスを2つ使用する

*マルチパスとして選定されるためにはいくつかの制約があります。

www.cisco.com

広告された帯域幅に応じてトラフィックを分散するには次のコマンドを使用します。

bgp dmzlink-bw

bgp dmzlink-bwが無くても負荷分散は出来ますが、帯域幅を考慮しないので
(帯域幅の有無に関わらず)100Mと10Mの経路に均等にトラフィックを送信します。

入力例

R1(config)#router bgp 100
R1(config-router)#bgp dmzlink-bw

R2,R3が保持している帯域幅情報は"拡張コミュニティ属性"なので、iBGPピアに対してsend-communityコマンドでコミュニティ属性を広告する必要があります。

R2(config-router)#nei 1.1.1.1 send-community extended
% Invalid command for a peer-group member
// ピアグループを設定したピアは個別でオプションを設定出来ない(一部除く)
R2(config-router)#nei ibgp send-community extended

R3でも同様に設定し、R1のBGPテーブルを出力します

R1(config)#do sh ip b 6.6.6.6
BGP routing table entry for 6.6.6.6/32, version 9
Paths: (2 available, best #2, table default)
Multipath: iBGP
  Not advertised to any peer
  Refresh Epoch 4
  200
    3.3.3.3 (metric 2) from 3.3.3.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, internal, multipath(oldest)
      // マルチパスとして選定されている
      DMZ-Link Bw 1250 kbytes
      // 帯域幅(コミュニティ属性)が広告されている
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 4
  200
    2.2.2.2 (metric 2) from 2.2.2.2 (2.2.2.2)
      Origin IGP, metric 0, localpref 100, valid, internal, multipath, best
      // マルチパスとして選定されている
      DMZ-Link Bw 12500 kbytes
      // 帯域幅(コミュニティ属性)が広告されている
      rx pathid: 0, tx pathid: 0x0

Task 7

負荷分散が適切に実行されているか確認します
Cisco IOSでは、デフォルトの負荷分散方式は宛先別ロード バランシングなので、検証が難しいためパケット別ロードバランシングに変更します。 www.cisco.com

R1(config)#int g0/0.12
R1(config-subif)#ip load-sharing per-packet
// 負荷分散方式をパケット別に変更する
R1(config)#int g0/0.13
R1(config-subif)#ip load-sharing per-packet

確認のためにpingを送信します

R1#ping 6.6.6.6 so l0 rep 11

eBGPリンクの帯域幅が広いR2へのトラフィックが多いことが確認できます。

f:id:shiva85:20170605111651p:plain

f:id:shiva85:20170605111656p:plain

R1#sh ip ro 6.6.6.6
Routing entry for 6.6.6.6/32
  Known via "bgp 100", distance 200, metric 0
  Tag 200, type internal
  Last update from 2.2.2.2 00:20:56 ago
  Routing Descriptor Blocks:
  * 3.3.3.3, from 3.3.3.3, 00:20:56 ago
      Route metric is 0, traffic share count is 1
      AS Hops 1
      Route tag 200
      MPLS label: none
    2.2.2.2, from 2.2.2.2, 00:20:56 ago
      Route metric is 0, traffic share count is 10
      AS Hops 1
      Route tag 200
      MPLS label: none

Note

  • neighbor dmzlink-bwはeBGPピアに対してのみ設定できるので、iBGPピアに対して設定しようとした場合は次のようなエラーを吐きます。
R1(config-router)#nei 3.3.3.3 dmzlink-bw
%BGP: Propagation of DMZ-Link-Bandwidth is supported only for single-hop EBGP peers
  • さらにsingle-hopと書かれている通り直接接続しているeBGPピアでないと帯域幅を付加できません。
    • エラーは出ないけど属性が乗らない
    • Loopback接続も直接接続ではないので乗らない