MEDとは
MULTI_EXIT_DISC(MED、Type code 4)は、隣接ASに対して「自ASへはどの入口から入ってきてほしいか」を伝えるパス属性です。BGPパス属性とベストパス選択で解説したとおりoptional non-transitiveに分類されます。
「optional」はすべての実装が理解できるとは限らないことを、「non-transitive」は理解できない実装が受け取ったときにそのまま転送せず捨てることを意味します。実際にはMEDを理解しない実装はまずありませんが、non-transitiveであることは効き方に直結します。MEDは受け取ったASより先へは自動的には広がりません。
| 項目 | 内容 |
|---|---|
| Type code | 4 |
| 分類 | 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_PREFやAS_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つの経路で学習します。
| 経路 | 受け取る相手 | 隣接AS | AS_PATH |
|---|---|---|---|
| R1経由 | R1(10.1.4.1) | AS 65001 | 65001 65004 |
| R2経由 | R2(10.2.4.2) | AS 65001 | 65001 65004 |
| R5経由 | R5(10.4.5.5) | AS 65003 | 65003 65004 |
3つともAS_PATH長が2で並ぶので、比較はMEDまで進みます。このときR1経由とR2経由は隣接ASが同じAS 65001なのでMEDで比較されますが、R5経由は隣接ASが違うのでMEDがどれだけ小さくても比較の土俵に乗りません。この挙動をSTEP 1とSTEP 2で実際に確認します。
ベストパス選択での位置づけ
MEDはベストパス選択の6番目に評価されます。BGPパス属性とベストパス選択の順序でいうと、ORIGIN(5番目)の次です。
| 順位 | 比較項目 |
|---|---|
| 1 | WEIGHT(大きいほう。シスコ独自) |
| 2 | LOCAL_PREF(大きいほう) |
| 3 | 自ASで生成した経路 |
| 4 | AS_PATH長(短いほう) |
| 5 | ORIGIN(IGP < EGP < incomplete) |
| 6 | MED(小さいほう。既定では隣接ASが同じパス同士のみ) |
| 7 | eBGP経由を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-policyでset medを使い、ネイバーの出方向に適用します。
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-worst | MEDが付いていないパスを最悪値(4294967295)として扱う |
bgp bestpath med confed | コンフェデレーション内のパスについてMEDを比較する |
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/out(passのみ)とsoft-reconfiguration inbound alwaysを入れてあります
観測対象は一貫してR4から見た192.168.6.0/24の経路です。
STEP 0:MEDがどこにも付いていない初期状態
まずMEDを一切設定していない状態です。R4は3つのパスを持ちます。
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も設定しています。
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 outR4のBGPテーブルにMetric列の値が現れ、ベストがR2経由に移りました。
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 paths192.168.6.0/24の3行を見ると、R1経由が200、R2経由が50、R5経由はMetric列が空欄(MEDなし)です。*>(ベスト)が付いているのはR2経由の行です。
詳細表示でも同じことが確認できます。
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が受け取った状態です。
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へ渡ったところを見ると、値が変わっていません。
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 10metric 77のままです。行頭近くの(metric 2)はNEXT_HOPまでのIGPコストで、MEDとは別物なので混同しないよう注意してください。MEDはOrigin IGP,のあとに来るmetric 77のほうです。
実際のUPDATEパケットでも確認できます。R1がR3へ送ったiBGPのUPDATEです。
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: 100MULTI_EXIT_DISC: 77がそのまま乗っています。iBGP向けなのでLOCAL_PREF: 100も一緒に付いている点も確認できます。
eBGPへはMEDが引き継がれない
同じ192.168.6.0/24を、今度はR1がeBGPでR4へ渡すところを見ます。
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: 200MULTI_EXIT_DISC: 200になっています。 R6から受け取った77は引き継がれず、R1が自分の出方向ポリシー(set med 200)で付け直した値に置き換わりました。LOCAL_PREFはeBGP向けなので載っていません。
同じプレフィックスについて、R1が2方向へ再広告した結果をまとめると次のようになります。
| 再広告先 | パケット | MEDの値 |
|---|---|---|
| R3(iBGP) | No.143 | 77(R6から受け取った値のまま) |
| R4(eBGP) | No.75 | 200(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)とは異なります。
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から見ると、比較は次のように行われています。
| パス | 隣接AS | MED | 比較の扱い |
|---|---|---|---|
| Path #1(R1経由) | AS 65001 | 200 | Path #2と比較 → 負け |
| Path #2(R2経由) | AS 65001 | 50 | Path #1と比較 → 勝ち → ベスト |
| Path #3(R5経由) | AS 65003 | 10 | 比較対象なし(同じ隣接ASの相手がいない) |
STEP 3:bgp bestpath med always で比較範囲を広げる
R4にbgp bestpath med alwaysを入れて、隣接ASが違っていてもMEDを比較させます。
router bgp 65002
bgp bestpath med alwaysRP/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は入れたままです。
router bgp 65002
bgp bestpath med always
bgp bestpath med missing-as-worstRP/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と同じ設定に戻しました。
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.txt | show 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出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 1:R1→R4にMED 200、R2→R4にMED 50、R6→R1にMED 77を適用した状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 2:R5→R4にもMED 10を適用した状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 3:R4にbgp bestpath med alwaysを適用した状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 4:R5→R4のMEDを外し、R4にbgp bestpath med missing-as-worstを追加した状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
STEP 5:すべての設定を撤去した状態(最終状態、設定はSTEP 0と同一)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R5 | show | log | run |
| R6 | show | log | run |
キャプチャー全体は次のとおりです。STEP 0からSTEP 5までのすべてのUPDATEが入っています。
R1 - R4間(eBGP)のキャプチャー全体をダウンロード
R2 - R4間(eBGP)のキャプチャー全体をダウンロード
R4 - R5間(eBGP)のキャプチャー全体をダウンロード
R1 - R3間(AS 65001内部・iBGP)のキャプチャー全体をダウンロード
参考
| 資料 | タイトル | 概要 |
|---|---|---|
| RFC 4271 | A Border Gateway Protocol 4 (BGP-4) | 5.1.4節でMULTI_EXIT_DISCを定義。9.1.2.2節で、MEDの比較を隣接ASが同一のパス同士に限ることを規定している。 |
| RFC 4451 | BGP MULTI_EXIT_DISC (MED) Considerations | MEDの比較条件と、実装差によって起きる問題を整理した文書。 |
| RFC 7454 | BGP Operations and Security | 運用上の推奨事項。隣接ASから受け取るMEDの扱いを含む。 |
| IANA | Border Gateway Protocol (BGP) Parameters | パス属性のType codeの割り当て一覧。 |