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

BGP next-hop-self

目次

next-hop-selfとは

next-hop-selfは、iBGPピアへ経路を広告する際にNEXT_HOP属性を自身のアドレスに書き換える設定です。iBGPでは既定でNEXT_HOPを変更しないため、AS外のアドレスがそのままAS内に伝わり、受信したルータがそのアドレスに到達できないと経路が使われません。この問題を解消するのがnext-hop-selfです。

NEXT_HOPとiBGP / eBGPの違いについてはiBGPとeBGPの違いを、BGPの基本的な仕組みはBGP(Border Gateway Protocol)を参照してください。

なぜ問題が起きるのか

BGPは経路を広告するとき、eBGPピアに対してはNEXT_HOPを自身のアドレスに書き換えますが、iBGPピアに対しては書き換えません。AS境界を越えていないためです。

その結果、AS境界のルータ(下図のR2)がeBGPで受け取った経路をiBGPで転送すると、NEXT_HOPAS外のルータのアドレス(R3の10.2.3.3)のままAS内に伝わります。受け取ったR1にとって、このアドレスは自分のASの外にあります。

BGPは、NEXT_HOPへ到達する経路をルーティングテーブルから引けない場合、その経路を無効と判断します(再帰的ルックアップの失敗)。無効な経路はベストパスに選ばれず、ルーティングテーブルにも載りません。show bgpではその経路の先頭にある*(valid)が消え、詳細表示ではNEXT_HOP(inaccessible)が付きます。

2つの解決方法

方法内容利点注意点
next-hop-selfAS境界のルータが、iBGPピアへ広告する際にNEXT_HOPを自身のアドレス(通常はLoopback)に書き換えるAS内のIGPに外部リンクの経路を載せる必要がないAS境界のルータごとに設定が必要
IGPで外部リンクを広告AS境界のルータが、eBGPピアとの接続に使うリンク(下の例では10.2.3.0/24)をIGPに載せるBGP側の設定変更が不要AS外に向けたリンクの経路をAS内のIGPに載せることになり、経路数が増える。外部リンクが増えるほど管理が煩雑になる

一般にはnext-hop-selfが推奨されます。AS内のIGPはAS内の到達性だけを扱い、AS外との接続はBGPに任せるという役割分担が明確になるためです。

設定方法

IOS XRでは、iBGPネイバーのアドレスファミリー配下にnext-hop-selfを設定します。

IOS XR next-hop-self の設定
router bgp <AS番号>
 neighbor <iBGPピアのアドレス>
  address-family ipv4 unicast
   next-hop-self
next-hop-selfは「iBGPピアへ広告するときに書き換える」設定であり、設定したルータ自身のBGPテーブルに保持しているNEXT_HOPの値は変わりません。後述の検証でも、R2自身のshow bgpでは10.2.3.3のままです。

実機での検証

BGP(Border Gateway Protocol)と同じ、3つのASにIOS XR(XRd)のルータ4台を配置した検証環境を使います。AS 65001内のR1 - R2間がiBGP、AS間のR2 - R3、R3 - R4間がeBGPです。

この検証環境では、R2がeBGPピアとの接続に使うリンク(10.2.3.0/24)をOSPFのpassiveインタフェースとして広告しているため、R1は10.2.3.3へ到達できています。つまり前述の「IGPで外部リンクを広告」の状態です。

R1 show route 10.2.3.3(正常時)
RP/0/RP0/CPU0:R1#show route 10.2.3.3
Sat Sep  5 05:27:01.040 UTC

Routing entry for 10.2.3.0/24
  Known via "ospf 1", distance 110, metric 2, type intra area
  Installed Sep  5 03:09:53.399 for 02:17:07
  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_HOP10.2.3.3のままでも、すべての経路が*>(有効かつベストパス)になっています。

R1 show bgp(正常時)
RP/0/RP0/CPU0:R1#show bgp
<snip>
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

NEXT_HOPが到達不能な状態を作る

R2のOSPFから10.2.3.0/24のインタフェースを外し、R1がNEXT_HOPへ到達できない状態にします。

R2 OSPFから外部リンクを除外
router ospf 1
 area 0
  no interface GigabitEthernet0/0/0/1

R1のルーティングテーブルから10.2.3.0/24が消えます。

R1 show route 10.2.3.3(OSPFから除外後)
RP/0/RP0/CPU0:R1#show route 10.2.3.3
Sat Sep  5 05:27:26.875 UTC

% Network not in table

BGPテーブルを見ると、R3経由で学習した2つの経路から>が消え、*だけになっています。有効な経路がないため、ベストパスが選ばれていません。

R1 show bgp(NEXT_HOP到達不能)
RP/0/RP0/CPU0:R1#show bgp
<snip>
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と、NEXT_HOP(inaccessible)が付きます。

R1 show bgp 192.168.3.0/24(NEXT_HOP到達不能)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
Sat Sep  5 05:27:38.830 UTC
BGP routing table entry for 192.168.3.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 27           27
Last Modified: Sep  5 05:27:18.774 for 00:00:20
Paths: (1 available, no best path)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002
    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だけが残っています。

R1 show route bgp(NEXT_HOP到達不能)
RP/0/RP0/CPU0:R1#show route bgp
Sat Sep  5 05:27:27.391 UTC

B    192.168.2.0/24 [200/0] via 10.0.0.2, 00:16:46

当然、疎通もできません。

R1 ping 192.168.3.1 source 192.168.1.1(NEXT_HOP到達不能)
RP/0/RP0/CPU0:R1#ping 192.168.3.1 source 192.168.1.1
Sat Sep  5 05:27:39.221 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.3.1 timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

next-hop-selfで解消する

R2のiBGPネイバーにnext-hop-selfを設定します。

R2 next-hop-selfの設定
router bgp 65001
 neighbor 10.0.0.1
  address-family ipv4 unicast
   next-hop-self

R1のBGPテーブルでNEXT_HOP10.0.0.2(R2のLoopback0)に書き換わり、すべての経路が*>に戻りました。

R1 show bgp(next-hop-self設定後)
RP/0/RP0/CPU0:R1#show bgp
<snip>
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 paths

詳細表示でも(inaccessible)が消え、bestが付いています。10.0.0.2はOSPFで学習しているため、(metric 2)と到達可能であることが示されています。

R1 show bgp 192.168.3.0/24(next-hop-self設定後)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
Sat Sep  5 05:28:15.911 UTC
BGP routing table entry for 192.168.3.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 30           30
Last Modified: Sep  5 05:28:08.774 for 00:00:07
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002
    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 30

ルーティングテーブルにも3経路が復帰し、疎通も回復しました。

R1 show route bgp(next-hop-self設定後)
RP/0/RP0/CPU0:R1#show route bgp
Sat Sep  5 05:28:16.088 UTC

B    192.168.2.0/24 [200/0] via 10.0.0.2, 00:17:35
B    192.168.3.0/24 [200/0] via 10.0.0.2, 00:00:07
B    192.168.4.0/24 [200/0] via 10.0.0.2, 00:00:07
R1 ping 192.168.3.1 source 192.168.1.1(next-hop-self設定後)
RP/0/RP0/CPU0:R1#ping 192.168.3.1 source 192.168.1.1
Sat Sep  5 05:28:16.213 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.3.1 timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/9/16 ms

設定したルータ自身のテーブルは変わらない

next-hop-selfを設定したR2自身のshow bgpを見ると、NEXT_HOP10.2.3.3のままです。

R2 show bgp 192.168.3.0/24(next-hop-self設定後)
RP/0/RP0/CPU0:R2#show bgp 192.168.3.0/24
Sat Sep  5 05:28:29.022 UTC
BGP routing table entry for 192.168.3.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 19           19
Last Modified: Sep  5 04:54:22.774 for 00:34:06
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
    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 19
      Origin-AS validity: (disabled)

next-hop-selfはiBGPピアへ広告する際に書き換える設定であり、自身が保持する経路情報を変更するものではないことがわかります。

検証Config

R1 config(r1_bgp-next-hop-self.cfg) をダウンロード

R2 config(r2_bgp-next-hop-self.cfg) をダウンロード

R3 config(r3_bgp-next-hop-self.cfg) をダウンロード

R4 config(r4_bgp-next-hop-self.cfg) をダウンロード

検証Configはnext-hop-selfを設定した後の状態です(R2にのみnext-hop-selfが入っています)。

検証環境およびshow結果

show route / show bgp / show bgp <プレフィックス>(4プレフィックス分) / show bgp summary / show bgp neighbor の出力を、next-hop-selfの設定前と設定後それぞれについてルータごとにまとめています。

next-hop-self 設定前

R1 show出力(r1_bgp-next-hop-self_before_show.txt) をダウンロード

R2 show出力(r2_bgp-next-hop-self_before_show.txt) をダウンロード

R3 show出力(r3_bgp-next-hop-self_before_show.txt) をダウンロード

R4 show出力(r4_bgp-next-hop-self_before_show.txt) をダウンロード

next-hop-self 設定後

R1 show出力(r1_bgp-next-hop-self_after_show.txt) をダウンロード

R2 show出力(r2_bgp-next-hop-self_after_show.txt) をダウンロード

R3 show出力(r3_bgp-next-hop-self_after_show.txt) をダウンロード

R4 show出力(r4_bgp-next-hop-self_after_show.txt) をダウンロード

参考

資料タイトル概要
RFC 4271A Border Gateway Protocol 4 (BGP-4)BGP-4の基本仕様。NEXT_HOP属性と、iBGP / eBGPでの扱いを定義。
IANABorder Gateway Protocol (BGP) ParametersBGPで使われる番号の割り当て一覧。

関連記事