↓ メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. BGP記事一覧/

BGPマルチパス(maximum-paths)

目次

BGPマルチパスとは

BGPは同じプレフィックスに複数の経路があっても、ベストパスを1つだけ選んでルーティングテーブルに入れます。 RFC 4271の9.1.2.2は、同じ優先度の経路が複数あるときの扱いをこう定めています。

The local speaker can select only one of these routes for inclusion in the associated Loc-RIB.

マルチパスは、この制限を実装側で緩めて複数の経路を同時にルーティングテーブルへ入れ、負荷分散する機能です。 IOS XRではmaximum-pathsで有効にします。

マルチパスはRFCで標準化されていません。 BGPの仕様に「複数の経路を転送に使う」という規定はなく、各実装が独自に持つ拡張です。 そのため候補になる条件、上限値、コマンド名はベンダーごとに違います。

マルチパスが変えるのは転送テーブルの中身だけです。

項目マルチパスで変わるか
ベストパス選択の結果変わらない。ベストパスは1つのまま
ピアへ広告する経路変わらない。広告するのはベストパスだけで、ピアには何も送られない
ルーティングテーブル(転送)変わる。ベストパスと同等の経路が複数入り、パケットはフローごと(送信元・宛先アドレスなどのハッシュ)にどれかの経路へ振り分けられる

振り分けはパケットごとではなくフローごとです。送信元・宛先アドレスなどのハッシュ値でネクストホップを選ぶため、同じ送信元・宛先の通信は常に同じ経路を通ります。逆に、送信元が違っても同じ経路に載ることはあります。ハッシュの表は経路の本数ごとに組み直されるので、本数が変わると振り分けも変わります。

3種類のマルチパス

どの種類の経路を束ねるかで3つに分かれます。IOS XRではmaximum-pathsのキーワードで指定します。

種類コマンド束ねる対象
eBGPマルチパスmaximum-paths ebgp <数>eBGPで学習した経路同士
iBGPマルチパスmaximum-paths ibgp <数>iBGPで学習した経路同士
eiBGPマルチパスmaximum-paths eibgp <数>eBGPとiBGPが混ざっていてもよい

候補になる条件

マルチパスに入るのは、ベストパスと次の属性がすべて一致する経路です。ベストパス選択が「同点のまま決着しなかった」経路が候補になります。

条件内容
WEIGHTベストパスと同じ
LOCAL_PREFベストパスと同じ
AS_PATHの長さベストパスと同じ
ORIGINベストパスと同じ
MULTI_EXIT_DISCベストパスと同じ
AS_PATHの中身ベストパスと完全に一致(AS番号の並びまで同じ)

種類ごとに追加の条件があります。

種類追加の条件
eBGP外部(またはコンフェデレーション外部)ピアから学習した経路であること。NEXT_HOPまでのIGPメトリックがベストパスと同じであること
iBGP内部ピアから学習した経路であること。NEXT_HOPまでのIGPメトリックがベストパスと同じであること
eiBGPIOS XRでは、直結のeBGP経路と数ホップ先のiBGP経路のようにIGPメトリックが違っていても束ねられる

eiBGPマルチパスはMPLS VPNのPE向けに作られた機能です。 Ciscoのガイドでは「BGP Multipath Load Sharing for Both eBGP and iBGP in an MPLS-VPN」として、IPv4 VRFアドレスファミリーでのみ設定できる機能として説明されています。PEはCEからのeBGP経路と対向PEからのiBGP経路を束ね、iBGP側のパケットはラベルで対向PEまで運ばれるので、途中のルータ(P)はBGPを見ません。 その後、VRFの外(素のIPv4 / IPv6)でも設定できるように拡張されましたが、同じガイドは「顧客サイトのPE 1台だけに設定すること。複数台に設定するとPE間でトラフィックがループすることがある」と注意しています。素のIPv4ではiBGP側のパケットがIGPの経路で途中のルータに渡り、そのルータは自分のBGPテーブルで転送先を決めるためです。途中のルータのベストパスが元のルータ経由なら、パケットは送り返されてループになります。 この検証のR1がその形で、iBGP側のネクストホップ(R2のLo0)へはR3を経由しますが、R3の192.168.4.0/24のベストパスはR1経由です。

multipath-relax:AS_PATHの中身を問わない

AS_PATHの中身が一致することという条件は、実運用でよく問題になります。 2つの上流ISPから同じ宛先を受け取ると、AS_PATHの長さは同じでも通るASが違うため、既定では束ねられません。 multipath-relaxを有効にすると、この条件が長さが同じであればよいに緩みます。

設定AS_PATHに求める条件
既定中身が完全に一致(65001 65004と65001 65004のみ束ねる)
multipath-relaxあり長さが同じであればよい(65001 65004と65003 65004も束ねる)

ADD-PATH(RFC 7911)との違い

複数の経路を扱う仕組みとしてADD-PATH(RFC 7911)がありますが、層が違います。 ADD-PATHは「ピアへ何本広告するか」、マルチパスは「自分の転送テーブルへ何本入れるか」の話です。

項目マルチパスADD-PATH(RFC 7911)
標準化されていない(実装ごとの拡張)RFC 7911
変えるもの転送テーブルに入れる経路数ピアへ広告する経路数
ピアから見た違い無い(広告されるのはベストパスだけ)同じプレフィックスの経路が複数届く
仕組みローカルの設定のみCapabilityの交換とPath Identifierが必要

IOS XRでの設定と確認

項目内容
maximum-paths ebgp <数>eBGPマルチパス。address-familyごとに設定する。指定できるのは2〜1024(XRd 26.1.1)。設定しなければ1(マルチパスなし)
maximum-paths ibgp <数> / eibgp <数>iBGP同士 / eBGPとiBGPの混在
bgp bestpath as-path multipath-relaxAS_PATHの一致条件を長さだけに緩める
show bgp <プレフィックス>マルチパスに入った経路にmultipathが付く
show route <プレフィックス>複数のネクストホップがBGP multi pathとして並ぶ。転送の実体
show cef exact-route <送信元> <宛先>その送信元・宛先のフローがどのネクストホップを通るかを、転送テーブルのハッシュから引く

実際の設定は、各STEPのshow configuration commit changesで示します。

実機での検証

XRd 26.1.1のルータ7台で確認します。

BGPマルチパスの検証トポロジ
  • AS 65001はR1・R2が境界、R3が内部(iBGPフルメッシュ、next-hop-self、OSPF area 0)。AS 65002はR4、AS 65003はR5、AS 65004はR6、AS 65005はR7
  • 各ルータはLo1の192.168.N.0/24をnetwork文で広告する。R1・R3はLo2、R7はLo2〜Lo4も広告し、送信元を変えた通信に使う
  • R7はR4の背後に置いた通信の発信元です。 R7から192.168.6.0/24への通信は必ずR4を通り、R4のマルチパスで振り分けられます
  • 出方向・入方向ポリシーはネイバーごとに別名(中身はpass)、全ネイバーにsoft-reconfiguration inbound always

3種類のマルチパスは、別々のルータで確認します。観測点は次の3か所で固定です。

観測点プレフィックス届いている経路確認する種類
R4192.168.6.0/24R1経由とR2経由(どちらもAS_PATH 65001 65004で完全一致)、R5経由(65003 65004で長さだけ同じ)eBGPマルチパスとmultipath-relax
R3192.168.4.0/24R1経由とR2経由のiBGP 2本(IGPメトリックが同じ)iBGPマルチパス
R1192.168.4.0/24R4からのeBGPとR2からのiBGPeiBGPマルチパス

検証の全体像

STEP操作確かめること
0マルチパスなしR4は3経路を持つがベストは1本。ネクストホップは1つで、R7の4つの送信元はすべて同じ経路を通る
1R4にmaximum-paths ebgp 2完全一致する2本が束ねられ、R7の送信元によってR1経由とR2経由に分かれる。R5への広告は変わらず、UPDATEも流れない
2R4にmultipath-relaxとebgp 3AS_PATHの中身が違うR5経由も入って3本になる
3R4の入方向でR5経由のLOCAL_PREFを90に属性がずれた経路は候補から外れて2本に戻る。ベストパスは変わらない
4R3にmaximum-paths ibgp 2iBGP同士が束ねられ、R1のLo0とR2のLo0の2つになる
5R1にmaximum-paths eibgp 2eBGPとiBGPが束ねられる。ただしiBGP側の経路上にあるR3が自分のBGP経路で転送するため、一部のフローがR1とR3の間でループする
6STEP 1〜5の設定を戻す(最終状態)multipathの表示が消え、ネクストホップも1つに戻る

以降の節で使うshowはすべて観測点のルータで採取したもので、送信元ごとの経路はshow cef exact-route(転送テーブルの答え)と、その送信元からのtraceroute(実際の転送)の両方で確認します。 tracerouteは各ホップに3発送っており、途中のルータが2発目にだけ応答しないことがあります(ICMPの応答をルータが制限しているためで、経路の違いではありません)。

STEP 0:マルチパスなし

R4は3経路を持っていますが、転送に使うのはベストパスの1本だけです。 show bgpではR1経由(10.1.4.1)だけがbestで、multipathは付いていません。

R4 show bgp 192.168.6.0/24(STEP 0)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24
Mon Sep 14 21:13:24.256 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 60           60
Last Modified: Sep 14 21:08:56.023 for 00:04:28
Paths: (3 available, best #1)
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.4.7.7        10.4.5.5        
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.4.7.7        10.4.5.5        
  65001 65004, (received & used)
    10.1.4.1 from 10.1.4.1 (10.0.0.1)
      Origin IGP, localpref 100, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 54
      Origin-AS validity: (disabled)
  Path #2: Received by speaker 0
  Not advertised to any peer
  65001 65004, (received & used)
    10.2.4.2 from 10.2.4.2 (10.0.0.2)
      Origin IGP, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #3: Received by speaker 0
  Not advertised to any peer
  65003 65004, (received & used)
    10.4.5.5 from 10.4.5.5 (10.0.0.5)
      Origin IGP, localpref 100, valid, external, group-best
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)

ルーティングテーブルにはネクストホップが1つだけ入ります。

R4 show route 192.168.6.0/24(STEP 0)
RP/0/RP0/CPU0:R4#show route 192.168.6.0/24
Mon Sep 14 21:13:24.863 UTC

Routing entry for 192.168.6.0/24
  Known via "bgp 65002", distance 20, metric 0
  Tag 65001, type external
  Installed Sep 14 21:08:55.779 for 00:04:29
  Routing Descriptor Blocks
    10.1.4.1, from 10.1.4.1, BGP external
      Route metric is 0, Wt is 1
  No advertising protos. 

R7の4つの送信元から192.168.6.1へのtracerouteは、2ホップ目がすべてR1(10.1.4.1)です。

R7 traceroute(STEP 0、送信元 192.168.7.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.7.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:16:06.561 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 62 msec  4 msec  4 msec 
 2  10.1.4.1 7 msec  14 msec  6 msec 
 3  10.1.6.6 32 msec  *  11 msec 
R7 traceroute(STEP 0、送信元 192.168.71.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.71.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:16:10.364 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 5 msec  5 msec  5 msec 
 2  10.1.4.1 8 msec  8 msec  7 msec 
 3  10.1.6.6 11 msec  *  14 msec 
R7 traceroute(STEP 0、送信元 192.168.75.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.75.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:16:14.148 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 6 msec  7 msec  6 msec 
 2  10.1.4.1 9 msec  48 msec  9 msec 
 3  10.1.6.6 13 msec  *  12 msec 
R7 traceroute(STEP 0、送信元 192.168.79.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.79.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:16:18.042 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 6 msec  5 msec  5 msec 
 2  10.1.4.1 9 msec  10 msec  8 msec 
 3  10.1.6.6 13 msec  *  13 msec 

R3とR1も同様に2経路を持ち、ベストパスは1本です(R3はR1経由の10.0.0.1、R1は直結のeBGP 10.1.4.4)。

R3 show bgp 192.168.4.0/24(STEP 0)
RP/0/RP0/CPU0:R3#show bgp 192.168.4.0/24
Mon Sep 14 21:12:26.450 UTC
BGP routing table entry for 192.168.4.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 28           28
Last Modified: Sep 14 21:09:05.023 for 00:03:21
Paths: (2 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002, (received & used)
    10.0.0.1 (metric 2) from 10.0.0.1 (10.0.0.1)
      Origin IGP, metric 0, localpref 100, valid, internal, best, group-best
      Received Path ID 0, Local Path ID 1, version 28
  Path #2: Received by speaker 0
  Not advertised to any peer
  65002, (received & used)
    10.0.0.2 (metric 2) from 10.0.0.2 (10.0.0.2)
      Origin IGP, metric 0, localpref 100, valid, internal
      Received Path ID 0, Local Path ID 0, version 0
R1 show bgp 192.168.4.0/24(STEP 0)
RP/0/RP0/CPU0:R1#show bgp 192.168.4.0/24
Mon Sep 14 21:10:39.491 UTC
BGP routing table entry for 192.168.4.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 27           27
Last Modified: Sep 14 21:08:19.023 for 00:02:20
Paths: (2 available, best #2)
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.1.6.6        10.0.0.3        10.0.0.2        
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002, (received & used)
    10.0.0.2 (metric 3) from 10.0.0.2 (10.0.0.2)
      Origin IGP, metric 0, localpref 100, valid, internal
      Received Path ID 0, Local Path ID 0, version 0
  Path #2: Received by speaker 0
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.1.6.6        10.0.0.3        10.0.0.2        
  65002, (received & used)
    10.1.4.4 from 10.1.4.4 (10.0.0.4)
      Origin IGP, metric 0, localpref 100, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 27
      Origin-AS validity: (disabled)

STEP 1:R4にmaximum-paths ebgp 2

AS_PATHまで完全に一致するR1経由とR2経由の2本が束ねられ、R5経由は入りません。 設定はこの1行だけです。

R4 STEP 1 で commit した設定
RP/0/RP0/CPU0:R4#show configuration commit changes last 1
Mon Sep 14 21:16:46.478 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65002
 address-family ipv4 unicast
  maximum-paths ebgp 2
 !
!
end

show bgpではR1経由とR2経由にmultipathが付き、ベストパスはR1経由のままです。R5経由はAS_PATHの中身(65003 65004)が違うので候補になりません。

R4 show bgp 192.168.6.0/24(STEP 1)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24
Mon Sep 14 21:21:36.760 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 74           74
Last Modified: Sep 14 21:16:48.023 for 00:04:48
Paths: (3 available, best #1)
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.4.7.7        10.4.5.5        
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.4.7.7        10.4.5.5        
  65001 65004, (received & used)
    10.1.4.1 from 10.1.4.1 (10.0.0.1)
      Origin IGP, localpref 100, valid, external, best, group-best, multipath
      Received Path ID 0, Local Path ID 1, version 74
      Origin-AS validity: (disabled)
  Path #2: Received by speaker 0
  Not advertised to any peer
  65001 65004, (received & used)
    10.2.4.2 from 10.2.4.2 (10.0.0.2)
      Origin IGP, localpref 100, valid, external, multipath
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #3: Received by speaker 0
  Not advertised to any peer
  65003 65004, (received & used)
    10.4.5.5 from 10.4.5.5 (10.0.0.5)
      Origin IGP, localpref 100, valid, external, group-best
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)

ルーティングテーブルには2つのネクストホップがBGP multi pathとして入ります。

R4 show route 192.168.6.0/24(STEP 1)
RP/0/RP0/CPU0:R4#show route 192.168.6.0/24
Mon Sep 14 21:21:37.403 UTC

Routing entry for 192.168.6.0/24
  Known via "bgp 65002", distance 20, metric 0
  Tag 65001, type external
  Installed Sep 14 21:16:47.563 for 00:04:49
  Routing Descriptor Blocks
    10.1.4.1, from 10.1.4.1, BGP external, BGP multi path
      Route metric is 0
    10.2.4.2, from 10.2.4.2, BGP external, BGP multi path
      Route metric is 0
  No advertising protos. 

CEFの表ではLoad distribution: 0 1 0 1のように、ハッシュ値ごとにどちらのネクストホップを使うかが決まっています。フローはこの表で振り分けられます。

R4 show cef 192.168.6.0/24(STEP 1)
RP/0/RP0/CPU0:R4#show cef 192.168.6.0/24
Mon Sep 14 21:21:37.722 UTC
192.168.6.0/24, version 165, internal 0x5000001 0x40 (ptr 0x88529f80) [1], 0x0 (0x0), 0x0 (0x0)
 Updated Sep 14 21:16:47.658 
 local adjacency to GigabitEthernet0/0/0/0

 Prefix Len 24, traffic index 0, precedence n/a, priority 4
  gateway array (0x8938bc68) reference count 6, flags 0x2010, source rib (7), 0 backups
                [1 type 3 flags 0x48501 (0x8942e380) ext 0x0 (0x0) (collapsed)]
  LW-LDI[type=0, refc=0, ptr=0x0, sh-ldi=0x0]
  gateway array update type-time 1 Sep 14 21:16:47.568
 LDI Update time Sep 14 21:16:47.658
   via 10.1.4.1/32, 2 dependencies, recursive, bgp-ext, bgp-multipath [flags 0x60a0]
    path-idx 0 NHID 0x0 [0x8852af40 0x0]
    next hop 10.1.4.1/32 via 10.1.4.1/32
   via 10.2.4.2/32, 2 dependencies, recursive, bgp-ext, bgp-multipath [flags 0x60a0]
    path-idx 1 NHID 0x0 [0x8852ae60 0x0]
    next hop 10.2.4.2/32 via 10.2.4.2/32

    Load distribution: 0 1 0 1 (refcount 1)

    Hash  OK  Interface                 Address
    0     Y   GigabitEthernet0/0/0/0    10.1.4.1       
    1     Y   GigabitEthernet0/0/0/1    10.2.4.2       
    2     Y   GigabitEthernet0/0/0/0    10.1.4.1       
    3     Y   GigabitEthernet0/0/0/1    10.2.4.2       

送信元ごとに引いた結果は、192.168.7.1と192.168.71.1がR1経由、192.168.75.1と192.168.79.1がR2経由です。

R4 show cef exact-route 192.168.7.1 192.168.6.1(STEP 1)
RP/0/RP0/CPU0:R4#show cef exact-route 192.168.7.1 192.168.6.1
Mon Sep 14 21:21:39.556 UTC
192.168.6.0/24, version 165, internal 0x5000001 0x40 (ptr 0x88529f80) [1], 0x0 (0x0), 0x0 (0x0)
 Updated Sep 14 21:16:47.658 
 local adjacency to GigabitEthernet0/0/0/0

 Prefix Len 24, traffic index 0, precedence n/a, priority 4
   via GigabitEthernet0/0/0/0
   via 10.1.4.1/32, 2 dependencies, recursive, bgp-ext, bgp-multipath [flags 0x60a0]
    path-idx 0 NHID 0x0 [0x8852af40 0x0]
    next hop 10.1.4.1/32 via 10.1.4.1/32
R4 show cef exact-route 192.168.71.1 192.168.6.1(STEP 1)
RP/0/RP0/CPU0:R4#show cef exact-route 192.168.71.1 192.168.6.1
Mon Sep 14 21:21:39.741 UTC
192.168.6.0/24, version 165, internal 0x5000001 0x40 (ptr 0x88529f80) [1], 0x0 (0x0), 0x0 (0x0)
 Updated Sep 14 21:16:47.658 
 local adjacency to GigabitEthernet0/0/0/0

 Prefix Len 24, traffic index 0, precedence n/a, priority 4
   via GigabitEthernet0/0/0/0
   via 10.1.4.1/32, 2 dependencies, recursive, bgp-ext, bgp-multipath [flags 0x60a0]
    path-idx 0 NHID 0x0 [0x8852af40 0x0]
    next hop 10.1.4.1/32 via 10.1.4.1/32
R4 show cef exact-route 192.168.75.1 192.168.6.1(STEP 1)
RP/0/RP0/CPU0:R4#show cef exact-route 192.168.75.1 192.168.6.1
Mon Sep 14 21:21:39.972 UTC
192.168.6.0/24, version 165, internal 0x5000001 0x40 (ptr 0x88529f80) [1], 0x0 (0x0), 0x0 (0x0)
 Updated Sep 14 21:16:47.657 
 local adjacency to GigabitEthernet0/0/0/1

 Prefix Len 24, traffic index 0, precedence n/a, priority 4
   via GigabitEthernet0/0/0/1
   via 10.2.4.2/32, 2 dependencies, recursive, bgp-ext, bgp-multipath [flags 0x60a0]
    path-idx 1 NHID 0x0 [0x8852ae60 0x0]
    next hop 10.2.4.2/32 via 10.2.4.2/32
R4 show cef exact-route 192.168.79.1 192.168.6.1(STEP 1)
RP/0/RP0/CPU0:R4#show cef exact-route 192.168.79.1 192.168.6.1
Mon Sep 14 21:21:40.291 UTC
192.168.6.0/24, version 165, internal 0x5000001 0x40 (ptr 0x88529f80) [1], 0x0 (0x0), 0x0 (0x0)
 Updated Sep 14 21:16:47.658 
 local adjacency to GigabitEthernet0/0/0/1

 Prefix Len 24, traffic index 0, precedence n/a, priority 4
   via GigabitEthernet0/0/0/1
   via 10.2.4.2/32, 2 dependencies, recursive, bgp-ext, bgp-multipath [flags 0x60a0]
    path-idx 1 NHID 0x0 [0x8852ae60 0x0]
    next hop 10.2.4.2/32 via 10.2.4.2/32

R7からのtracerouteもこのとおりに分かれます。2ホップ目がR1(10.1.4.1)とR2(10.2.4.2)に分かれているのが、マルチパスで転送が変わった証拠です。

R7 traceroute(STEP 1、送信元 192.168.7.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.7.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:24:18.641 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 6 msec  5 msec  5 msec 
 2  10.1.4.1 9 msec  8 msec  7 msec 
 3  10.1.6.6 12 msec  *  12 msec 
R7 traceroute(STEP 1、送信元 192.168.71.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.71.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:24:22.443 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 7 msec  5 msec  5 msec 
 2  10.1.4.1 9 msec  8 msec  8 msec 
 3  10.1.6.6 13 msec  *  14 msec 
R7 traceroute(STEP 1、送信元 192.168.75.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.75.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:24:26.346 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 6 msec  5 msec  5 msec 
 2  10.2.4.2 9 msec  50 msec  8 msec 
 3  10.2.3.3 12 msec  11 msec  12 msec 
 4  10.1.3.1 12 msec  11 msec  11 msec 
 5  10.1.6.6 17 msec  *  17 msec 
R7 traceroute(STEP 1、送信元 192.168.79.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.79.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:24:30.241 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 7 msec  50 msec  6 msec 
 2  10.2.4.2 9 msec  8 msec  23 msec 
 3  10.2.3.3 12 msec  11 msec  11 msec 
 4  10.1.3.1 12 msec  11 msec  11 msec 
 5  10.1.6.6 15 msec  *  18 msec 

一方、ピアへの広告は変わりません。R5へのadvertised-routesはSTEP 0と同じで、R4-R5間のキャプチャーにはKEEPALIVEしかありません(UPDATEは1つも流れていません)。

R4 show bgp neighbors 10.4.5.5 advertised-routes(STEP 1)
RP/0/RP0/CPU0:R4#show bgp neighbors 10.4.5.5 advertised-routes
Mon Sep 14 21:21:42.361 UTC
Network            Next Hop        From            AS Path
192.168.1.0/24     10.4.5.4        10.1.4.1        65002 65001i
192.168.2.0/24     10.4.5.4        10.1.4.1        65002 65001i
192.168.3.0/24     10.4.5.4        10.1.4.1        65002 65001i
192.168.4.0/24     10.4.5.4        Local           65002i
192.168.6.0/24     10.4.5.4        10.1.4.1        65002 65001 65004i
192.168.7.0/24     10.4.5.4        10.4.7.7        65002 65005i
192.168.13.0/24    10.4.5.4        10.1.4.1        65002 65001i
192.168.35.0/24    10.4.5.4        10.1.4.1        65002 65001i
192.168.71.0/24    10.4.5.4        10.4.7.7        65002 65005i
192.168.75.0/24    10.4.5.4        10.4.7.7        65002 65005i
192.168.79.0/24    10.4.5.4        10.4.7.7        65002 65005i

Processed 11 prefixes, 11 paths
STEP 1 の R4-R5 間のキャプチャー(BGPのみ)
$ tshark -r bgp-multipath-step1-r4r5.pcap -Y bgp
    1   0.000000     10.4.5.4 → 10.4.5.5     BGP 73 KEEPALIVE Message
    3   9.319897     10.4.5.5 → 10.4.5.4     BGP 73 KEEPALIVE Message
    5  59.999511     10.4.5.4 → 10.4.5.5     BGP 73 KEEPALIVE Message
    7  69.320302     10.4.5.5 → 10.4.5.4     BGP 73 KEEPALIVE Message
    9 119.999457     10.4.5.4 → 10.4.5.5     BGP 73 KEEPALIVE Message
   11 129.320784     10.4.5.5 → 10.4.5.4     BGP 73 KEEPALIVE Message
   13 180.000764     10.4.5.4 → 10.4.5.5     BGP 73 KEEPALIVE Message
   15 189.321086     10.4.5.5 → 10.4.5.4     BGP 73 KEEPALIVE Message
   17 240.000615     10.4.5.4 → 10.4.5.5     BGP 73 KEEPALIVE Message
   19 249.321227     10.4.5.5 → 10.4.5.4     BGP 73 KEEPALIVE Message
   21 300.000736     10.4.5.4 → 10.4.5.5     BGP 73 KEEPALIVE Message
   23 309.321196     10.4.5.5 → 10.4.5.4     BGP 73 KEEPALIVE Message
   25 360.001210     10.4.5.4 → 10.4.5.5     BGP 73 KEEPALIVE Message
   27 369.322027     10.4.5.5 → 10.4.5.4     BGP 73 KEEPALIVE Message
   29 420.001005     10.4.5.4 → 10.4.5.5     BGP 73 KEEPALIVE Message
   31 429.322356     10.4.5.5 → 10.4.5.4     BGP 73 KEEPALIVE Message

STEP 2:R4にmultipath-relaxとebgp 3

AS_PATHの中身が違うR5経由も候補に入り、3本になります。

R4 STEP 2 で commit した設定
RP/0/RP0/CPU0:R4#show configuration commit changes last 1
Mon Sep 14 21:24:46.493 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65002
 bgp bestpath as-path multipath-relax
 address-family ipv4 unicast
  maximum-paths ebgp 3
 !
!
end
R4 show bgp 192.168.6.0/24(STEP 2)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24
Mon Sep 14 21:29:36.100 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 81           81
Last Modified: Sep 14 21:24:48.023 for 00:04:48
Paths: (3 available, best #1)
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.4.7.7        10.4.5.5        
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.4.7.7        10.4.5.5        
  65001 65004, (received & used)
    10.1.4.1 from 10.1.4.1 (10.0.0.1)
      Origin IGP, localpref 100, valid, external, best, group-best, multipath
      Received Path ID 0, Local Path ID 1, version 81
      Origin-AS validity: (disabled)
  Path #2: Received by speaker 0
  Not advertised to any peer
  65001 65004, (received & used)
    10.2.4.2 from 10.2.4.2 (10.0.0.2)
      Origin IGP, localpref 100, valid, external, multipath
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #3: Received by speaker 0
  Not advertised to any peer
  65003 65004, (received & used)
    10.4.5.5 from 10.4.5.5 (10.0.0.5)
      Origin IGP, localpref 100, valid, external, multipath
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
R4 show route 192.168.6.0/24(STEP 2)
RP/0/RP0/CPU0:R4#show route 192.168.6.0/24
Mon Sep 14 21:29:36.462 UTC

Routing entry for 192.168.6.0/24
  Known via "bgp 65002", distance 20, metric 0
  Tag 65001, type external
  Installed Sep 14 21:24:47.761 for 00:04:48
  Routing Descriptor Blocks
    10.1.4.1, from 10.1.4.1, BGP external, BGP multi path
      Route metric is 0
    10.2.4.2, from 10.2.4.2, BGP external, BGP multi path
      Route metric is 0
    10.4.5.5, from 10.4.5.5, BGP external, BGP multi path
      Route metric is 0
  No advertising protos. 

ネクストホップが3つになるとハッシュの表も組み直されるため、送信元ごとの振り分けはSTEP 1と同じではありません。192.168.71.1がR5経由(10.4.5.5)に移り、他の3つはR1経由です。

R7 traceroute(STEP 2、送信元 192.168.7.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.7.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:32:18.313 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 7 msec  6 msec  5 msec 
 2  10.1.4.1 10 msec  10 msec  8 msec 
 3  10.1.6.6 14 msec  *  16 msec 
R7 traceroute(STEP 2、送信元 192.168.71.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.71.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:32:21.918 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 8 msec  5 msec  5 msec 
 2  10.4.5.5 10 msec  7 msec  7 msec 
 3  10.5.6.6 11 msec  *  14 msec 
R7 traceroute(STEP 2、送信元 192.168.75.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.75.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:32:25.433 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 6 msec  5 msec  24 msec 
 2  10.1.4.1 9 msec  9 msec  8 msec 
 3  10.1.6.6 12 msec  *  12 msec 
R7 traceroute(STEP 2、送信元 192.168.79.1)
RP/0/RP0/CPU0:R7#traceroute 192.168.6.1 source 192.168.79.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:32:29.102 UTC

Type escape sequence to abort.
Tracing the route to 192.168.6.1

 1  10.4.7.4 5 msec  4 msec  5 msec 
 2  10.1.4.1 8 msec  9 msec  7 msec 
 3  10.1.6.6 10 msec  *  14 msec 

STEP 3:R4の入方向でR5経由のLOCAL_PREFを90に

属性が1つでもベストパスと違えば候補から外れます。 R5からの入方向ポリシーでLOCAL_PREFを90にすると、R5経由はmultipathが外れて2本に戻ります。ベストパス(R1経由)は変わりません。

R4 STEP 3 で commit した設定
RP/0/RP0/CPU0:R4#show configuration commit changes last 1
Mon Sep 14 21:32:45.693 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
route-policy FROM-R5
  set local-preference 90
  pass
end-policy
!
end

Paths: (4 available)になっているのは、soft-reconfiguration inbound alwaysが保持している受信そのままの経路(received-only、localpref 100)が並ぶためです。転送に使われるのはlocalpref 90のほうで、これがベストパスと一致しないので候補になりません。

R4 show bgp 192.168.6.0/24(STEP 3)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24
Mon Sep 14 21:37:33.225 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 87           87
Last Modified: Sep 14 21:32:47.023 for 00:04:46
Paths: (4 available, best #1)
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.4.7.7        10.4.5.5        
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.4.7.7        10.4.5.5        
  65001 65004, (received & used)
    10.1.4.1 from 10.1.4.1 (10.0.0.1)
      Origin IGP, localpref 100, valid, external, best, group-best, multipath
      Received Path ID 0, Local Path ID 1, version 81
      Origin-AS validity: (disabled)
  Path #2: Received by speaker 0
  Not advertised to any peer
  65001 65004, (received & used)
    10.2.4.2 from 10.2.4.2 (10.0.0.2)
      Origin IGP, localpref 100, valid, external, multipath
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #3: Received by speaker 0
  Not advertised to any peer
  65003 65004
    10.4.5.5 from 10.4.5.5 (10.0.0.5)
      Origin IGP, localpref 90, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #4: Received by speaker 0
  Not advertised to any peer
  65003 65004, (received-only)
    10.4.5.5 from 10.4.5.5 (10.0.0.5)
      Origin IGP, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
R4 show route 192.168.6.0/24(STEP 3)
RP/0/RP0/CPU0:R4#show route 192.168.6.0/24
Mon Sep 14 21:37:33.799 UTC

Routing entry for 192.168.6.0/24
  Known via "bgp 65002", distance 20, metric 0
  Tag 65001, type external
  Installed Sep 14 21:32:47.057 for 00:04:46
  Routing Descriptor Blocks
    10.1.4.1, from 10.1.4.1, BGP external, BGP multi path
      Route metric is 0
    10.2.4.2, from 10.2.4.2, BGP external, BGP multi path
      Route metric is 0
  No advertising protos. 

R4-R5間のキャプチャーにUPDATEは無く、R5への広告も変わっていません。なおR1-R4間には、R5から受けている192.168.5.0/24の再広告が1つ流れます。入方向ポリシーの再評価で経路の版が変わったための再送で、中身はそれまでと同じです。

STEP 4:R3にmaximum-paths ibgp 2

iBGP同士も同じ条件で束ねられます。 R3はR1経由とR2経由をiBGPで受けており、NEXT_HOP(R1・R2のLo0)までのIGPメトリックはどちらも2です。

R3 STEP 4 で commit した設定
RP/0/RP0/CPU0:R3#show configuration commit changes last 1
Mon Sep 14 21:40:42.595 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65001
 address-family ipv4 unicast
  maximum-paths ibgp 2
 !
!
end
R3 show bgp 192.168.4.0/24(STEP 4)
RP/0/RP0/CPU0:R3#show bgp 192.168.4.0/24
Mon Sep 14 21:44:37.129 UTC
BGP routing table entry for 192.168.4.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 37           37
Last Modified: Sep 14 21:40:44.023 for 00:03:53
Paths: (2 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002, (received & used)
    10.0.0.1 (metric 2) from 10.0.0.1 (10.0.0.1)
      Origin IGP, metric 0, localpref 100, valid, internal, best, group-best, multipath
      Received Path ID 0, Local Path ID 1, version 37
  Path #2: Received by speaker 0
  Not advertised to any peer
  65002, (received & used)
    10.0.0.2 (metric 2) from 10.0.0.2 (10.0.0.2)
      Origin IGP, metric 0, localpref 100, valid, internal, multipath
      Received Path ID 0, Local Path ID 0, version 0

ルーティングテーブルにはR1のLo0(10.0.0.1)とR2のLo0(10.0.0.2)の2つが入ります。

R3 show route 192.168.4.0/24(STEP 4)
RP/0/RP0/CPU0:R3#show route 192.168.4.0/24
Mon Sep 14 21:44:38.487 UTC

Routing entry for 192.168.4.0/24
  Known via "bgp 65001", distance 200, metric 0
  Tag 65002, type internal
  Installed Sep 14 21:40:43.864 for 00:03:54
  Routing Descriptor Blocks
    10.0.0.1, from 10.0.0.1, BGP multi path
      Route metric is 0
    10.0.0.2, from 10.0.0.2, BGP multi path
      Route metric is 0
  No advertising protos. 

R3自身の2つの送信元からのtracerouteは、1ホップ目がR1(10.1.3.1)とR2(10.2.3.2)に分かれます。

R3 traceroute(STEP 4、送信元 192.168.3.1)
RP/0/RP0/CPU0:R3#traceroute 192.168.4.1 source 192.168.3.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:45:00.949 UTC

Type escape sequence to abort.
Tracing the route to 192.168.4.1

 1  10.1.3.1 6 msec  5 msec  5 msec 
 2  10.1.4.4 9 msec  *  11 msec 
R3 traceroute(STEP 4、送信元 192.168.35.1)
RP/0/RP0/CPU0:R3#traceroute 192.168.4.1 source 192.168.35.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:45:04.816 UTC

Type escape sequence to abort.
Tracing the route to 192.168.4.1

 1  10.2.3.2 5 msec  5 msec  5 msec 
 2  10.2.4.4 8 msec  *  8 msec 

STEP 5:R1にmaximum-paths eibgp 2

eBGPとiBGPの経路が束ねられますが、素のIPv4ではiBGP側の経路がループします。

R1 STEP 5 で commit した設定
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Mon Sep 14 21:48:47.524 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65001
 address-family ipv4 unicast
  maximum-paths eibgp 2
 !
!
end

R4直結のeBGP経路(10.1.4.4)とR2からのiBGP経路(10.0.0.2、IGPメトリック3)の両方にmultipathが付きます。iBGP側にはbackupとadd-pathも付いていますが、転送に使われない印ではありません。

R1 show bgp 192.168.4.0/24(STEP 5)
RP/0/RP0/CPU0:R1#show bgp 192.168.4.0/24
Mon Sep 14 21:50:55.020 UTC
BGP routing table entry for 192.168.4.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 37           37
Last Modified: Sep 14 21:48:49.023 for 00:02:06
Paths: (2 available, best #2)
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.1.6.6        10.0.0.3        10.0.0.2        
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002, (received & used)
    10.0.0.2 (metric 3) from 10.0.0.2 (10.0.0.2)
      Origin IGP, metric 0, localpref 100, valid, internal, multipath, backup, add-path
      Received Path ID 0, Local Path ID 3, version 37
  Path #2: Received by speaker 0
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.1.6.6        10.0.0.3        10.0.0.2        
  65002, (received & used)
    10.1.4.4 from 10.1.4.4 (10.0.0.4)
      Origin IGP, metric 0, localpref 100, valid, external, best, group-best, multipath
      Received Path ID 0, Local Path ID 1, version 37
      Origin-AS validity: (disabled)

ルーティングテーブルとCEFの両方に2つのネクストホップが入り、ハッシュ表ではiBGP側のパケットがR3(10.1.3.3)へ出ていきます。

R1 show route 192.168.4.0/24(STEP 5)
RP/0/RP0/CPU0:R1#show route 192.168.4.0/24
Mon Sep 14 21:50:56.138 UTC

Routing entry for 192.168.4.0/24
  Known via "bgp 65001", distance 20, metric 0
  Tag 65002
  Number of pic paths 1 , type internal and external
  Installed Sep 14 21:48:48.786 for 00:02:07
  Routing Descriptor Blocks
    10.0.0.2, from 10.0.0.2, BGP backup path, BGP multi path
      Route metric is 0
    10.1.4.4, from 10.1.4.4, BGP external, BGP multi path
      Route metric is 0
  No advertising protos. 
R1 show cef 192.168.4.0/24(STEP 5)
RP/0/RP0/CPU0:R1#show cef 192.168.4.0/24
Mon Sep 14 21:50:56.479 UTC
192.168.4.0/24, version 75, internal 0x5000001 0x40 (ptr 0x8851a0b0) [1], 0x0 (0x0), 0x0 (0x0)
 Updated Sep 14 21:48:48.790 
 local adjacency to GigabitEthernet0/0/0/0

 Prefix Len 24, traffic index 0, precedence n/a, priority 4
  gateway array (0x896e4640) reference count 6, flags 0x102810, source rib (7), 0 backups
                [1 type 3 flags 0x48501 (0x897886c8) ext 0x0 (0x0) (collapsed)]
  LW-LDI[type=0, refc=0, ptr=0x0, sh-ldi=0x0]
  gateway array update type-time 1 Sep 14 21:48:48.790
 LDI Update time Sep 14 21:48:48.892
   via 10.0.0.2/32, 3 dependencies, recursive, bgp-multipath, backup [flags 0x6180]
    path-idx 0 NHID 0x0 [0x8851a5f0 0x0]
    next hop 10.0.0.2/32 via 10.0.0.2/32
   via 10.1.4.4/32, 2 dependencies, recursive, bgp-ext, bgp-multipath [flags 0x60a0]
    path-idx 1 NHID 0x0 [0x8851ac10 0x0], Internal 0x8a94a0a0
    next hop 10.1.4.4/32 via 10.1.4.4/32

    Load distribution: 0 1 0 1 (refcount 1)

    Hash  OK  Interface                 Address
    0     Y   GigabitEthernet0/0/0/0    10.1.3.3       
    1     Y   GigabitEthernet0/0/0/1    10.1.4.4       
    2     Y   GigabitEthernet0/0/0/0    10.1.3.3       
    3     Y   GigabitEthernet0/0/0/1    10.1.4.4       

R1の2つの送信元はどちらもiBGP側に載り、R3へ送られます。R3はSTEP 4のマルチパスで、R1経由とR2経由に振り分けます。 192.168.1.1のフローはR3でR2側に載ってR4へ届きますが、192.168.13.1のフローはR3でR1側に載り、R1がまたR3へ送るので、R1とR3の間を往復してTTLが尽きます(pingは0/50)。

R1 traceroute(STEP 5、送信元 192.168.1.1)
RP/0/RP0/CPU0:R1#traceroute 192.168.4.1 source 192.168.1.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:51:18.816 UTC

Type escape sequence to abort.
Tracing the route to 192.168.4.1

 1  10.1.3.3 6 msec  5 msec  5 msec 
 2  10.2.3.2 8 msec  8 msec  8 msec 
 3  10.2.4.4 19 msec  *  13 msec 
R1 ping / traceroute(STEP 5、送信元 192.168.13.1)
RP/0/RP0/CPU0:R1#ping 192.168.4.1 source 192.168.13.1 count 50 timeout 1
Mon Sep 14 21:51:20.831 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.4.1 timeout is 1 seconds:
..................................................
Success rate is 0 percent (0/50)
RP/0/RP0/CPU0:R1#traceroute 192.168.4.1 source 192.168.13.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:52:34.527 UTC

Type escape sequence to abort.
Tracing the route to 192.168.4.1

 1  10.1.3.3 7 msec  5 msec  5 msec 
 2  10.1.3.1 6 msec  50 msec  4 msec 
 3  10.1.3.3 7 msec  7 msec  7 msec 
 4  10.1.3.1 22 msec  8 msec  8 msec 
 5  10.1.3.3 11 msec  12 msec  11 msec 
 6  10.1.3.1 12 msec  57 msec  13 msec 

R3自身の通信も巻き込まれます。STEP 4では通っていた192.168.3.1のフローは、R3がR1へ送り、R1がiBGP側でR3へ送り返すので、同じくループします。

R3 ping / traceroute(STEP 5、送信元 192.168.3.1)
RP/0/RP0/CPU0:R3#ping 192.168.4.1 source 192.168.3.1 count 50 timeout 1
Mon Sep 14 21:54:14.260 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.4.1 timeout is 1 seconds:
..................................................
Success rate is 0 percent (0/50)
RP/0/RP0/CPU0:R3#traceroute 192.168.4.1 source 192.168.3.1 probe 3 timeout 1 maxttl 6
Mon Sep 14 21:55:26.451 UTC

Type escape sequence to abort.
Tracing the route to 192.168.4.1

 1  10.1.3.1 6 msec  59 msec  5 msec 
 2  10.1.3.3 5 msec  5 msec  5 msec 
 3  10.1.3.1 52 msec  7 msec  7 msec 
 4  10.1.3.3 8 msec  9 msec  8 msec 
 5  10.1.3.1 10 msec  11 msec  9 msec 
 6  10.1.3.3 9 msec  9 msec  10 msec 

Ciscoのガイドが「複数のPEに設定するとPE間でループすることがある」と注意しているのはこの現象です。ラベルで対向PEまで運ぶMPLS VPNなら、途中のルータ(P)はBGPを見ないので送り返しは起きません。

STEP 6:STEP 1〜5の設定を戻す(最終状態)

3台の設定を戻すとmultipathの表示が消え、ルーティングテーブルのネクストホップはSTEP 0と同じ1つに戻ります。

R4 show route 192.168.6.0/24(STEP 6)
RP/0/RP0/CPU0:R4#show route 192.168.6.0/24
Mon Sep 14 22:04:26.012 UTC

Routing entry for 192.168.6.0/24
  Known via "bgp 65002", distance 20, metric 0
  Tag 65001, type external
  Installed Sep 14 21:59:19.870 for 00:05:06
  Routing Descriptor Blocks
    10.1.4.1, from 10.1.4.1, BGP external
      Route metric is 0, Wt is 1
  No advertising protos. 
R3 show route 192.168.4.0/24(STEP 6)
RP/0/RP0/CPU0:R3#show route 192.168.4.0/24
Mon Sep 14 22:03:28.455 UTC

Routing entry for 192.168.4.0/24
  Known via "bgp 65001", distance 200, metric 0
  Tag 65002, type internal
  Installed Sep 14 21:59:26.478 for 00:04:02
  Routing Descriptor Blocks
    10.0.0.1, from 10.0.0.1
      Route metric is 0, Wt is 1
  No advertising protos. 
R1 show route 192.168.4.0/24(STEP 6)
RP/0/RP0/CPU0:R1#show route 192.168.4.0/24
Mon Sep 14 22:01:40.729 UTC

Routing entry for 192.168.4.0/24
  Known via "bgp 65001", distance 20, metric 0
  Tag 65002, type external
  Installed Sep 14 21:59:33.214 for 00:02:07
  Routing Descriptor Blocks
    10.1.4.4, from 10.1.4.4, BGP external
      Route metric is 0, Wt is 1
  No advertising protos. 

検証Configおよびshow結果

各STEPで7台すべてから、次のファイルをルータごとに分けて取得しています。検証Configは..._run.txtです(最終状態はSTEP 6のもの)。

ファイル内容
..._show.txtshow version / show interface description / show route / show route bgp / show bgp summary / show bgp / show bgp <プレフィックス>(192.168.1.0/24〜192.168.7.0/24)/ show route と show cef の 192.168.6.0/24・192.168.4.0/24 / show bgp neighbors / show bgp update-group / show rpl route-policy / ピアごとのadvertised-routes / routes / received routes。R1〜R3はshow ospf neighbor、観測点(R4・R3・R1)はshow cef exact-routeも
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._ping.txtR7の4つの送信元から192.168.6.1へ、R3・R1のLo1/Lo2から192.168.4.1へのping(50発、timeout 1秒)とtraceroute(probe 3)
..._trace.txtshow bgp trace neighbor / show bgp trace error
..._commit.cfgそのSTEPで実際にcommitした設定だけ。 設定を変えたルータの分のみ

STEP 0:マルチパスなし

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace-
R2showlogrun-trace-
R3showlogrunpingtrace-
R4showlogrun-trace-
R5showlogrun-trace-
R6showlogrun-trace-
R7showlogrunpingtrace-

STEP 1:R4にmaximum-paths ebgp 2

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace-
R2showlogrun-trace-
R3showlogrunpingtrace-
R4showlogrun-tracecfg
R5showlogrun-trace-
R6showlogrun-trace-
R7showlogrunpingtrace-

STEP 2:R4にmultipath-relaxとebgp 3

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace-
R2showlogrun-trace-
R3showlogrunpingtrace-
R4showlogrun-tracecfg
R5showlogrun-trace-
R6showlogrun-trace-
R7showlogrunpingtrace-

STEP 3:R4の入方向でR5経由のLOCAL_PREFを90に

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace-
R2showlogrun-trace-
R3showlogrunpingtrace-
R4showlogrun-tracecfg
R5showlogrun-trace-
R6showlogrun-trace-
R7showlogrunpingtrace-

STEP 4:R3にmaximum-paths ibgp 2

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace-
R2showlogrun-trace-
R3showlogrunpingtracecfg
R4showlogrun-trace-
R5showlogrun-trace-
R6showlogrun-trace-
R7showlogrunpingtrace-

STEP 5:R1にmaximum-paths eibgp 2

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtracecfg
R2showlogrun-trace-
R3showlogrunpingtrace-
R4showlogrun-trace-
R5showlogrun-trace-
R6showlogrun-trace-
R7showlogrunpingtrace-

STEP 6:STEP 1〜5の設定を戻す(最終状態)

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtracecfg
R2showlogrun-trace-
R3showlogrunpingtracecfg
R4showlogrun-tracecfg
R5showlogrun-trace-
R6showlogrun-trace-
R7showlogrunpingtrace-

パケットキャプチャーはSTEPごとに、R4-R5間(R5への広告が変わらないことの確認)とR1-R4間で取得しています。

STEPR4-R5間R1-R4間
0pcappcap
1pcappcap
2pcappcap
3pcappcap
4pcappcap
5pcappcap
6pcappcap

参考

資料タイトル概要
RFC 4271A Border Gateway Protocol 4 (BGP-4)9.1.2.2 Loc-RIBに入れる経路は1つ
RFC 7911Advertisement of Multiple Paths in BGPADD-PATH。マルチパスとは層が違う
Cisco IOS XE 17.x IP Routing Configuration GuideBGP Multipath Load Sharing for Both eBGP and iBGP in an MPLS-VPNeiBGPマルチパスの元の機能。MPLS VPN向けで、IPv4 VRFアドレスファミリーでのみ設定できる
Cisco IOS XE 17.x IP Routing Configuration GuideeiBGP Multipath for Non-VRF Interfaces (IPv4/IPv6)VRF外への拡張(IOS 15.4(1)T〜)。「顧客サイトのPE 1台だけに設定する。複数台に設定するとPE間でループすることがある」
Cisco ASR 9000 Routing Command Reference, IOS XR 6.4.xmaximum-paths (BGP)IOS XRではeibgpをVRFの内外どちらのIPv4 / IPv6アドレスファミリーでも設定できる
Cisco 8000 BGP Configuration Guide, IOS XREIBGP policy-based multipath with equal-cost multipathIOS XR 7.10.1以降のdefault VRFでのeiBGP。route-policyで候補を絞る前提の機能

関連記事