NEXT_HOPとは
NEXT_HOP(Type code 3)は、その経路へパケットを送るときに次に渡すべきルータのIPアドレスを表すパス属性です。BGPパス属性とベストパス選択で解説したとおりwell-known mandatoryに分類され、UPDATEには必ず含まれます。
紛らわしいのは、NEXT_HOPが「経路を広告してきたルータのアドレス」とは限らないことです。あくまでパケットの転送先を指す属性であり、広告してきたルータと一致するのは「たまたま両者が同じであることが多い」からにすぎません。この2つがずれる場面がthird-party next hop(後述)で、本記事の主題です。
| 項目 | 内容 |
|---|---|
| Type code | 3 |
| 分類 | Well-known mandatory(すべての実装が理解でき、UPDATEに必ず入る) |
| 値 | IPv4アドレス4バイト(IPv6ではMP_REACH_NLRI内のNext hopフィールド) |
| 定義 | RFC 4271 5.1.3節 |
NEXT_HOPが設定される規則
広告する側が、広告先のピアごとに値を決めます。基本の規則は次の2つです。
| 広告先 | 動作 |
|---|---|
| eBGPピア | NEXT_HOPを自分のアドレスに書き換える(そのピアとの接続に使っているインタフェースのアドレス) |
| iBGPピア | NEXT_HOPを書き換えない(受け取った値をそのまま渡す) |
iBGPで書き換えないのは、AS境界を越えていないためです。AS内では出口までの経路をIGPが知っている前提なので、「AS外のどこへ出るのか」という情報を保ったまま配る設計になっています。この設計が原因で起きる到達性の問題と、その解決策はBGP next-hop-selfで解説しています。
そのうえで、eBGP側には次の例外があります。
共有セグメントでのthird-party next hop
RFC 4271 5.1.3節は、eBGPピアへ広告する際のNEXT_HOPについて、広告先ピアと同じサブネット上に、より適切な転送先がいる場合はそのアドレスをそのまま渡してよいと定めています。これがthird-party next hop(サードパーティネクストホップ)です。「third-party」は、広告してきた本人(second party)でも受け取った本人(first party)でもない、第三のルータを指す呼び方です。
具体的には、3台以上が1つのL2セグメントを共有していて、そのうち2組だけがBGPピアになっているときに現れます。
- R1・R2・R3が同じセグメント上にいる
- BGPピアはR1 - R2とR2 - R3の2組だけ(R1とR3はピアではない)
- R3が広告した経路をR2がR1へ中継する
このときR2がNEXT_HOPを自分のアドレスに書き換えると、R1からのパケットは「R1 → R2 → R3」と同じセグメントを2回通ることになります。R1はR3と直接通信できるのですから、これは無駄です。そこでR2はNEXT_HOPをR3のアドレスのままR1へ渡し、R1が直接R3へ送れるようにします。
NEXT_HOPの値 | R1から見たパケットの流れ |
|---|---|
| R2のアドレス | R1 → R2 → R3(同じセグメントを2回通る) |
| R3のアドレス(third-party) | R1 → R3(1回で済む) |
同じ5.1.3節には、逆向きの規則もあります。広告先のピア自身のアドレスがNEXT_HOPになる場合は、自分のアドレスに置き換えなければならないというものです。R1から受け取った経路をR2がR1へ返すとき、NEXT_HOPをR1のままにするとR1は自分自身へ転送することになってしまうためです。
この2つの規則は「どちらを適用するか」を広告先ピアごとに判断するので、同じ経路でも渡す相手によってNEXT_HOPの値が変わります。後述の検証では、R2が同じタイミングでR1とR3にそれぞれ違うNEXT_HOPを送っている様子を実機で確認します。
再帰的ルックアップとNEXT_HOPの到達性
BGPの経路は、NEXT_HOPのアドレスがルーティングテーブルで解決できて初めて使えます。BGPはNEXT_HOP宛ての経路をルーティングテーブルから引き、その経路の出力インタフェースと転送先を借りて実際の転送を行います。これを再帰的ルックアップと呼びます。
引けなかった場合、その経路は無効と判断され、ベストパスに選ばれずルーティングテーブルにも載りません。show bgpでは>(best)が消え、詳細表示ではNEXT_HOPに(inaccessible)が付きます。
third-party next hopの場合、NEXT_HOPは共有セグメント上の直結アドレスなので、受け取ったルータは接続経路で解決できます。問題になるのは、その経路をさらにiBGPでAS内へ配ったときです。NEXT_HOPは書き換えられずAS内を伝わるため、AS内の他のルータからも共有セグメントへ到達できる必要があります。検証ではAS 65001内のR4がこの状況にあたり、OSPFで共有セグメントの経路を持っているため解決できています。
NEXT_HOPを書き換える2つの方法
IOS XRでNEXT_HOPを明示的に制御する方法は2つあります。適用する単位が違います。
| 方法 | 単位 | 用途 |
|---|---|---|
next-hop-self | ネイバー単位 | そのピアへ広告するすべての経路のNEXT_HOPを自分のアドレスにする |
ルートポリシーのset next-hop | プレフィックス単位 | 条件に一致した経路だけNEXT_HOPを指定した値にする |
router bgp <AS番号>
neighbor <ピアのアドレス>
address-family ipv4 unicast
next-hop-selfprefix-set <プレフィックスセット名>
<プレフィックス>
end-set
!
route-policy <ポリシー名>
if destination in <プレフィックスセット名> then
set next-hop <アドレス>
endif
pass
end-policy
!
router bgp <AS番号>
neighbor <ピアのアドレス>
address-family ipv4 unicast
route-policy <ポリシー名> outthird-party next hopは「同じセグメント上の他のルータへ直接送らせる」最適化なので、意図的に自分を経由させたい場合(トラフィックを計測したい、フィルタを通したい、など)はこれらで打ち消すことになります。
実機での検証
XRd(IOS XR 26.1.1)4台とL2スイッチ1台のラボで、次の4点を確認します。
- 共有セグメント上でthird-party next hopが実際に発生すること
- 同じ経路でも、広告先のピアによって
NEXT_HOPの値が変わること next-hop-selfで打ち消せること(ネイバー単位)- ルートポリシーの
set next-hopでも打ち消せること(プレフィックス単位)
構成の要点は次のとおりです。
- R1・R2・R3が1つの共有セグメント
10.0.123.0/24に接続しています。3台ともスイッチ配下の同じL2セグメント上にいます - eBGPピアはR1 - R2とR2 - R3の2組だけです。R1とR3は同じセグメント上にいますが、BGPピアではありません
- R3が
192.168.3.0/24を広告します。この経路がR2を経由してR1へ届くときのNEXT_HOPを追いかけます - AS 65001にはR4を置き、R1とiBGP(Loopback0どうし)とOSPF area 0で接続しています。third-party next hopがiBGPでAS内へどう伝わるかを見るためです
| ルータ | AS | 共有セグメント側のアドレス | 広告するネットワーク |
|---|---|---|---|
| R1 | 65001 | 10.0.123.1 | 192.168.1.0/24 |
| R2 | 65002 | 10.0.123.2 | 192.168.2.0/24 |
| R3 | 65003 | 10.0.123.3 | 192.168.3.0/24 |
| R4 | 65001 | (接続なし。R1とP2P) | 192.168.4.0/24 |
各STEPで変更する内容です。設定を変えるのはR2だけです。
| STEP | R2への操作 |
|---|---|
| 0 | ポリシーはPASS-ALLのみ(初期状態) |
| 1 | R1向けネイバーにnext-hop-self |
| 2 | next-hop-selfを撤去(設定はSTEP 0と同一に戻る) |
| 3 | R1向けにルートポリシーNH-OVERRIDE(192.168.3.0/24だけset next-hop 10.0.123.2) |
| 4 | ルートポリシーを撤去(設定はSTEP 0と同一に戻る) |
R1 - スイッチ間とR3 - スイッチ間のリンクでパケットキャプチャーを取得しています(tcp port 179)。
STEP 0:共有セグメントでthird-party next hopが出る
R2がR1へ広告している経路です。192.168.3.0/24だけNext Hopが10.0.123.3(R3)になっています。他の3つはR2自身の10.0.123.2です。
Network Next Hop From AS Path
192.168.1.0/24 10.0.123.2 10.0.123.1 65002 65001i
192.168.2.0/24 10.0.123.2 Local 65002i
192.168.3.0/24 10.0.123.3 10.0.123.3 65002 65003i
192.168.4.0/24 10.0.123.2 10.0.123.1 65002 65001i
Processed 4 prefixes, 4 paths同じ瞬間に、R2がR3へ広告している内容です。192.168.3.0/24のNext Hopは10.0.123.2(R2自身)に変わり、代わりに192.168.1.0/24と192.168.4.0/24が10.0.123.1(R1)になっています。
Network Next Hop From AS Path
192.168.1.0/24 10.0.123.1 10.0.123.1 65002 65001i
192.168.2.0/24 10.0.123.2 Local 65002i
192.168.3.0/24 10.0.123.2 10.0.123.3 65002 65003i
192.168.4.0/24 10.0.123.1 10.0.123.1 65002 65001i
Processed 4 prefixes, 4 paths2つを並べると、R2がピアごとにNEXT_HOPを決めていることが分かります。
| プレフィックス | R1へ広告するとき | R3へ広告するとき | 適用された規則 |
|---|---|---|---|
| 192.168.3.0/24(R3発) | 10.0.123.3 | 10.0.123.2 | R1へは第三者R3を渡す。R3へは「相手自身のアドレス」になるので自分に置き換える |
| 192.168.1.0/24(R1発) | 10.0.123.2 | 10.0.123.1 | R3へは第三者R1を渡す。R1へは「相手自身のアドレス」になるので自分に置き換える |
| 192.168.2.0/24(R2発) | 10.0.123.2 | 10.0.123.2 | 自分が起点なので常に自分のアドレス |
R1側です。192.168.3.0/24を広告してきたのは10.0.123.2(R2)ですが、NEXT_HOPは10.0.123.3(R3)です。fromの直前に表示されるアドレスがNEXT_HOPで、fromのあとが広告元です。
BGP routing table entry for 192.168.3.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 6 6
Last Modified: Sep 7 14:41:33.774 for 00:01:47
Paths: (1 available, best #1)
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.4
Path #1: Received by speaker 0
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.4
65002 65003, (received & used)
10.0.123.3 from 10.0.123.2 (10.0.0.2)
Origin IGP, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 6
Origin-AS validity: (disabled)ルーティングテーブルにも10.0.123.3で載ります。
B 192.168.2.0/24 [20/0] via 10.0.123.2, 00:02:01
B 192.168.3.0/24 [20/0] via 10.0.123.3, 00:01:47
B 192.168.4.0/24 [200/0] via 10.0.0.4, 00:02:01tracerouteでも、R2を経由せずR3へ直接届いています。1ホップです。
Type escape sequence to abort.
Tracing the route to 192.168.3.1
1 10.0.123.3 23 msec * 11 msecAS 65001内のR4です。R1からiBGPで受け取っていますが、iBGPではNEXT_HOPを書き換えないため10.0.123.3のままです。R4はOSPFで共有セグメント10.0.123.0/24の経路を持っているので、(metric 2)と表示されているとおり再帰的ルックアップが成立しています。
BGP routing table entry for 192.168.3.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 6 6
Last Modified: Sep 7 14:41:33.774 for 00:03:19
Paths: (1 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002 65003, (received & used)
10.0.123.3 (metric 2) from 10.0.0.1 (10.0.0.1)
Origin IGP, localpref 100, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 6R4からのtracerouteもR2を経由しません。R1を通って共有セグメントへ出たあと、そのままR3へ届いています。
Type escape sequence to abort.
Tracing the route to 192.168.3.1
1 10.1.4.1 6 msec 4 msec 4 msec
2 10.0.123.3 10 msec * 11 msecパケットで確認する
R1 - スイッチ間のキャプチャー(bgp-next-hop-r1sw.pcap)のNo.40が、R2からR1へ送られたUPDATEです。1つのTCPセグメントに2つのUPDATEが入っており、両方に別々のNEXT_HOPが入っています。以下はWiresharkのtsharkで詳細表示したもので、フラグのビット内訳は<snip>で省略しています。
1つめは192.168.3.0/24で、Next hopは10.0.123.3(R3)です。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 57
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 34
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.123.3
IPv4 Address: 10.0.123.3
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
192.168.3.0/24
MP Reach NLRI prefix length: 24
MP Reach NLRI IPv4 prefix: 192.168.3.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: 65002 65003
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 10
AS Path segment: 65002 65003
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 2
AS4: 65002
AS4: 65003続く2つめは192.168.1.0/24で、Next hopは10.0.123.2(R2自身)です。同じセグメント・同じパケットの中で、値が使い分けられていることが分かります。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 57
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 34
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.123.2
IPv4 Address: 10.0.123.2
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
192.168.1.0/24
MP Reach NLRI prefix length: 24
MP Reach NLRI IPv4 prefix: 192.168.1.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: 65002 65001
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 10
AS Path segment: 65002 65001
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 2
AS4: 65002
AS4: 65001R3 - スイッチ間のキャプチャー(bgp-next-hop-r3sw.pcap)にも対称の動きが記録されています。No.18は、R2がR1発の192.168.1.0/24をR3へ広告したUPDATEで、Next hopは10.0.123.1(R1)です。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 57
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 34
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.123.1
IPv4 Address: 10.0.123.1
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
192.168.1.0/24
MP Reach NLRI prefix length: 24
MP Reach NLRI IPv4 prefix: 192.168.1.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: 65002 65001
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 10
AS Path segment: 65002 65001
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 2
AS4: 65002
AS4: 65001STEP 1:next-hop-selfで自分のアドレスに固定する
R2のR1向けネイバーにnext-hop-selfを入れます。
router bgp 65002
bgp router-id 10.0.0.2
address-family ipv4 unicast
network 192.168.2.0/24
!
neighbor 10.0.123.1
remote-as 65001
description eBGP to R1 (shared segment)
address-family ipv4 unicast
next-hop-self
route-policy PASS-ALL in
route-policy PASS-ALL out
soft-reconfiguration inbound always
!
!show bgp neighborにNEXT_HOP is always this routerが現れます。
For Address Family: IPv4 Unicast
BGP neighbor version 6
BGP neighbor quick-withdraw version 6
Update group: 0.1 Filter-group: 0.3 No Refresh request being processed
Inbound soft reconfiguration allowed (override route-refresh)
NEXT_HOP is always this router
AF-dependent capabilities:
Extended Nexthop Encoding: advertised and received
Route refresh request: received 0, sent 0
Policy for incoming advertisements is PASS-ALL
Policy for outgoing advertisements is PASS-ALLR1へ広告する192.168.3.0/24のNext Hopが10.0.123.2(R2自身)に変わりました。
Network Next Hop From AS Path
192.168.2.0/24 10.0.123.2 Local 65002i
192.168.3.0/24 10.0.123.2 10.0.123.3 65002 65003i
Processed 2 prefixes, 2 pathsR1側でも10.0.123.2になり、tracerouteは2ホップに増えました。R1のパケットが共有セグメントを2回通るようになったということです。
65002 65003, (received & used)
10.0.123.2 from 10.0.123.2 (10.0.0.2)
Origin IGP, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 7
Origin-AS validity: (disabled)Type escape sequence to abort.
Tracing the route to 192.168.3.1
1 10.0.123.2 25 msec 7 msec 6 msec
2 10.0.123.3 9 msec * 11 msecパケットでも確認できます。No.58がnext-hop-selfを入れた直後にR2がR1へ送ったUPDATEです。1つのTCPセグメントに3つのUPDATEが入っており、そのうち2つめの192.168.3.0/24を示します。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 57
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 34
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.123.2
IPv4 Address: 10.0.123.2
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
192.168.3.0/24
MP Reach NLRI prefix length: 24
MP Reach NLRI IPv4 prefix: 192.168.3.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: 65002 65003
Flags: 0x40, Transitive, Well-known, Complete
<snip>
Type Code: AS_PATH (2)
Length: 10
AS Path segment: 65002 65003
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 2
AS4: 65002
AS4: 65003STEP 2:next-hop-selfを外す
next-hop-selfを撤去します。R2のrunning-configはSTEP 0と完全に一致します。
R1へ広告する192.168.3.0/24のNext Hopは10.0.123.3に戻りました。
Network Next Hop From AS Path
192.168.1.0/24 10.0.123.2 10.0.123.1 65002 65001i
192.168.2.0/24 10.0.123.2 Local 65002i
192.168.3.0/24 10.0.123.3 10.0.123.3 65002 65003i
192.168.4.0/24 10.0.123.2 10.0.123.1 65002 65001i
Processed 4 prefixes, 4 pathstracerouteも1ホップに戻ります。
Type escape sequence to abort.
Tracing the route to 192.168.3.1
1 10.0.123.3 7 msec * 8 msecBGP AS_PATH属性の検証では、ポリシーを外してもベストパスが自動では戻りませんでした。あちらは複数パスの優劣がタイブレークの「経路の学習時期」で決まっていたためです。NEXT_HOPの書き換えはパスが1本しかない状況での属性の変更なので、撤去した時点でそのまま戻ります。
STEP 3:ルートポリシーでプレフィックス単位に書き換える
今度はnext-hop-selfではなく、ルートポリシーで192.168.3.0/24だけを書き換えます。R2に次の設定を入れ、R1向けの出方向ポリシーをPASS-ALLからNH-OVERRIDEに差し替えます。
prefix-set PS-FROM-R3
192.168.3.0/24
end-set
!route-policy NH-OVERRIDE
if destination in PS-FROM-R3 then
set next-hop 10.0.123.2
endif
pass
end-policy
!R1向けの出方向ポリシーがNH-OVERRIDEに差し替わっています。
router bgp 65002
bgp router-id 10.0.0.2
address-family ipv4 unicast
network 192.168.2.0/24
!
neighbor 10.0.123.1
remote-as 65001
description eBGP to R1 (shared segment)
address-family ipv4 unicast
route-policy PASS-ALL in
route-policy NH-OVERRIDE out
soft-reconfiguration inbound always
!
!結果はSTEP 1と同じで、192.168.3.0/24のNext Hopが10.0.123.2になります。
Network Next Hop From AS Path
192.168.2.0/24 10.0.123.2 Local 65002i
192.168.3.0/24 10.0.123.2 10.0.123.3 65002 65003i
Processed 2 prefixes, 2 pathsType escape sequence to abort.
Tracing the route to 192.168.3.1
1 10.0.123.2 8 msec 8 msec 6 msec
2 10.0.123.3 8 msec * 11 msecパケットの中身もSTEP 1と変わりません。No.100の2つめのUPDATEを冒頭からNext hopまで示します(以降の属性はNo.58と同一です)。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 57
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 34
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.123.2受け取ったR1から見ると、next-hop-selfで書き換えられたのかルートポリシーで書き換えられたのかは区別できません。違いは書き換える側の適用範囲だけです。
| 方法 | 192.168.3.0/24 | 192.168.2.0/24 |
|---|---|---|
next-hop-self(STEP 1) | 10.0.123.2に書き換え | 10.0.123.2(もともと自分のアドレス) |
NH-OVERRIDE(STEP 3) | 10.0.123.2に書き換え | ポリシーの条件に一致しないので素通り |
このラボでは192.168.3.0/24以外に第三者のNEXT_HOPを持つ経路が無いため、両者の結果は一致します。共有セグメント上に複数のASがぶら下がっていて、一部の経路だけ自分を経由させたい場合にプレフィックス単位の指定が効いてきます。
STEP 4:ルートポリシーを外す
NH-OVERRIDEとPS-FROM-R3を撤去し、R1向けの出方向ポリシーをPASS-ALLに戻します。4台すべてのrunning-configがSTEP 0と一致し、NEXT_HOPも10.0.123.3に戻りました。
Network Next Hop From AS Path
192.168.1.0/24 10.0.123.2 10.0.123.1 65002 65001i
192.168.2.0/24 10.0.123.2 Local 65002i
192.168.3.0/24 10.0.123.3 10.0.123.3 65002 65003i
192.168.4.0/24 10.0.123.2 10.0.123.1 65002 65001i
Processed 4 prefixes, 4 pathsType escape sequence to abort.
Tracing the route to 192.168.3.1
1 10.0.123.3 8 msec * 8 msec各STEPの結果をまとめます。
| STEP | R2→R1の192.168.3.0/24のNEXT_HOP | R1のtraceroute | R4のtraceroute |
|---|---|---|---|
| 0 | 10.0.123.3(third-party) | 1ホップ | 2ホップ |
| 1 | 10.0.123.2(next-hop-self) | 2ホップ | 3ホップ |
| 2 | 10.0.123.3 | 1ホップ | 2ホップ |
| 3 | 10.0.123.2(ルートポリシー) | 2ホップ | 3ホップ |
| 4 | 10.0.123.3 | 1ホップ | 2ホップ |
検証Configおよびshow結果
各STEPで4台すべてから、次の3種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。
| ファイル | 内容 |
|---|---|
..._show.txt | show version / show interface description / show route / show route bgp / show bgp / show bgp summary / show bgp <プレフィックス>(4プレフィックス分) / show bgp neighbor / show bgp neighbors <ピア> advertised-routes / show bgp neighbors <ピア> routes / show bgp neighbors <ピア> received routes / show bgp update-group / show rpl route-policy / show rpl prefix-set(STEP 3のR2のみ) / show arp(R1・R2・R3のみ) / show ospf neighbor(R1・R4のみ) / traceroute(R1・R3・R4のみ) |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
最終状態(STEP 4)ではポリシーはPASS-ALLのみで、STEP 0のrunning-configと4台すべて一致しています。
STEP 0:初期状態(third-party next hopが出ている)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 1:R2のR1向けネイバーにnext-hop-selfを適用した状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 2:next-hop-selfを撤去した状態(設定はSTEP 0と同一)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 3:ルートポリシーNH-OVERRIDEを適用した状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 4:ルートポリシーを撤去した状態(最終状態、設定はSTEP 0と同一)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
キャプチャー全体は次のとおりです。STEP 0からSTEP 4までのすべてのUPDATEが入っています。
R1 - スイッチ間のキャプチャー全体をダウンロード
R3 - スイッチ間のキャプチャー全体をダウンロード
参考
| 資料 | タイトル | 概要 |
|---|---|---|
| RFC 4271 | A Border Gateway Protocol 4 (BGP-4) | 5.1.3節でNEXT_HOPの設定規則を定義。共有セグメントでの第三者アドレスの利用と、広告先ピア自身のアドレスを渡してはならないことを規定している。 |
| RFC 4760 | Multiprotocol Extensions for BGP-4 | MP_REACH_NLRI属性の定義。IPv4以外のアドレスファミリーではNext hopをこの属性の中で運ぶ。 |
| RFC 7454 | BGP Operations and Security | 運用上の推奨事項。NEXT_HOPの扱いを含むeBGPピアリングの設計指針を記載。 |
| IANA | Border Gateway Protocol (BGP) Parameters | パス属性のType codeの割り当て一覧。 |