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

BGP NEXT_HOP属性

目次

NEXT_HOPとは

NEXT_HOP(Type code 3)は、その経路へパケットを送るときに次に渡すルータのIPアドレスを表すwell-known mandatoryのパス属性です(BGPパス属性とベストパス選択)。 NEXT_HOPは「経路を広告してきたルータのアドレス」とは限りません。あくまでパケットの転送先で、両者がずれる場面がthird-party next hop(後述)です。

項目内容
Type code3
分類Well-known mandatory(すべての実装が理解でき、UPDATEに必ず入る)
値IPv4アドレス4バイト(IPv6ではMP_REACH_NLRI内のNext hopフィールド)
定義RFC 4271 5.1.3節

NEXT_HOPが設定される規則

広告する側が、広告先のピアごとに値を決めます(RFC 4271 5.1.3)。

広告先経路動作
iBGPピア他のピアから学んだ経路NEXT_HOPを書き換えない(受け取った値をそのまま渡す)
iBGPピア自分が生成した経路そのネットワークへ到達するインタフェースのアドレスを使う。直結している場合(または相手自身のアドレスになる場合)は自分のアドレス
eBGPピア—既定ではNEXT_HOPを自分のアドレスにする(そのピアとの接続に使っているインタフェースのアドレス)

学んだ経路をiBGPで書き換えないのは、AS内では出口までの経路をIGPが知っている前提だからです。これが原因で起きる到達性の問題はBGP next-hop-selfで解説しています。

eBGPピアへの値は4つの場合分けで決まり、上の「自分のアドレス」はどれにも当たらないときの既定です。 残りの3つはいずれも、広告先のピアと共通のサブネットを持つアドレスを使えるという規定で、次のthird-party next hopがこれにあたります。

複数ホップ先のeBGPピア(multihop eBGP)の場合は既定で自分のアドレスを使い、設定により受け取ったNEXT_HOPをそのまま伝播させることもできます(RFC 4271 5.1.3の3)。IXのルートサーバーが使う形ですが、この記事の検証では扱っていません。

共有セグメントでのthird-party next hop

RFC 4271 5.1.3は、eBGPピアへ広告する際に広告先ピアと同じサブネット上に転送先のルータがいれば、そのアドレスをNEXT_HOPにしてよいとしています。これがthird-party next hopで、3台以上が1つのL2セグメントを共有し、そのうち2組だけがBGPピアのときに現れます。規定は2つに分かれていて、この記事で扱うのは後者です。

元の経路NEXT_HOPに使えるアドレス
iBGPピアから学んだ経路、または自分が生成した経路そのネットワークへ到達する内部ルータのインタフェースアドレス
eBGPピアから学んだ経路受け取ったNEXT_HOPから知っている隣接ルータのアドレス
  • R1・R2・R3が同じセグメント上にいる
  • BGPピアはR1 - R2とR2 - R3の2組だけ(R1とR3はピアではない)
  • R3が広告した経路をR2がR1へ中継する

R2がNEXT_HOPを自分に書き換えると、R1からのパケットは同じセグメントを2回通ります。そこでR2はNEXT_HOPをR3のアドレスのまま渡し、R1が直接R3へ送れるようにします。

NEXT_HOPの値R1から見たパケットの流れ
R2のアドレスR1 → R2 → R3(同じセグメントを2回通る)
R3のアドレス(third-party)R1 → R3(1回で済む)

同じ5.1.3は、自分が生成した経路を相手自身のアドレスをNEXT_HOPにして広告してはならないこと、ルータは自分自身をネクストホップにする経路を入れてはならないことも定めています。IOS XRは受け取った経路でも、NEXT_HOPが広告先ピア自身のアドレスになる場合は自分のアドレスに置き換えます(R1発の経路をR1へ返すときなど)。 ピアごとに判断するので、同じ経路でも渡す相手によってNEXT_HOPが変わります。

同じ5.1.3は、third-party next hopの広告を無効にできることを実装の必須要件としています(“MUST be able to support the disabling advertisement of third party NEXT_HOP attributes”)。ブリッジが完全でない媒体に対応するためで、後述のnext-hop-selfがこの手段にあたります。

third-party next hopは、BGPピアどうしが同じサブネットを共有している場合だけ成立します。ポイントツーポイント接続では発生しません。

再帰的ルックアップとNEXT_HOPの到達性

BGPの経路は、NEXT_HOPをルーティングテーブルで引けて初めて使えます(再帰的ルックアップ、RFC 4271 5.1.3)。引けなければ無効で、show bgpでは>が消え、詳細表示に(inaccessible)が付きます。引けたときに実際の転送先になるのは、そのエントリが直結サブネットでネクストホップを持たなければNEXT_HOP自身、ネクストホップを持つならそのアドレスです。等コストの経路が複数あれば1つが選ばれます。 third-party next hopは共有セグメント上の直結アドレスなので受け取ったルータは解決できますが、iBGPでAS内へ配るとAS内の他のルータからも共有セグメントへ到達できる必要があります。検証ではR4がOSPFでその経路を持っています。

NEXT_HOPを書き換える2つの方法

IOS XRでNEXT_HOPを明示的に制御する方法は2つあり、適用する単位が違います。

方法単位用途
next-hop-selfネイバー単位そのピアへ広告するすべての経路のNEXT_HOPを自分のアドレスにする
ルートポリシーのset next-hopプレフィックス単位条件に一致した経路だけNEXT_HOPを指定した値にする
IOS XR next-hop-self の設定(ネイバー単位)
router bgp <AS番号>
 neighbor <ピアのアドレス>
  address-family ipv4 unicast
   next-hop-self
IOS XR ルートポリシーによる set next-hop の設定(プレフィックス単位)
prefix-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 <ポリシー名> out

意図的に自分を経由させたい場合(計測やフィルタなど)は、これらでthird-party next hopを打ち消します。

実機での検証

XRd 26.1.1を4台とL2スイッチ1台で、次を確認します。

  1. 共有セグメント上でthird-party next hopが発生する
  2. 同じ経路でも広告先のピアによってNEXT_HOPが変わる
  3. next-hop-selfで打ち消せる(ネイバー単位)
  4. ルートポリシーのset next-hopでも打ち消せる(プレフィックス単位)
NEXT_HOPの検証トポロジ。R1(AS 65001)、R2(AS 65002)、R3(AS 65003)が1つのL2スイッチを介して共有セグメント10.0.123.0/24に接続し、eBGPピアはR1-R2とR2-R3の2組のみ。R1とR4はAS 65001内でiBGPとOSPFで接続している
  • R1・R2・R3が共有セグメント10.0.123.0/24に接続しています
  • eBGPピアはR1 - R2とR2 - R3の2組だけで、R1とR3はピアではありません
  • R3が192.168.3.0/24を広告し、R2経由でR1へ届くときのNEXT_HOPを追います
  • AS 65001のR4はR1とiBGP・OSPFで接続し、AS内への伝わり方を見ます
ルータAS共有セグメント側のアドレス広告するネットワーク
R16500110.0.123.1192.168.1.0/24
R26500210.0.123.2192.168.2.0/24
R36500310.0.123.3192.168.3.0/24
R465001(接続なし。R1とP2P)192.168.4.0/24
STEP操作確かめること
0初期状態(ポリシーはpassのみ)third-party next hopが出る(R1の192.168.3.0/24のNEXT_HOPが10.0.123.3)。R1からR3へは1ホップで届く。R4では自分発の192.168.1.0/24だけNEXT_HOPがR1のLo0になっている
1R2のR1向けにnext-hop-selfthird-partyを打ち消せる(RFCが実装の必須要件としている無効化)。R1からR3への経路にR2が1ホップ入る。
2next-hop-selfを撤去third-partyに戻る
3R2のR1向けにset next-hop(192.168.3.0/24だけ)プレフィックス単位で打ち消せる。192.168.2.0/24は変わらない
4ルートポリシーの中身をpassに戻す戻る
5R1のR4向けにnext-hop-self(iBGP側)AS内へ配るNEXT_HOPをR1のLo0にできる
6R1で共有セグメントをOSPFから外すnext-hop-selfがあるのでR4は影響を受けない
7R1のnext-hop-selfを撤去R4がNEXT_HOPを解決できなくなる。(inaccessible)になり、転送が止まる
8R1のnext-hop-selfを戻す(最終状態)復旧する

各STEPでR1 - スイッチ間・R2 - スイッチ間・R3 - スイッチ間・R1 - R4間の4区間のキャプチャーを取っています。

STEP 0:共有セグメントでthird-party next hopが出る

R2がR1へ広告する2経路のうち、R3発の192.168.3.0/24だけNext HopがR3のアドレスです。R2自身の192.168.2.0/24はR2のアドレスです。

R2 が R1 へ広告している経路(STEP 0)
RP/0/RP0/CPU0:R2#show bgp neighbors 10.0.123.1 advertised-routes
<snip>
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.3      10.0.123.3      65002 65003i
<snip>
Processed 2 prefixes, 2 paths

受け取ったR1側でも同じで、192.168.3.0/24のNEXT_HOPは10.0.123.3、広告してきたのは10.0.123.2です。この2つがずれているのがthird-party next hopです。

R1 の 192.168.3.0/24(STEP 0)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  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

R1からR3へのパケットは共有セグメントを1回通るだけで届きます。

R1 から 192.168.3.1 への traceroute(STEP 0)
RP/0/RP0/CPU0:R1#traceroute 192.168.3.1 source 192.168.1.1 probe 3 timeout 1 maxttl 5
<snip>
Type escape sequence to abort.
Tracing the route to 192.168.3.1
<snip>
 1  10.0.123.3 8 msec  *  8 msec 

AS内のR4にもNEXT_HOPはそのまま伝わります。一方、R1が自分で広告している192.168.1.0/24はR1のLoopback0(10.0.0.1)に書き換わっています。iBGPでも、自分が生成した経路ではNEXT_HOPが自分のアドレスになります。

R4 の show bgp(STEP 0)
RP/0/RP0/CPU0:R4#show bgp
<snip>
   Network            Next Hop            Metric LocPrf Weight Path
*>i192.168.1.0/24     10.0.0.1                 0    100      0 i
*>i192.168.2.0/24     10.0.123.2               0    100      0 65002 i
*>i192.168.3.0/24     10.0.123.3                    100      0 65002 65003 i
<snip>
Processed 4 prefixes, 4 paths
R4 の 192.168.3.0/24(STEP 0)
RP/0/RP0/CPU0:R4#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  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
R4 の 192.168.1.0/24(R1 が生成した経路、STEP 0)
RP/0/RP0/CPU0:R4#show bgp 192.168.1.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  Local, (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

NEXT_HOPは再帰的に解決されます。R4は10.0.123.3をOSPFで学んだ共有セグメントの経路から引きます。

R4 での再帰解決(STEP 0)
RP/0/RP0/CPU0:R4#show cef 192.168.3.0/24
<snip>
192.168.3.0/24, version 12, internal 0x5000001 0x40 (ptr 0x8851b4d0) [1], 0x0 (0x0), 0x0 (0x0)
<snip>
   via 10.0.123.3/32, 3 dependencies, recursive [flags 0x6000]
<snip>
    next hop 10.0.123.3/32 via 10.0.123.0/24

パケットで確認する

1つのフレームの中で、R2は2つのプレフィックスを別々のNEXT_HOPで広告しています。 192.168.3.0/24は10.0.123.3(R3)、自分の192.168.2.0/24は10.0.123.2です。

STEP 0のキャプチャーにはこのUPDATEが入っていません(セッションがSTEP 0の開始前に確立しており、広告はそれより前に終わっていたためです)。下はSTEP 2でnext-hop-selfを外して再広告されたときのもので、NEXT_HOPはSTEP 0と同じです。

STEP 2 の No.1(R2 → R1)tshark -V
Border Gateway Protocol - UPDATE Message
<snip>
        Path Attribute - MP_REACH_NLRI
<snip>
            Next hop: 10.0.123.3
<snip>
                    MP Reach NLRI IPv4 prefix: 192.168.3.0
<snip>
        Path Attribute - AS_PATH: 65002 65003 
上のtshark出力のパケット(No.1 UPDATE)のpcapをダウンロード

STEP 1:next-hop-selfで自分のアドレスに固定する

R2のR1向けネイバーにnext-hop-selfを入れます。RFC 4271 5.1.3が「third-party next hopの広告を無効にできること」を実装の必須要件としている、その手段です。

STEP 1 で R2 に入れた設定
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sun Oct  4 13:12:02.032 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65002
 neighbor 10.0.123.1
  address-family ipv4 unicast
   next-hop-self
  !
 !
!
end

192.168.3.0/24のNEXT_HOPがR2のアドレスに変わります。

R1 の 192.168.3.0/24(STEP 1)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  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

転送も変わり、R1からR3へのパケットはR2を経由して共有セグメントを2回通ります。

R1 から 192.168.3.1 への traceroute(STEP 1)
RP/0/RP0/CPU0:R1#traceroute 192.168.3.1 source 192.168.1.1 probe 3 timeout 1 maxttl 5
<snip>
Type escape sequence to abort.
Tracing the route to 192.168.3.1
<snip>
 1  10.0.123.2 59 msec  7 msec  6 msec 
 2  10.0.123.3 9 msec  *  9 msec 

STEP 2:next-hop-selfを外す

設定をSTEP 0と同じ状態に戻すと、NEXT_HOPもthird-partyに戻ります。

STEP 2 で R2 に入れた設定
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sun Oct  4 13:17:47.074 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65002
 neighbor 10.0.123.1
  address-family ipv4 unicast
   no next-hop-self
  !
 !
!
end
R1 の 192.168.3.0/24(STEP 2)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  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

STEP 3:ルートポリシーでプレフィックス単位に書き換える

prefix-setで192.168.3.0/24だけを選び、set next-hopでR2のアドレスにします。

STEP 3 で R2 に入れた設定
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sun Oct  4 13:23:32.337 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
prefix-set NH-TARGET
  192.168.3.0/24
end-set
!
route-policy TO-R1
  if destination in NH-TARGET then
    set next-hop 10.0.123.2
  endif
  pass
end-policy
!
end

結果はnext-hop-selfと同じですが、効く範囲がポリシーの条件に一致した経路だけという違いがあります。From列を見ると、192.168.3.0/24はR3から受け取った経路のままNext HopがR2になっています。

R2 が R1 へ広告している経路(STEP 3)
RP/0/RP0/CPU0:R2#show bgp neighbors 10.0.123.1 advertised-routes
<snip>
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
<snip>
Processed 2 prefixes, 2 paths

この構成でthird-partyになる経路は192.168.3.0/24だけなので、他の経路が変わらないことは出力では見えません(192.168.2.0/24はR2自身の経路で、どちらの方法でもNEXT_HOPはR2のアドレスです)。プレフィックス単位であることは上のprefix-setの条件から読みます。

STEP 4:ルートポリシーを外す

ポリシーの中身をpassに戻すと、third-partyに戻ります。

STEP 4 で R2 に入れた設定
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sun Oct  4 13:29:17.233 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
route-policy TO-R1
  pass
end-policy
!
end
R1 の 192.168.3.0/24(STEP 4)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  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

STEP 5:iBGP側でthird-partyを打ち消す

ここまではR2 - R1間(eBGP)の話です。AS内へ配るときのNEXT_HOPはR1が決めます。 R1のR4向けネイバーにnext-hop-selfを入れます。

STEP 5 で R1 に入れた設定
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Sun Oct  4 13:35:03.446 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65001
 neighbor 10.0.0.4
  address-family ipv4 unicast
   next-hop-self
  !
 !
!
end

R1自身が見ているNEXT_HOPは10.0.123.3のままで、R4が受け取る値だけがR1のLoopback0になります。

R1 の 192.168.3.0/24(STEP 5)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  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
R4 の 192.168.3.0/24(STEP 5)
RP/0/RP0/CPU0:R4#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  65002 65003, (received & used)
    10.0.0.1 (metric 2) from 10.0.0.1 (10.0.0.1)
      Origin IGP, localpref 100, valid, internal, best, group-best

STEP 6:共有セグメントをOSPFから外す

R1の共有セグメント側インタフェースをOSPFから外します。これでAS内の他のルータは10.0.123.0/24を知らなくなります。

STEP 6 で R1 に入れた設定
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Sun Oct  4 13:40:43.318 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
 area 0
  no interface GigabitEthernet0/0/0/0
 !
!
end

next-hop-selfが入っているので、R4は影響を受けません。 受け取るNEXT_HOPはR1のLoopback0で、これはOSPFで引けます。

R4 の 192.168.3.0/24(STEP 6)
RP/0/RP0/CPU0:R4#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  65002 65003, (received & used)
    10.0.0.1 (metric 2) from 10.0.0.1 (10.0.0.1)
      Origin IGP, localpref 100, valid, internal, best, group-best
R4 から 192.168.3.1 への疎通(STEP 6)
RP/0/RP0/CPU0:R4#ping 192.168.3.1 source 192.168.4.1 count 50 timeout 1
<snip>
Type escape sequence to abort.
<snip>
Success rate is 100 percent (50/50), round-trip min/avg/max = 7/8/26 ms

STEP 7:next-hop-selfを外すと経路が使えなくなる

R1のnext-hop-selfを外します。R4が受け取るNEXT_HOPはthird-partyの10.0.123.3に戻りますが、共有セグメントがOSPFに無いのでR4はこれを解決できません。

STEP 7 で R1 に入れた設定
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Sun Oct  4 13:46:25.158 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65001
 neighbor 10.0.0.4
  address-family ipv4 unicast
   no next-hop-self
  !
 !
!
end

経路は(inaccessible)になり、ベストパスから外れます。

R4 の 192.168.3.0/24(STEP 7)
RP/0/RP0/CPU0:R4#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, no best path)
<snip>
  Path #1: Received by speaker 0
<snip>
  65002 65003, (received & used)
    10.0.123.3 (inaccessible) from 10.0.0.1 (10.0.0.1)
      Origin IGP, localpref 100, valid, internal

転送も止まります。

R4 から 192.168.3.1 への疎通(STEP 7)
RP/0/RP0/CPU0:R4#ping 192.168.3.1 source 192.168.4.1 count 50 timeout 1
<snip>
Type escape sequence to abort.
<snip>
Success rate is 0 percent (0/50)

これが、複数のeBGPピアが同じセグメントを共有する構成(IXなど)でnext-hop-selfを使う理由です。 third-partyのNEXT_HOPはそのセグメント上のアドレスなので、AS内の全ルータがそのセグメントへの経路を持っていなければ使えません。next-hop-selfで自分のアドレスに置き換えれば、AS内はIGPで解決できるアドレスだけを見ることになります。

STEP 8:next-hop-selfを戻す

戻すと解決できるようになり、転送も復旧します。これが最終状態です。

STEP 8 で R1 に入れた設定
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Sun Oct  4 13:53:44.515 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65001
 neighbor 10.0.0.4
  address-family ipv4 unicast
   next-hop-self
  !
 !
!
end
R4 の 192.168.3.0/24(最終状態)
RP/0/RP0/CPU0:R4#show bgp 192.168.3.0/24
<snip>
Paths: (1 available, best #1)
<snip>
  Path #1: Received by speaker 0
<snip>
  65002 65003, (received & used)
    10.0.0.1 (metric 2) from 10.0.0.1 (10.0.0.1)
      Origin IGP, localpref 100, valid, internal, best, group-best
R4 から 192.168.3.1 への疎通(最終状態)
RP/0/RP0/CPU0:R4#ping 192.168.3.1 source 192.168.4.1 count 50 timeout 1
<snip>
Type escape sequence to abort.
<snip>
Success rate is 100 percent (50/50), round-trip min/avg/max = 7/10/49 ms

検証Configおよびshow結果

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

ファイル内容
..._show.txtshow version / show interface description / show route と、BGP・OSPFの状態一式(show bgp nexthops、ネイバーごとのadvertised-routes / routes / received routes、show cefを含む)
..._log.txtそのSTEPの範囲だけに絞ったshow logging
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._ping.txtそのSTEPのpingとtracerouteの結果
..._trace.txtshow bgp trace neighbor / show bgp trace error
..._commit.cfgそのSTEPで実際にcommitされた設定だけ(設定を変えたルータのみ)

STEP 0:初期状態(ポリシーはpassのみ)

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace—
R2showlogrun—trace—
R3showlogrunpingtrace—
R4showlogrunpingtrace—

STEP 1:R2のR1向けにnext-hop-self

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace—
R2showlogrun—tracecommit
R3showlogrunpingtrace—
R4showlogrunpingtrace—

STEP 2:next-hop-selfを撤去(設定はSTEP 0と同一に戻る)

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace—
R2showlogrun—tracecommit
R3showlogrunpingtrace—
R4showlogrunpingtrace—

STEP 3:R2のR1向けにset next-hop(192.168.3.0/24だけ)

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace—
R2showlogrun—tracecommit
R3showlogrunpingtrace—
R4showlogrunpingtrace—

STEP 4:ルートポリシーの中身をpassに戻す

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtrace—
R2showlogrun—tracecommit
R3showlogrunpingtrace—
R4showlogrunpingtrace—

STEP 5:R1のR4向けにnext-hop-self(iBGP側)

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtracecommit
R2showlogrun—trace—
R3showlogrunpingtrace—
R4showlogrunpingtrace—

STEP 6:R1で共有セグメントをOSPFから外す

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtracecommit
R2showlogrun—trace—
R3showlogrunpingtrace—
R4showlogrunpingtrace—

STEP 7:R1のnext-hop-selfを撤去(NEXT_HOPが解決できなくなる)

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtracecommit
R2showlogrun—trace—
R3showlogrunpingtrace—
R4showlogrunpingtrace—

STEP 8:R1のnext-hop-selfを戻す(最終状態)

ルータshow出力syslogrunning-configpingtracecommit
R1showlogrunpingtracecommit
R2showlogrun—trace—
R3showlogrunpingtrace—
R4showlogrunpingtrace—

パケットキャプチャーはSTEPごとに4区間で取得しています。

STEPR1 - SW間R2 - SW間R3 - SW間R1 - R4間
0pcappcappcappcap
1pcappcappcappcap
2pcappcappcappcap
3pcappcappcappcap
4pcappcappcappcap
5pcappcappcappcap
6pcappcappcappcap
7pcappcappcappcap
8pcappcappcappcap

参考

関連記事