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

BGP MED属性

目次

MEDとは

MULTI_EXIT_DISC(MED、Type code 4)は、隣接ASに対して「自ASへはどの入口から入ってきてほしいか」を伝えるパス属性です。BGPパス属性とベストパス選択で解説したとおりoptional non-transitiveに分類されます。

「optional」はすべての実装が理解できるとは限らないことを、「non-transitive」は理解できない実装が受け取ったときにそのまま転送せず捨てることを意味します。実際にはMEDを理解しない実装はまずありませんが、non-transitiveであることは効き方に直結します。MEDは受け取ったASより先へは自動的には広がりません。

項目内容
Type code4
分類Optional non-transitive
4バイトの符号なし整数。小さいほうが優先
既定値なし(属性そのものが付かない)
伝わる範囲隣接ASまで。受け取ったASがさらに別のASへ広告するときは載らない
定義RFC 4271 5.1.4節

値が小さいほうが優先という向きは、LOCAL_PREF(大きいほうが優先)と逆です。MEDは「コスト」「距離」のイメージで、IGPのメトリックと同じ感覚だと考えると覚えやすくなります。IOS XRのshow bgpではMetric列に表示されます。

何を伝える属性か

自ASが隣のASと複数の接点を持っているとき、「どの接点から入ってきてほしいか」を相手に伝える手段がMEDです。

たとえばAS 65001がR1とR2の2か所でAS 65002とつながっているとします。AS 65001としては「R2側の回線のほうが太いので、うちの192.168.0.0/24宛てはR2から入ってきてほしい」と思っても、その判断をするのはAS 65002のルータです。そこでAS 65001は、R2から広告する経路に小さいMEDを、R1から広告する経路に大きいMEDを付けて送ります。AS 65002がMEDを見てくれれば、R2経由が選ばれます。

ここで大事なのは、MEDは「お願い」でしかないという点です。受け取った側は自分のポリシーでMEDを無視することも、上書きすることもできます。ベストパス選択の順序でもLOCAL_PREFAS_PATH長より後ろ(6番目)にいるため、相手がLOCAL_PREFで別の出口を選んでいればMEDの出番は来ません。

属性誰が決めるか効く範囲
LOCAL_PREF自分(自ASの中で完結)自ASからの出口
MULTI_EXIT_DISC(MED)相手(伝えるだけ)隣接ASから自ASへの入口

パス属性はそれぞれ伝わる範囲が違い、MEDはLOCAL_PREFの1つ外側という位置にあります。

属性伝わる範囲
WEIGHTそのルータの中だけ(広告に載らない。シスコ独自でRFCの属性ではない)
LOCAL_PREF自AS内だけ(iBGPには載る、eBGPには載らない)
MULTI_EXIT_DISC(MED)隣接ASまで(既定ではその先のASへは伝えない)
AS_PATH経路が通るすべてのAS

既定では同じ隣接ASのパス同士でしか比較しない

MEDでいちばん誤解されやすいのがこの点です。MEDの比較は、既定では「同じ隣接ASから受け取ったパス」の間だけで行われます。

RFC 4271 9.1.2.2節が、ベストパス選択でMEDを比較するのは「隣接ASが同一のパス同士」に限ると定めています。RFC 4451はこの条件をさらに詳しく整理した文書です。

理由は、MEDの値がAS内部の事情(回線の太さ、IGPコストなど)に基づいて各ASが勝手に決めるものだからです。AS 65001が付けた「50」とAS 65003が付けた「10」には何の共通の物差しもありません。それを大小比較しても意味がないので、既定では比較しないようになっています。

後述の検証ラボでいうと、R4は192.168.6.0/24を3つの経路で学習します。

経路受け取る相手隣接ASAS_PATH
R1経由R1(10.1.4.1)AS 6500165001 65004
R2経由R2(10.2.4.2)AS 6500165001 65004
R5経由R5(10.4.5.5)AS 6500365003 65004

3つともAS_PATH長が2で並ぶので、比較はMEDまで進みます。このときR1経由とR2経由は隣接ASが同じAS 65001なのでMEDで比較されますが、R5経由は隣接ASが違うのでMEDがどれだけ小さくても比較の土俵に乗りません。この挙動をSTEP 1とSTEP 2で実際に確認します。

MED検証ラボのトポロジ。AS 65001のR1・R2がAS 65002のR4とeBGPで接続し、R4はAS 65003のR5とも接続する。R5はAS 65004のR6と、R6はR1とも接続する。R6が広告する192.168.6.0/24をR4は3経路で学習する

ベストパス選択での位置づけ

MEDはベストパス選択の6番目に評価されます。BGPパス属性とベストパス選択の順序でいうと、ORIGIN(5番目)の次です。

順位比較項目
1WEIGHT(大きいほう。シスコ独自)
2LOCAL_PREF(大きいほう)
3自ASで生成した経路
4AS_PATH長(短いほう)
5ORIGIN(IGP < EGP < incomplete)
6MED(小さいほう。既定では隣接ASが同じパス同士のみ)
7eBGP経由をiBGP経由より優先

順位が低いということは、MEDを付けても上位の項目で勝負がついていれば効かないということです。MEDを効かせたい場合は、比較対象にしたいパス同士が5番目までで並んでいる必要があります。検証ラボで3経路すべてのAS_PATH長を2に揃えているのはこのためです。

再広告するときMEDはどうなるか

MEDは「隣接ASまで」の属性ですが、AS内部(iBGP)ではどう扱われるのか、そしてさらに別のASへ渡すときにどうなるのかは、分けて考える必要があります。

再広告する方向MEDの扱い
iBGPピアへ受け取った値をそのまま乗せる(無ければ無いまま)
eBGPピアへ受け取った値は引き継がない。自分で付けなければ属性ごと消える

eBGPへ渡すときに消えるのは、MEDが「自ASの入口の選び方」を伝えるものであり、その先のASにとっては無意味な値になるからです。逆にiBGPで透過するのは、AS内のすべてのルータが「隣のASがどの入口を推しているか」を同じ値で共有する必要があるからです。

この2つの違いは、実機での検証のSTEP 1で、同じプレフィックスのキャプチャーを並べて確認します。

設定方法

IOS XRでMEDを付けるには、route-policyset medを使い、ネイバーの出方向に適用します。

MEDを付けて広告する(R1がR4へ200を付ける例)
route-policy MED-200-OUT
  set med 200
  pass
end-policy
!
router bgp 65001
 neighbor 10.1.4.4
  address-family ipv4 unicast
   route-policy MED-200-OUT out

比較の対象範囲を変える設定はrouter bgpの直下に入れます。

コマンド効果
bgp bestpath med always隣接ASが違うパス同士でもMEDを比較する
bgp bestpath med missing-as-worstMEDが付いていないパスを最悪値(4294967295)として扱う
bgp bestpath med confedコンフェデレーション内のパスについてMEDを比較する
比較範囲を変える(R4に適用する例)
router bgp 65002
 bgp bestpath med always
 bgp bestpath med missing-as-worst

なお、IOS XEにあるbgp deterministic-med(同じASからのパスをまとめてから比較する設定)はIOS XR 26.1.1には存在しません。実際に投入すると% Invalid input detectedで弾かれます。IOS XRは常に同等の比較順序で動作するため、この設定自体が不要になっています。

missing-as-worstが無い既定の状態では、MEDが付いていないパスは0として扱われます。つまり「MEDを付けていないほうが優先される」という直感に反する動きになります。片側にだけMEDを付ける運用では注意してください。

実機での検証

XRd 26.1.1を6台使い、AS 65001(R1・R2・R3)、AS 65002(R4)、AS 65003(R5)、AS 65004(R6)の4つのASで構成しました。

  • AS 65001はR1とR2の2か所でAS 65002のR4とeBGP接続。R3は内部ルータで、3台はLoopback0どうしのiBGPフルメッシュ(next-hop-selfあり)とOSPF area 0で結ばれています
  • R4はAS 65003のR5とも接続し、R5はAS 65004のR6と、R6はさらにR1とeBGP接続しています
  • R6が192.168.6.0/24を広告します。R4はこれをR1経由・R2経由・R5経由の3通りで学習し、いずれもAS_PATH長は2です
  • eBGPネイバーにはroute-policy PASS-ALL in/outpassのみ)とsoft-reconfiguration inbound alwaysを入れてあります

観測対象は一貫してR4から見た192.168.6.0/24の経路です。

STEP 0:MEDがどこにも付いていない初期状態

まずMEDを一切設定していない状態です。R4は3つのパスを持ちます。

R4:show bgp 192.168.6.0/24(STEP 0)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24

Tue Sep  8 03:56:39.309 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 11           11
Last Modified: Sep  8 03:50:44.774 for 00:05:54
Paths: (3 available, best #1)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  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 11
      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)

3つのパスのどれにもmetricが表示されていません。MEDという属性そのものが付いていない状態です。AS_PATH長はいずれも2で、ORIGINもすべてIGPなので、5番目までの比較で差がつかず、最終的にルータIDなどの後段のタイブレークでPath #1(R1経由)がベストになっています。

STEP 1:R1→R4にMED 200、R2→R4にMED 50、R6→R1にMED 77を付ける

AS 65001側から、R4に対して「R2から入ってきてほしい」と伝えます。R1の出方向に200、R2の出方向に50を設定しました。あわせて、後半の「再広告」の確認用にR6からR1へMED 77も設定しています。

R1に投入した設定(R2は値が50、R6は値が77で同じ形)
route-policy MED-200-OUT
  set med 200
  pass
end-policy
!
router bgp 65001
 neighbor 10.1.4.4
  address-family ipv4 unicast
   route-policy MED-200-OUT out

R4のBGPテーブルにMetric列の値が現れ、ベストがR2経由に移りました。

R4:show bgp(STEP 1)
RP/0/RP0/CPU0:R4#show bgp

Tue Sep  8 04:05:33.326 UTC
BGP router identifier 10.0.0.4, local AS number 65002
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0000000   RD version: 21
BGP main routing table version 21
BGP NSR Initial initsync version 5 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs

Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
*  192.168.1.0/24     10.1.4.1               200             0 65001 i
*>                    10.2.4.2                50             0 65001 i
*  192.168.2.0/24     10.1.4.1               200             0 65001 i
*>                    10.2.4.2                50             0 65001 i
*  192.168.3.0/24     10.1.4.1               200             0 65001 i
*>                    10.2.4.2                50             0 65001 i
*> 192.168.4.0/24     0.0.0.0                  0         32768 i
*> 192.168.5.0/24     10.4.5.5                 0             0 65003 i
*  192.168.6.0/24     10.1.4.1               200             0 65001 65004 i
*>                    10.2.4.2                50             0 65001 65004 i
*                     10.4.5.5                               0 65003 65004 i

Processed 6 prefixes, 11 paths

192.168.6.0/24の3行を見ると、R1経由が200、R2経由が50、R5経由はMetric列が空欄(MEDなし)です。*>(ベスト)が付いているのはR2経由の行です。

詳細表示でも同じことが確認できます。

R4:show bgp 192.168.6.0/24(STEP 1)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24

Tue Sep  8 04:05:34.769 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 21           21
Last Modified: Sep  8 04:02:44.774 for 00:02:50
Paths: (3 available, best #2)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Path #1: Received by speaker 0
  Not advertised to any peer
  65001 65004, (received & used)
    10.1.4.1 from 10.1.4.1 (10.0.0.1)
      Origin IGP, metric 200, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #2: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  65001 65004, (received & used)
    10.2.4.2 from 10.2.4.2 (10.0.0.2)
      Origin IGP, metric 50, localpref 100, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 21
      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)

best #1からbest #2に移り、Path #2(R2経由、metric 50)にbestが付きました。同じ隣接AS 65001から来た2つのパスがMEDで比較され、値の小さいほうが選ばれています。AS 65001が意図したとおり、R4はR2から入ってくるようになりました。

iBGPではMEDがそのまま伝わる

同じSTEP 1で、R6がR1へ付けたMED 77の行方を追います。まずR1が受け取った状態です。

R1:show bgp 192.168.6.0/24(STEP 1)
RP/0/RP0/CPU0:R1#show bgp 192.168.6.0/24

Tue Sep  8 04:04:04.364 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                  9            9
Last Modified: Sep  8 04:02:56.774 for 00:01:07
Paths: (1 available, best #1)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.4 
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.1.4.4        
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.4 
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.1.4.4        
  65004, (received & used)
    10.1.6.6 from 10.1.6.6 (10.0.0.6)
      Origin IGP, metric 77, localpref 100, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 9
      Origin-AS validity: (disabled)

R1はmetric 77で受け取っています。これがiBGPでR3へ渡ったところを見ると、値が変わっていません。

R3:show bgp 192.168.6.0/24(STEP 1)
RP/0/RP0/CPU0:R3#show bgp 192.168.6.0/24

Tue Sep  8 04:05:10.332 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 10           10
Last Modified: Sep  8 04:02:56.774 for 00:02:13
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  65004, (received & used)
    10.0.0.1 (metric 2) from 10.0.0.1 (10.0.0.1)
      Origin IGP, metric 77, localpref 100, valid, internal, best, group-best
      Received Path ID 0, Local Path ID 1, version 10

metric 77のままです。行頭近くの(metric 2)はNEXT_HOPまでのIGPコストで、MEDとは別物なので混同しないよう注意してください。MEDはOrigin IGP,のあとに来るmetric 77のほうです。

実際のUPDATEパケットでも確認できます。R1がR3へ送ったiBGPのUPDATEです。

No.143 R1 → R3(iBGP)tshark -V
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 67
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 44
    Path attributes
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
<snip>
            Type Code: MP_REACH_NLRI (14)
            Length: 13
            Address family identifier (AFI): IPv4 (1)
            Subsequent address family identifier (SAFI): Unicast (1)
            Next hop: 10.0.0.1
                IPv4 Address: 10.0.0.1
            Number of Subnetwork points of attachment (SNPA): 0
            Network Layer Reachability Information (NLRI)
                192.168.6.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.6.0
        Path Attribute - ORIGIN: IGP
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: ORIGIN (1)
            Length: 1
            Origin: IGP (0)
        Path Attribute - AS_PATH: 65004 
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: AS_PATH (2)
            Length: 6
            AS Path segment: 65004
                Segment type: AS_SEQUENCE (2)
                Segment length (number of ASN): 1
                AS4: 65004
        Path Attribute - MULTI_EXIT_DISC: 77
            Flags: 0x80, Optional, Non-transitive, Complete
<snip>
            Type Code: MULTI_EXIT_DISC (4)
            Length: 4
            Multiple exit discriminator: 77
        Path Attribute - LOCAL_PREF: 100
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: LOCAL_PREF (5)
            Length: 4
            Local preference: 100

MULTI_EXIT_DISC: 77がそのまま乗っています。iBGP向けなのでLOCAL_PREF: 100も一緒に付いている点も確認できます。

上のtshark出力のパケット(No.143 UPDATE)のpcapをダウンロード

eBGPへはMEDが引き継がれない

同じ192.168.6.0/24を、今度はR1がeBGPでR4へ渡すところを見ます。

No.75 R1 → R4(eBGP)tshark -V
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 64
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 41
    Path attributes
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
<snip>
            Type Code: MP_REACH_NLRI (14)
            Length: 13
            Address family identifier (AFI): IPv4 (1)
            Subsequent address family identifier (SAFI): Unicast (1)
            Next hop: 10.1.4.1
                IPv4 Address: 10.1.4.1
            Number of Subnetwork points of attachment (SNPA): 0
            Network Layer Reachability Information (NLRI)
                192.168.6.0/24
                    MP Reach NLRI prefix length: 24
                    MP Reach NLRI IPv4 prefix: 192.168.6.0
        Path Attribute - ORIGIN: IGP
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: ORIGIN (1)
            Length: 1
            Origin: IGP (0)
        Path Attribute - AS_PATH: 65001 65004 
            Flags: 0x40, Transitive, Well-known, Complete
<snip>
            Type Code: AS_PATH (2)
            Length: 10
            AS Path segment: 65001 65004
                Segment type: AS_SEQUENCE (2)
                Segment length (number of ASN): 2
                AS4: 65001
                AS4: 65004
        Path Attribute - MULTI_EXIT_DISC: 200
            Flags: 0x80, Optional, Non-transitive, Complete
<snip>
            Type Code: MULTI_EXIT_DISC (4)
            Length: 4
            Multiple exit discriminator: 200

MULTI_EXIT_DISC: 200になっています。 R6から受け取った77は引き継がれず、R1が自分の出方向ポリシー(set med 200)で付け直した値に置き換わりました。LOCAL_PREFはeBGP向けなので載っていません。

上のtshark出力のパケット(No.75 UPDATE)のpcapをダウンロード

同じプレフィックスについて、R1が2方向へ再広告した結果をまとめると次のようになります。

再広告先パケットMEDの値
R3(iBGP)No.14377(R6から受け取った値のまま)
R4(eBGP)No.75200(R1の出方向ポリシーの値)

もしR1にset medを設定していなければ、eBGP側のUPDATEにはMULTI_EXIT_DISC属性そのものが載りません。実際、同じNo.143のUPDATEに含まれるもう1つの経路192.168.5.0/24(R1がAS 65002からMEDなしで受け取ったもの)にはMULTI_EXIT_DISCが付いておらず、「無いものは無いまま」iBGPに流れています。

STEP 2:隣接ASが違うパスに、もっと小さいMEDを付ける

ここが本題です。R5からR4へMED 10を付けます。R1経由の200、R2経由の50より小さい値ですが、隣接ASはAS 65003で、他の2つ(AS 65001)とは異なります。

R4:show bgp 192.168.6.0/24(STEP 2)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24

Tue Sep  8 04:07:35.810 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 21           21
Last Modified: Sep  8 04:02:44.774 for 00:04:51
Paths: (3 available, best #2)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Path #1: Received by speaker 0
  Not advertised to any peer
  65001 65004, (received & used)
    10.1.4.1 from 10.1.4.1 (10.0.0.1)
      Origin IGP, metric 200, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #2: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  65001 65004, (received & used)
    10.2.4.2 from 10.2.4.2 (10.0.0.2)
      Origin IGP, metric 50, localpref 100, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 21
      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, metric 10, localpref 100, valid, external, group-best
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)

Path #3にmetric 10が入りましたが、ベストはbest #2のまま動きません。3つの中でいちばん小さいMEDを持つパスが選ばれない、というこの結果が「既定では同じ隣接ASのパス同士でしか比較しない」ことの証拠です。

R4から見ると、比較は次のように行われています。

パス隣接ASMED比較の扱い
Path #1(R1経由)AS 65001200Path #2と比較 → 負け
Path #2(R2経由)AS 6500150Path #1と比較 → 勝ち → ベスト
Path #3(R5経由)AS 6500310比較対象なし(同じ隣接ASの相手がいない)

STEP 3:bgp bestpath med always で比較範囲を広げる

R4にbgp bestpath med alwaysを入れて、隣接ASが違っていてもMEDを比較させます。

R4に投入した設定(STEP 3)
router bgp 65002
 bgp bestpath med always
R4:show bgp 192.168.6.0/24(STEP 3)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24

Tue Sep  8 04:10:53.495 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 23           23
Last Modified: Sep  8 04:10:17.774 for 00:00:35
Paths: (3 available, best #3)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Path #1: Received by speaker 0
  Not advertised to any peer
  65001 65004, (received & used)
    10.1.4.1 from 10.1.4.1 (10.0.0.1)
      Origin IGP, metric 200, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      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, metric 50, localpref 100, valid, external, group-best
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #3: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  65003 65004, (received & used)
    10.4.5.5 from 10.4.5.5 (10.0.0.5)
      Origin IGP, metric 10, localpref 100, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 23
      Origin-AS validity: (disabled)

best #2からbest #3に移り、MEDがいちばん小さいR5経由(AS 65003)がベストになりました。設定を1行入れただけで、STEP 2では動かなかったベストパスが動いています。「MEDの比較対象は設定で変わる」ことがそのまま現れた結果です。

なお192.168.1.0/24など、そもそもAS 65001からの2パスしか無いプレフィックスは、この設定を入れてもベストが変わりません。比較する相手が増えていないためです。

STEP 4:MEDが無いパスを最悪値として扱う

R5→R4のMEDを外し(route-policy PASS-ALL outに戻す)、代わりにR4へbgp bestpath med missing-as-worstを追加します。bgp bestpath med alwaysは入れたままです。

R4の設定(STEP 4)
router bgp 65002
 bgp bestpath med always
 bgp bestpath med missing-as-worst
R4:show bgp 192.168.6.0/24(STEP 4)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24

Tue Sep  8 04:14:35.524 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 26           26
Last Modified: Sep  8 04:13:54.774 for 00:00:40
Paths: (3 available, best #2)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Path #1: Received by speaker 0
  Not advertised to any peer
  65001 65004, (received & used)
    10.1.4.1 from 10.1.4.1 (10.0.0.1)
      Origin IGP, metric 200, localpref 100, valid, external
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)
  Path #2: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  65001 65004, (received & used)
    10.2.4.2 from 10.2.4.2 (10.0.0.2)
      Origin IGP, metric 50, localpref 100, valid, external, best, group-best
      Received Path ID 0, Local Path ID 1, version 26
      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, metric 4294967295, localpref 100, valid, external, group-best
      Received Path ID 0, Local Path ID 0, version 0
      Origin-AS validity: (disabled)

MEDを外したPath #3がmetric 4294967295と表示されています。これは4バイト符号なし整数の最大値で、missing-as-worstが「MEDなし」を最悪値に読み替えた結果です。ベストはPath #2(metric 50)に戻りました。

この設定が無ければ、MEDなしは0として扱われます。bgp bestpath med alwaysと併用している今回の構成では、missing-as-worstが無い状態だとPath #3が0扱いで最優先になってしまいます。片側にだけMEDを付けるときは、この既定の向きに注意してください。

STEP 5:すべて撤去する(最終状態)

R1・R2・R6のset medポリシーと、R4のbgp bestpath medを2行とも削除し、STEP 0と同じ設定に戻しました。

R4:show bgp 192.168.6.0/24(STEP 5)
RP/0/RP0/CPU0:R4#show bgp 192.168.6.0/24

Tue Sep  8 04:18:52.583 UTC
BGP routing table entry for 192.168.6.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 30           30
Last Modified: Sep  8 04:17:34.774 for 00:01:18
Paths: (3 available, best #1)
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to update-groups (with more than one peer):
    0.2 
  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 30
      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)

metricの表示がすべて消え、ベストもbest #1(R1経由)に戻り、STEP 0と同じ状態になりました。

検証Configおよびshow結果

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

ファイル内容
..._show.txtshow version / show interface description / show route / show bgp / show bgp <プレフィックス> / show bgp neighbor / show bgp neighbors <ピア> advertised-routes|routes|received routes / show bgp update-group / show rpl route-policy など
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)

最終状態(STEP 5)はSTEP 0と同一で、MEDに関する設定は一切入っていません。

STEP 0:MEDがどこにも付いていない初期状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 1:R1→R4にMED 200、R2→R4にMED 50、R6→R1にMED 77を適用した状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 2:R5→R4にもMED 10を適用した状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 3:R4にbgp bestpath med alwaysを適用した状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 4:R5→R4のMEDを外し、R4にbgp bestpath med missing-as-worstを追加した状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

STEP 5:すべての設定を撤去した状態(最終状態、設定はSTEP 0と同一)

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R5showlogrun
R6showlogrun

キャプチャー全体は次のとおりです。STEP 0からSTEP 5までのすべてのUPDATEが入っています。

R1 - R4間(eBGP)のキャプチャー全体をダウンロード

R2 - R4間(eBGP)のキャプチャー全体をダウンロード

R4 - R5間(eBGP)のキャプチャー全体をダウンロード

R1 - R3間(AS 65001内部・iBGP)のキャプチャー全体をダウンロード

参考

資料タイトル概要
RFC 4271A Border Gateway Protocol 4 (BGP-4)5.1.4節でMULTI_EXIT_DISCを定義。9.1.2.2節で、MEDの比較を隣接ASが同一のパス同士に限ることを規定している。
RFC 4451BGP MULTI_EXIT_DISC (MED) ConsiderationsMEDの比較条件と、実装差によって起きる問題を整理した文書。
RFC 7454BGP Operations and Security運用上の推奨事項。隣接ASから受け取るMEDの扱いを含む。
IANABorder Gateway Protocol (BGP) Parametersパス属性のType codeの割り当て一覧。

関連記事