next-hop-selfとは
next-hop-selfは、iBGPピアへ経路を広告する際にNEXT_HOP属性を自身のアドレスに書き換える設定です。iBGPは既定でNEXT_HOPを変更しないため、AS外のアドレスがAS内に伝わり、受信したルータがそこへ到達できないと経路が使われません。
設定するのはAS境界のR2だけで、効くのはR2がiBGPピアのR1へ広告するとき(図のブラケットの区間)だけです。eBGPでは広告時にNEXT_HOPが自身のアドレスに書き換わるので、R2 - R3区間にこの設定はありません。ただしeBGPにも、同じサブネット上にいる別のルータのアドレスをそのままNEXT_HOPにする例外(third-party next hop)があり、BGP NEXT_HOP属性で解説しています。
なぜ問題が起きるのか
RFC 4271 5.1.3は、iBGPピアへ広告するとき、自分で発生させた経路でなければNEXT_HOPを変更すべきでない(SHOULD NOT modify)とし、例外を「自身のアドレスをNEXT_HOPとして広告するよう明示的に設定された場合」としています。この明示的な設定がnext-hop-selfです。そのためAS境界のR2がeBGPで受け取った経路は、NEXT_HOPがAS外のルータのアドレス(R3の10.2.3.3)のままAS内に伝わります。
受け取ったR1は、NEXT_HOPへの経路を自分のルーティングテーブル(通常はIGPの経路)から引いて転送先を決めます(再帰的な解決)。引けない経路はベストパスの選択から外すべき(SHOULD)とされています(RFC 4271 9.1.2.1)。show bgpでは>が消えて*だけになり、詳細表示ではNEXT_HOPに(inaccessible)が付きます。ルーティングテーブルにも載らないので、その宛先へは転送できません。
この判断はR1の中だけで行われます。IGPから10.2.3.0/24が消えても、R2は同じ経路を同じNEXT_HOPで広告し続けており、UPDATEも送りません。
2つの解決方法
| 方法 | 内容 | R1での再帰的な解決 | 注意点 |
|---|---|---|---|
next-hop-self | AS境界のルータが、iBGPピアへ広告する際にNEXT_HOPを自身のアドレス(通常はLoopback)に書き換える | R2のLoopback(10.0.0.2)をIGPで引く | AS境界のルータごとに設定が必要 |
| IGPで外部リンクを広告 | AS境界のルータが、eBGPピアとの接続に使うリンク(下の例では10.2.3.0/24)をIGPに載せる | 外部リンク(10.2.3.0/24)をIGPで引く | AS外に向けたリンクの経路がAS内のIGPに載る。外部リンクが増えるほど経路と管理が増える |
どちらでも、R1から見た最終的な転送先は同じ(R2へ向かうインタフェース)で、違うのは再帰的な解決に使うIGPの経路です。一般にはnext-hop-selfが使われます。AS内のIGPはAS内の到達性だけを扱い、AS外との接続はBGPに任せる分担になるためです。next-hop-selfを使うと、R1は10.2.3.3へ到達できないままでも外部の宛先へ転送できます。
設定方法
IOS XRでは、iBGPネイバーのアドレスファミリー配下に設定します。
router bgp <AS番号>
neighbor <iBGPピアのアドレス>
address-family ipv4 unicast
next-hop-selfNEXT_HOPは変わりません。実機での検証
3つのASにXRd 26.1.1を4台置き、R1 - R2間がiBGP、R2 - R3・R3 - R4間がeBGPです。
| ルータ | AS | 役割 | 広告するネットワーク |
|---|---|---|---|
| R1 | 65001 | iBGPのみ(AS内) | 192.168.1.0/24 |
| R2 | 65001 | AS境界(R3とeBGP) | 192.168.2.0/24 |
| R3 | 65002 | AS境界(R2・R4とeBGP) | 192.168.3.0/24 |
| R4 | 65003 | - | 192.168.4.0/24 |
AS 65001内はOSPFエリア0で、iBGPはLoopback0どうしです。初期状態では、R2がR3とのリンク(10.2.3.0/24)をOSPFのpassiveインタフェースとして広告しています。操作するのはR2だけで、各STEPでR1から192.168.3.1・192.168.4.1へpingを50発送ります。
| STEP | R2への操作 | 確かめること |
|---|---|---|
| 0 | なし(10.2.3.0/24をOSPFで広告) | 書き換えなしでも経路が有効。R1は10.2.3.3をOSPFの経路で解決する |
| 1 | OSPFからGigabitEthernet0/0/0/1を外す | R1で経路が(inaccessible)になりpingが落ちる。R2はUPDATEを送らない |
| 2 | next-hop-selfを設定 | UPDATEのNEXT_HOPが10.0.0.2になり、R1は10.0.0.2をOSPFの経路で解決する。R2自身のテーブルは変わらない |
| 3 | next-hop-selfを外し、OSPFへGigabitEthernet0/0/0/1を戻す(最終状態) | NEXT_HOPが10.2.3.3に戻り、STEP 0と同じ解決になる |
STEP 0:外部リンクをIGPで広告している状態
R1は10.2.3.0/24をOSPFで学習しています。
RP/0/RP0/CPU0:R1#show route 10.2.3.3
Tue Sep 22 15:31:54.715 UTC
Routing entry for 10.2.3.0/24
Known via "ospf 1", distance 110, metric 2, type intra area
Installed Sep 22 15:19:09.072 for 00:12:45
Routing Descriptor Blocks
10.1.2.2, from 10.0.0.2, via GigabitEthernet0/0/0/0
Route metric is 2
No advertising protos. NEXT_HOPが10.2.3.3のままでも、すべての経路が*>です。
RP/0/RP0/CPU0:R1#show bgp
Tue Sep 22 15:31:49.417 UTC
BGP router identifier 10.0.0.1, local AS number 65001
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0000000 RD version: 6
BGP main routing table version 6
BGP NSR Initial initsync version 3 (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 0.0.0.0 0 32768 i
*>i192.168.2.0/24 10.0.0.2 0 100 0 i
*>i192.168.3.0/24 10.2.3.3 0 100 0 65002 i
*>i192.168.4.0/24 10.2.3.3 100 0 65002 65003 i
Processed 4 prefixes, 4 pathsshow cefで転送の中身を見ると、192.168.3.0/24は10.2.3.3を経由する再帰的な経路で、最終的にGigabitEthernet0/0/0/0(R2の10.1.2.2)から出ます。
RP/0/RP0/CPU0:R1#show cef 192.168.3.0/24
Tue Sep 22 15:31:54.373 UTC
192.168.3.0/24, version 11, internal 0x5000001 0x40 (ptr 0x8851b310) [1], 0x0 (0x0), 0x0 (0x0)
Updated Sep 22 15:20:12.868
local adjacency to GigabitEthernet0/0/0/0
Prefix Len 24, traffic index 0, precedence n/a, priority 4
gateway array (0x895d88d0) reference count 2, flags 0x2010, source rib (7), 0 backups
[1 type 3 flags 0x48501 (0x8967bcf8) ext 0x0 (0x0) (collapsed)]
LW-LDI[type=0, refc=0, ptr=0x0, sh-ldi=0x0]
gateway array update type-time 1 Sep 22 15:20:12.867
LDI Update time Sep 22 15:20:12.867
via 10.2.3.3/32, 2 dependencies, recursive [flags 0x6000]
path-idx 0 NHID 0x0 [0x8851b5b0 0x0]
next hop 10.2.3.3/32 via 10.2.3.0/24
Load distribution: 0 (refcount 1)
Hash OK Interface Address
0 Y GigabitEthernet0/0/0/0 10.1.2.2 pingはすべて届き、tracerouteはR2・R3を通ってR4に達します。
RP/0/RP0/CPU0:R1#ping 192.168.4.1 source 192.168.1.1 count 50 timeout 1
Tue Sep 22 15:31:33.314 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.4.1 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (50/50), round-trip min/avg/max = 9/12/63 ms
RP/0/RP0/CPU0:R1#traceroute 192.168.4.1 source 192.168.1.1 probe 3 timeout 1 maxttl 6
Tue Sep 22 15:31:41.091 UTC
Type escape sequence to abort.
Tracing the route to 192.168.4.1
1 10.1.2.2 7 msec 7 msec 5 msec
2 10.2.3.3 10 msec 8 msec 9 msec
3 10.3.4.4 21 msec * 16 msec STEP 1:NEXT_HOPが到達不能な状態を作る
R2のOSPFから10.2.3.0/24のインタフェースを外します(R2のcommit)。
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Tue Sep 22 15:34:49.281 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
area 0
no interface GigabitEthernet0/0/0/1
!
!
endR1のルーティングテーブルから10.2.3.0/24が消え、R3経由の2経路から>が消えます。
RP/0/RP0/CPU0:R1#show route 10.2.3.3
Tue Sep 22 15:38:26.396 UTC
% Network not in tableRP/0/RP0/CPU0:R1#show bgp
Tue Sep 22 15:38:20.878 UTC
BGP router identifier 10.0.0.1, local AS number 65001
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0000000 RD version: 8
BGP main routing table version 8
BGP NSR Initial initsync version 3 (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 0.0.0.0 0 32768 i
*>i192.168.2.0/24 10.0.0.2 0 100 0 i
* i192.168.3.0/24 10.2.3.3 0 100 0 65002 i
* i192.168.4.0/24 10.2.3.3 100 0 65002 65003 i
Processed 4 prefixes, 4 paths詳細表示ではno best pathと(inaccessible)が付き、validのままbestだけが消えています。
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
Tue Sep 22 15:38:22.168 UTC
BGP routing table entry for 192.168.3.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 7 7
Last Modified: Sep 22 15:34:52.023 for 00:03:30
Paths: (1 available, no best path)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
65002, (received & used)
10.2.3.3 (inaccessible) 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ルーティングテーブルにはR2自身の192.168.2.0/24だけが残り、pingは1発も届きません。tracerouteの!Nは、R1自身が宛先への経路を持たないことを示します。
RP/0/RP0/CPU0:R1#show route bgp
Tue Sep 22 15:38:21.216 UTC
B 192.168.2.0/24 [200/0] via 10.0.0.2, 00:18:09RP/0/RP0/CPU0:R1#ping 192.168.3.1 source 192.168.1.1 count 50 timeout 1
Tue Sep 22 15:36:24.308 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.3.1 timeout is 1 seconds:
..................................................
Success rate is 0 percent (0/50)
RP/0/RP0/CPU0:R1#ping 192.168.4.1 source 192.168.1.1 count 50 timeout 1
Tue Sep 22 15:37:15.565 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.1.1 probe 3 timeout 1 maxttl 6
Tue Sep 22 15:38:12.857 UTC
Type escape sequence to abort.
Tracing the route to 192.168.4.1
1 192.168.1.1 !N * !N R2側は何も変わらず、10.2.3.3をNEXT_HOPとして広告し続けています。
RP/0/RP0/CPU0:R2#show bgp neighbors 10.0.0.1 advertised-routes
Tue Sep 22 15:39:16.046 UTC
Network Next Hop From AS Path
192.168.2.0/24 10.0.0.2 Local i
192.168.3.0/24 10.2.3.3 10.2.3.3 65002i
192.168.4.0/24 10.2.3.3 10.2.3.3 65002 65003i
Processed 3 prefixes, 3 pathsR1 - R2間のキャプチャーでも、このSTEPで流れたのはR2のOSPFのLS Update(10.2.3.0/24を外したRouter-LSA)とBGPのKEEPALIVEだけで、BGPのUPDATEは1つもありません。
3 5.539208 10.1.2.2 → 224.0.0.5 OSPF 122 LS Update
10 28.296888 10.0.0.1 → 10.0.0.2 BGP 73 KEEPALIVE Message
18 59.797170 10.0.0.2 → 10.0.0.1 BGP 73 KEEPALIVE Message
26 88.297284 10.0.0.1 → 10.0.0.2 BGP 73 KEEPALIVE Message
35 119.797783 10.0.0.2 → 10.0.0.1 BGP 73 KEEPALIVE MessageSTEP 2:next-hop-selfで解消する
R2のiBGPネイバーにnext-hop-selfを設定します(R2のcommit)。
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Tue Sep 22 15:42:22.048 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65001
neighbor 10.0.0.1
address-family ipv4 unicast
next-hop-self
!
!
!
endR2がR1へ広告するNext Hopが3経路とも10.0.0.2(R2のLoopback0)になります。
RP/0/RP0/CPU0:R2#show bgp neighbors 10.0.0.1 advertised-routes
Tue Sep 22 15:45:09.426 UTC
Network Next Hop From AS Path
192.168.2.0/24 10.0.0.2 Local i
192.168.3.0/24 10.0.0.2 10.2.3.3 65002i
192.168.4.0/24 10.0.0.2 10.2.3.3 65002 65003i
Processed 3 prefixes, 3 paths設定の直後、R2はR1へUPDATEを送り直しています。キャプチャーのNo.4は3つのUPDATEを含むTCPセグメントで、192.168.3.0/24のUPDATEではMP_REACH_NLRIのNext hopが10.0.0.2です。
Border Gateway Protocol - UPDATE Message
<snip>
Path Attribute - MP_REACH_NLRI
<snip>
Next hop: 10.0.0.2
IPv4 Address: 10.0.0.2
<snip>
192.168.3.0/24
<snip>
Path Attribute - ORIGIN: IGP
<snip>
Path Attribute - AS_PATH: 65002
<snip>
AS4: 65002
Path Attribute - MULTI_EXIT_DISC: 0
<snip>
Path Attribute - LOCAL_PREF: 100抜き出したファイルでは、このパケットはNo.1として表示されます。2秒後のNo.6にも同じ内容のUPDATEが送られています。
R1ではNEXT_HOPが10.0.0.2になり、すべて*>に戻ります。詳細表示の(metric 2)は、10.0.0.2をOSPF(メトリック2)で解決したことを示します。
RP/0/RP0/CPU0:R1#show bgp
Tue Sep 22 15:44:14.131 UTC
BGP router identifier 10.0.0.1, local AS number 65001
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0000000 RD version: 10
BGP main routing table version 10
BGP NSR Initial initsync version 3 (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 0.0.0.0 0 32768 i
*>i192.168.2.0/24 10.0.0.2 0 100 0 i
*>i192.168.3.0/24 10.0.0.2 0 100 0 65002 i
*>i192.168.4.0/24 10.0.0.2 100 0 65002 65003 i
Processed 4 prefixes, 4 pathsRP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
Tue Sep 22 15:44:14.998 UTC
BGP routing table entry for 192.168.3.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 10 10
Last Modified: Sep 22 15:42:25.023 for 00:01:50
Paths: (1 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.2 (metric 2) from 10.0.0.2 (10.0.0.2)
Origin IGP, metric 0, localpref 100, valid, internal, best, group-best
Received Path ID 0, Local Path ID 1, version 10R1は10.2.3.3へ到達できないままで、代わりに10.0.0.2をOSPFで学習しています。
RP/0/RP0/CPU0:R1#show route 10.2.3.3
Tue Sep 22 15:44:18.812 UTC
% Network not in tableRP/0/RP0/CPU0:R1#show route 10.0.0.2
Tue Sep 22 15:44:19.094 UTC
Routing entry for 10.0.0.2/32
Known via "ospf 1", distance 110, metric 2, type intra area
Installed Sep 22 15:19:09.071 for 00:25:10
Routing Descriptor Blocks
10.1.2.2, from 10.0.0.2, via GigabitEthernet0/0/0/0
Route metric is 2
No advertising protos. 転送の中身をSTEP 0と比べると、再帰的な解決の先が10.2.3.3(10.2.3.0/24経由)から10.0.0.2(10.0.0.2/32経由)に変わり、出ていくインタフェースと隣のアドレスは同じです。
RP/0/RP0/CPU0:R1#show cef 192.168.3.0/24
Tue Sep 22 15:44:18.622 UTC
192.168.3.0/24, version 16, internal 0x5000001 0x40 (ptr 0x8851b5b0) [1], 0x0 (0x0), 0x0 (0x0)
Updated Sep 22 15:42:25.079
local adjacency to GigabitEthernet0/0/0/0
Prefix Len 24, traffic index 0, precedence n/a, priority 4
gateway array (0x895d7e80) reference count 3, flags 0x2010, source rib (7), 0 backups
[1 type 3 flags 0x48501 (0x8967b930) ext 0x0 (0x0) (collapsed)]
LW-LDI[type=0, refc=0, ptr=0x0, sh-ldi=0x0]
gateway array update type-time 1 Sep 22 15:20:11.675
LDI Update time Sep 22 15:20:11.675
via 10.0.0.2/32, 2 dependencies, recursive [flags 0x6000]
path-idx 0 NHID 0x0 [0x8851b690 0x0]
next hop 10.0.0.2/32 via 10.0.0.2/32
Load distribution: 0 (refcount 1)
Hash OK Interface Address
0 Y GigabitEthernet0/0/0/0 10.1.2.2 RP/0/RP0/CPU0:R1#show cef 192.168.3.0/24
Tue Sep 22 15:31:54.373 UTC
192.168.3.0/24, version 11, internal 0x5000001 0x40 (ptr 0x8851b310) [1], 0x0 (0x0), 0x0 (0x0)
Updated Sep 22 15:20:12.868
local adjacency to GigabitEthernet0/0/0/0
Prefix Len 24, traffic index 0, precedence n/a, priority 4
gateway array (0x895d88d0) reference count 2, flags 0x2010, source rib (7), 0 backups
[1 type 3 flags 0x48501 (0x8967bcf8) ext 0x0 (0x0) (collapsed)]
LW-LDI[type=0, refc=0, ptr=0x0, sh-ldi=0x0]
gateway array update type-time 1 Sep 22 15:20:12.867
LDI Update time Sep 22 15:20:12.867
via 10.2.3.3/32, 2 dependencies, recursive [flags 0x6000]
path-idx 0 NHID 0x0 [0x8851b5b0 0x0]
next hop 10.2.3.3/32 via 10.2.3.0/24
Load distribution: 0 (refcount 1)
Hash OK Interface Address
0 Y GigabitEthernet0/0/0/0 10.1.2.2 pingは再び届きます。tracerouteの2ホップ目に10.2.3.3が出るのは、R3が自分の受信インタフェースのアドレスで応答するためで、R1がこのアドレスへの経路を持っている必要はありません。
RP/0/RP0/CPU0:R1#ping 192.168.4.1 source 192.168.1.1 count 50 timeout 1
Tue Sep 22 15:43:58.901 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.4.1 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (50/50), round-trip min/avg/max = 10/17/78 ms
RP/0/RP0/CPU0:R1#traceroute 192.168.4.1 source 192.168.1.1 probe 3 timeout 1 maxttl 6
Tue Sep 22 15:44:06.776 UTC
Type escape sequence to abort.
Tracing the route to 192.168.4.1
1 10.1.2.2 6 msec 5 msec 30 msec
2 10.2.3.3 9 msec 8 msec 8 msec
3 10.3.4.4 14 msec * 14 msec 一方、設定したR2自身のBGPテーブルではNEXT_HOPは10.2.3.3のままです。
RP/0/RP0/CPU0:R2#show bgp 192.168.3.0/24
Tue Sep 22 15:45:07.288 UTC
BGP routing table entry for 192.168.3.0/24
Versions:
Process bRIB/RIB SendTblVer
Speaker 5 5
Last Modified: Sep 22 15:20:13.023 for 00:24:54
Paths: (1 available, best #1)
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.1
Path #1: Received by speaker 0
Advertised IPv4 Unicast paths to peers (in unique update groups):
10.0.0.1
65002, (received & used)
10.2.3.3 from 10.2.3.3 (10.0.0.3)
Origin IGP, metric 0, localpref 100, valid, external, best, group-best
Received Path ID 0, Local Path ID 1, version 5
Origin-AS validity: (disabled)STEP 3:next-hop-selfを外し、IGP広告で解消する
R2からnext-hop-selfを外し、代わりにGigabitEthernet0/0/0/1をOSPFへ戻します(R2の1回のcommit)。
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Tue Sep 22 15:47:13.486 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
area 0
interface GigabitEthernet0/0/0/1
passive enable
!
!
!
router bgp 65001
neighbor 10.0.0.1
address-family ipv4 unicast
no next-hop-self
!
!
!
endR2がR1へ送り直したUPDATE(No.7)では、Next hopが10.2.3.3に戻っています。
Border Gateway Protocol - UPDATE Message
<snip>
Path Attribute - MP_REACH_NLRI
<snip>
Next hop: 10.2.3.3
IPv4 Address: 10.2.3.3
<snip>
192.168.3.0/24
<snip>
Path Attribute - ORIGIN: IGP
<snip>
Path Attribute - AS_PATH: 65002
<snip>
AS4: 65002
Path Attribute - MULTI_EXIT_DISC: 0
<snip>
Path Attribute - LOCAL_PREF: 100R1は10.2.3.3をOSPFで解決できるので、経路は有効なままです。ルーティングテーブルのviaは10.2.3.3に戻り、pingも届きます。
RP/0/RP0/CPU0:R1#show route bgp
Tue Sep 22 15:49:05.515 UTC
B 192.168.2.0/24 [200/0] via 10.0.0.2, 00:28:54
B 192.168.3.0/24 [200/0] via 10.2.3.3, 00:01:49
B 192.168.4.0/24 [200/0] via 10.2.3.3, 00:01:49RP/0/RP0/CPU0:R1#show cef 192.168.3.0/24
Tue Sep 22 15:49:09.873 UTC
192.168.3.0/24, version 20, internal 0x5000001 0x40 (ptr 0x8851b5b0) [1], 0x0 (0x0), 0x0 (0x0)
Updated Sep 22 15:47:16.482
local adjacency to GigabitEthernet0/0/0/0
Prefix Len 24, traffic index 0, precedence n/a, priority 4
gateway array (0x895d88d0) reference count 2, flags 0x2010, source rib (7), 0 backups
[1 type 3 flags 0x48501 (0x8967bcf8) ext 0x0 (0x0) (collapsed)]
LW-LDI[type=0, refc=0, ptr=0x0, sh-ldi=0x0]
gateway array update type-time 1 Sep 22 15:47:16.482
LDI Update time Sep 22 15:47:16.482
via 10.2.3.3/32, 2 dependencies, recursive [flags 0x6000]
path-idx 0 NHID 0x0 [0x8851b230 0x0]
next hop 10.2.3.3/32 via 10.2.3.0/24
Load distribution: 0 (refcount 1)
Hash OK Interface Address
0 Y GigabitEthernet0/0/0/0 10.1.2.2 RP/0/RP0/CPU0:R1#ping 192.168.4.1 source 192.168.1.1 count 50 timeout 1
Tue Sep 22 15:48:49.792 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.4.1 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (50/50), round-trip min/avg/max = 10/12/31 ms検証Configおよびshow結果
各STEPで4台すべてから、次の種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 3のもの)。
| ファイル | 内容 |
|---|---|
..._show.txt | show version / show interface description / show route / show bgp / show bgp summary / show route bgp / show bgp <プレフィックス>(4プレフィックス分) / show bgp neighbors / ピアごとのadvertised-routes・routes・received routes / show bgp update-group / show bgp process / show rpl route-policy。R1・R2はshow ospf neighbor / show route ospf、R1はshow route 192.168.3.0/24 / show cef 192.168.3.0/24 / show route 10.2.3.3 / show route 10.0.0.2も含む |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
..._ping.txt | ping(50発)とtraceroute。R1は192.168.3.1・192.168.4.1、R2は192.168.4.1、R4は192.168.1.1宛て。R1の10.2.3.3宛て(送信元10.0.0.1)は、R3が10.0.0.1への経路を持たないため全STEPで応答がありません |
..._trace.txt | show bgp trace neighborとshow bgp trace error(BGPプロセス内部のイベント) |
..._commit.cfg | そのSTEPで実際にコミットされた設定(R2のみ) |
STEP 0:初期状態(10.2.3.0/24をOSPFで広告)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | — |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | — |
STEP 1:OSPFからGigabitEthernet0/0/0/1を外す
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | commit |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | — |
STEP 2:next-hop-selfを設定
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | commit |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | — |
STEP 3:next-hop-selfを外し、OSPFへGigabitEthernet0/0/0/1を戻す(最終状態)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R1 | show | log | run | ping | trace | — |
| R2 | show | log | run | ping | trace | commit |
| R3 | show | log | run | — | trace | — |
| R4 | show | log | run | ping | trace | — |
パケットキャプチャーはSTEPごとに取得しています。
| STEP | R1 - R2間 | R2 - R3間 |
|---|---|---|
| 0 | pcap | pcap |
| 1 | pcap | pcap |
| 2 | pcap | pcap |
| 3 | pcap | pcap |
参考
| 資料 | タイトル | 概要 |
|---|---|---|
| RFC 4271 | A Border Gateway Protocol 4 (BGP-4) | BGP-4の基本仕様。5.1.3でNEXT_HOP属性のiBGP / eBGPでの扱い、9.1.2.1で到達できないNEXT_HOPを持つ経路の扱いを定義。 |
| IANA | Border Gateway Protocol (BGP) Parameters | BGPで使われる番号の割り当て一覧。 |
関連記事
- BGP(Border Gateway Protocol)
- BGPメッセージ
- BGPネイバーの状態遷移
- iBGPとeBGPの違い
- BGP next-hop-self
- BGPルートリフレクタ
- BGPパス属性とベストパス選択
- BGP ORIGIN属性
- BGP AS_PATH属性
- BGP NEXT_HOP属性
- BGP LOCAL_PREF属性
- BGP MED属性
- BGP WEIGHT属性
- BGP COMMUNITY属性
- BGP経路集約(aggregate-address)
- MP-BGP(マルチプロトコル拡張)
- BGP Extended Community(拡張コミュニティ)
- BGPマルチパス(maximum-paths)
- BGPの4バイトAS番号(RFC 6793)
- BGPのプライベートAS番号の除去(remove-private-AS)
- BGPのADD-PATH(RFC 7911)
- BGP PIC(Prefix Independent Convergence)
- BGP Best External(ベストでない外部経路の広告)