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

iBGPとeBGPの違い

目次

iBGPとeBGPとは

同じASに属するルータ同士のピアがiBGP(Internal BGP)、異なるASに属するルータ同士のピアがeBGP(External BGP)です。 どちらも同じプロトコルで、メッセージも状態遷移も共通です。異なるのは経路を広告するときの振る舞いとピアの張り方で、この記事ではその違いを整理し、IOS XR(XRd)で確認します。

違いの一覧

項目eBGPiBGP
ピアの関係異なるASに属するルータ同士同じASに属するルータ同士
AS_PATH広告時に自身のAS番号を先頭に追加する変更しない
NEXT_HOP広告時に自身のアドレスに書き換える変更しない(自分が発生させた経路を除く)
LOCAL_PREF付けない付ける(既定値100)
ループ防止AS_PATHに自身のAS番号が含まれる経路を破棄するiBGPで学習した経路を他のiBGPピアへ広告しない(スプリットホライズン)
アドミニストレーティブディスタンス20200
IPパケットのTTL(既定値)1255
ピアの前提直接接続されていること(ebgp-multihopなどで緩和可能)AS内であればどこでもよい
広告間隔(MRAI)の既定値30秒0秒(RFC 4271の推奨値は5秒)
一般的なピアリングアドレス直接接続インタフェースのアドレスLoopbackインタフェースのアドレス

AS_PATH・NEXT_HOP・LOCAL_PREF・ループ防止はRFC 4271の規定、それ以外の既定値はIOS XRのものです。MRAIはRFC 4271の第10章がeBGP 30秒・iBGP 5秒を推奨していますが、IOS XRのiBGPは0秒です。

AS_PATH・NEXT_HOP・LOCAL_PREFの扱い

eBGPで広告するとき、ルータはAS_PATHの先頭に自AS番号を足し、NEXT_HOPを自身のアドレスに書き換えます。iBGPではどちらも変更しません(RFC 4271 5.1.2、5.1.3)。 そのためiBGPで受け取った経路のNEXT_HOPはAS外のルータのアドレスのままで、受信したルータがそこへ到達できないと経路が有効になりません。IGPでそのアドレスへの経路を配るか、next-hop-selfを使います。

LOCAL_PREFはAS内での優先度なので、eBGPピアへ送るUPDATEには入れてはいけません(RFC 4271 5.1.5)。

ループ防止の仕組み

eBGPはAS_PATHに自AS番号を含む経路を捨ててループを防ぎます。iBGPではAS_PATHが変化しないので、代わりに「iBGPピアから学習した経路は他のiBGPピアへ広告しない」というルール(iBGPスプリットホライズン、RFC 4271 9.2)で防ぎます。

フルメッシュが必要になる理由

スプリットホライズンによりiBGPの経路は1ホップしか伝わらないので、AS内のBGPルータはすべて互いに直接ピアを張る必要があります(フルメッシュ)。

ピア数は n × (n - 1) ÷ 2(10台で45本、20台で190本)になり、これを減らすのがルートリフレクタとコンフェデレーションです。

eBGPの「直接接続」を支える2つの仕組み

eBGPのピアが直接接続でなければならないのは、2つの仕組みが別々に働くためです。

仕組み働き方緩める設定
直接接続の検査ピアのアドレスが直接接続のサブネットに無ければ、TCPの接続を始めない。状態はIdleのままignore-connected-check、またはebgp-multihop
TTL 1BGPのパケットをTTL 1で送るので、ルータを1台越えたところで捨てられるebgp-multihop <ホップ数>

直接接続の検査はルータの中で完結するので、ピアが直接接続でなければパケットは1つも出ません。検査だけを外すと接続を始めますが、TTL 1のパケットは途中のルータで捨てられます。ebgp-multihopはこの2つを両方緩めます(TTLは送信側が決めるので、両側に設定します)。

iBGPは既定でTTL 255で、直接接続の検査もしないので、AS内のどこにいるルータとでもピアを張れます。Loopbackのアドレスで張れば、迂回経路がある限りセッションを維持できます。

実機での検証

3つのASにXRd 26.1.1を4台置き、R1 - R2間がiBGP、R2 - R3・R3 - R4間がeBGPです。各ルータは192.168.N.0/24を広告しています。

R2はiBGPピア(R1)とeBGPピア(R3)の両方を持つので、1台の上で2種類のピアを比べられます。R4はR2から2ホップ先にいるので、直接接続の検査とTTLを試すのに使います。eBGPの出方向ルートポリシーはネイバーごとに別名にしています(中身はpassだけ)。

STEP操作確かめること
0初期状態R2の上でiBGPピアとeBGPピアを並べる(internal / external、広告先、ディスタンス、MRAI)
1R2でclear bgp ipv4 unicast * soft out同じ経路をiBGPとeBGPへ送るUPDATEを、キャプチャーで並べる
2R2 - R4(2ホップ先)をLoopback0でピアリング(オプションなし)直接接続の検査で、TCPを始めないこと
3R2・R4にignore-connected-checkだけを入れるTCPを始めるが、TTL 1のSYNがR3で捨てられること
4ignore-connected-checkを外してebgp-multihop 2確立すること。eBGPのループ防止
5R2 - R4のピアを削除して元に戻す(最終状態)STEP 0と同じ状態

STEP 0:1台のルータで2種類のピアを比べる

internal と external、広告先の違い

show bgp <プレフィックス>は学習元をinternal / externalで示します。R2がeBGPで学習した192.168.3.0/24はexternalで、広告先にiBGPピアのR1(10.0.0.1)が挙がっています。iBGPで学習した192.168.1.0/24はinternalで、広告先はeBGPピアのR3(10.2.3.3)だけです。iBGPで学習した経路は他のiBGPピアへ広告されません。

R2 show bgp 192.168.3.0/24(STEP 0)
RP/0/RP0/CPU0:R2#show bgp 192.168.3.0/24
Tue Sep 22 08:47:48.732 UTC
BGP routing table entry for 192.168.3.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                  5            5
Last Modified: Sep 22 08:35:28.023 for 00:12:20
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)
R2 show bgp 192.168.1.0/24(STEP 0)
RP/0/RP0/CPU0:R2#show bgp 192.168.1.0/24
Tue Sep 22 08:47:48.187 UTC
BGP routing table entry for 192.168.1.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                  4            4
Last Modified: Sep 22 08:35:16.023 for 00:12:32
Paths: (1 available, best #1)
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.2.3.3        
  Path #1: Received by speaker 0
  Advertised IPv4 Unicast paths to peers (in unique update groups):
    10.2.3.3        
  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
      Received Path ID 0, Local Path ID 1, version 4

広告するときにAS_PATHとNEXT_HOPがどう変わるか

R2が2つのピアへ広告している内容です。iBGPピア(R1)向けでは、R3から受け取った経路がNext Hop 10.2.3.3、AS Path 65002 / 65002 65003のままです。eBGPピア(R3)向けではNext HopがすべてR2自身の10.2.3.2に書き換わり、AS Pathの先頭に65001が付いています。

R2 show bgp neighbors 10.0.0.1 advertised-routes(STEP 0)
RP/0/RP0/CPU0:R2#show bgp neighbors 10.0.0.1 advertised-routes
Tue Sep 22 08:47:50.600 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 paths
R2 show bgp neighbors 10.2.3.3 advertised-routes(STEP 0)
RP/0/RP0/CPU0:R2#show bgp neighbors 10.2.3.3 advertised-routes
Tue Sep 22 08:47:51.422 UTC
Network            Next Hop        From            AS Path
192.168.1.0/24     10.2.3.2        10.0.0.1        65001i
192.168.2.0/24     10.2.3.2        Local           65001i

Processed 2 prefixes, 2 paths

R1側ではAS_PATHもNEXT_HOPも変わらずに届いています(from 10.0.0.2は送ってきたピアで、NEXT_HOPとは別の情報です)。Not advertised to any peerがiBGPスプリットホライズンで、R1のピアはiBGPのR2だけなので、どこへも広告されません。

R1 show bgp 192.168.4.0/24(STEP 0)
RP/0/RP0/CPU0:R1#show bgp 192.168.4.0/24
Tue Sep 22 08:46:57.900 UTC
BGP routing table entry for 192.168.4.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                  6            6
Last Modified: Sep 22 08:35:58.023 for 00:10:59
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.2.3.3 (metric 2) from 10.0.0.2 (10.0.0.2)
      Origin IGP, localpref 100, valid, internal, best, group-best
      Received Path ID 0, Local Path ID 1, version 6

R1がこの経路を使えるのは、R2が10.2.3.0/24をOSPFで広告していて10.2.3.3へ到達できるためです。

アドミニストレーティブディスタンスの違い

show route bgpの角括弧の左の数字がディスタンスです。同じ192.168.3.0/24でも、eBGPで学習したR2は20、iBGPで学習したR1は200です。

R2 show route bgp(STEP 0)
RP/0/RP0/CPU0:R2#show route bgp
Tue Sep 22 08:47:48.046 UTC

B    192.168.1.0/24 [200/0] via 10.0.0.1, 00:12:32
B    192.168.3.0/24 [20/0] via 10.2.3.3, 00:12:20
B    192.168.4.0/24 [20/0] via 10.2.3.3, 00:11:50
R1 show route bgp(STEP 0)
RP/0/RP0/CPU0:R1#show route bgp
Tue Sep 22 08:46:56.947 UTC

B    192.168.2.0/24 [200/0] via 10.0.0.2, 00:11:41
B    192.168.3.0/24 [200/0] via 10.2.3.3, 00:11:29
B    192.168.4.0/24 [200/0] via 10.2.3.3, 00:10:59

ピアの属性の違い

R2のshow bgp neighborには、2つのピアの違いが並びます。

R2 show bgp neighbor(STEP 0、抜粋)
BGP neighbor is 10.0.0.1
 Remote AS 65001, local AS 65001, internal link
<snip>
  Minimum time between advertisement runs is 0 secs
<snip>
    Neighbor is not directly connected
<snip>
BGP neighbor is 10.2.3.3
 Remote AS 65002, local AS 65001, external link
<snip>
  Enforcing first AS is enabled
<snip>
  Minimum time between advertisement runs is 30 secs
<snip>
    Neighbor is directly connected
行iBGP(10.0.0.1)eBGP(10.2.3.3)
リンク種別internal linkexternal link
直接接続Neighbor is not directly connectedNeighbor is directly connected
広告間隔(MRAI)0 secs30 secs
先頭ASの検査—Enforcing first AS is enabled(AS_PATHの先頭が相手のAS番号でないUPDATEを拒否する)

STEP 1:同じ経路をiBGPとeBGPへ送るUPDATEを比べる

R2でclear bgp ipv4 unicast * soft outを実行すると、R2はセッションを切らずに全ピアへ経路を送り直します。R1 - R2間とR2 - R3間を同時にキャプチャーし、R2自身の192.168.2.0/24を運ぶUPDATEを並べました。

STEP 1 R1 - R2間 No.3 UPDATE(R2 → R1)tshark -V(抜粋)
Internet Protocol Version 4
    Time to Live: 255
    Source Address: 10.0.0.2
    Destination Address: 10.0.0.1
Border Gateway Protocol - UPDATE Message
<snip>
    Length: 61
<snip>
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 38
<snip>
        Path Attribute - MP_REACH_NLRI
<snip>
                ...1 .... = Extended-Length: Set
<snip>
            Length: 13
<snip>
            Next hop: 10.0.0.2
<snip>
                192.168.2.0/24
<snip>
        Path Attribute - ORIGIN: IGP
<snip>
                ...0 .... = Extended-Length: Not set
<snip>
            Length: 1
<snip>
        Path Attribute - AS_PATH: empty
<snip>
                ...0 .... = Extended-Length: Not set
<snip>
            Length: 0
        Path Attribute - MULTI_EXIT_DISC: 0
<snip>
                ...0 .... = Extended-Length: Not set
<snip>
            Length: 4
<snip>
        Path Attribute - LOCAL_PREF: 100
<snip>
                ...0 .... = Extended-Length: Not set
<snip>
            Length: 4
            Local preference: 100
STEP 1 R2 - R3間 No.1 UPDATE(R2 → R3)tshark -V(抜粋)
Internet Protocol Version 4
    Time to Live: 1
    Source Address: 10.2.3.2
    Destination Address: 10.2.3.3
Border Gateway Protocol - UPDATE Message
<snip>
    Length: 60
<snip>
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 37
<snip>
        Path Attribute - MP_REACH_NLRI
<snip>
                ...1 .... = Extended-Length: Set
<snip>
            Length: 13
<snip>
            Next hop: 10.2.3.2
<snip>
                192.168.2.0/24
<snip>
        Path Attribute - ORIGIN: IGP
<snip>
                ...0 .... = Extended-Length: Not set
<snip>
            Length: 1
<snip>
        Path Attribute - AS_PATH: 65001 
<snip>
                ...0 .... = Extended-Length: Not set
<snip>
            Length: 6
            AS Path segment: 65001
<snip>
        Path Attribute - MULTI_EXIT_DISC: 0
<snip>
                ...0 .... = Extended-Length: Not set
<snip>
            Length: 4

上のiBGPのパケット(STEP 1 R1 - R2間 No.3)のpcapをダウンロード

上のeBGPのパケット(STEP 1 R2 - R3間 No.1)のpcapをダウンロード

項目iBGP(R2 → R1)eBGP(R2 → R3)
IPのTTL2551
NEXT_HOP10.0.0.2(R2のLoopback0。自分が発生させた経路なので自分のアドレス)10.2.3.2(R2のR3側インタフェース)
AS_PATH空65001
LOCAL_PREF100無い

STEP 2:直接接続でないeBGPピアは接続を始めない

R2とR4は、R3をはさんで2ホップ離れています。互いのLoopback0へのスタティック経路を入れてから、Loopback0同士でeBGPピアを設定します(update-source Loopback0、オプションなし)。

R2 R4へのeBGPピア(STEP 2、R2のcommit)
route-policy TO-TEST
  pass
end-policy
!
route-policy FROM-TEST
  pass
end-policy
!
router static
 address-family ipv4 unicast
  10.0.0.4/32 10.2.3.3
 !
!
router bgp 65001
 neighbor 10.0.0.4
  remote-as 65003
  description test: eBGP to R4 (2 hops away)
  update-source Loopback0
  address-family ipv4 unicast
   route-policy FROM-TEST in
   route-policy TO-TEST out
   soft-reconfiguration inbound always
  !
 !
!

R4のLoopback0への経路はスタティックで入っていますが(show route 10.0.0.4/32)、状態はIdle (eBGP neighbor not directly connected)です。Local hostは0.0.0.0、Connections established 0で、TCPの接続を始めていません。R2 - R3間とR3 - R4間のキャプチャーにも、10.0.0.4宛のパケットは1つもありません。

R2 show route 10.0.0.4/32(STEP 2)
RP/0/RP0/CPU0:R2#show route 10.0.0.4/32
Tue Sep 22 08:57:32.124 UTC

Routing entry for 10.0.0.4/32
  Known via "static", distance 1, metric 0
  Installed Sep 22 08:54:36.604 for 00:02:55
  Routing Descriptor Blocks
    10.2.3.3
      Route metric is 0
  No advertising protos. 
R2 show bgp neighbor 10.0.0.4(STEP 2、抜粋)
BGP neighbor is 10.0.0.4
 Remote AS 65003, local AS 65001, external link
<snip>
  BGP state = Idle (eBGP neighbor not directly connected)
<snip>
  Connections established 0; dropped 0
  Local host: 0.0.0.0, Local port: 0, IF Handle: 0x00000000
  Foreign host: 10.0.0.4, Foreign port: 0
<snip>
  External BGP neighbor not directly connected.

STEP 3:直接接続の検査だけを外す

R2・R4にignore-connected-checkだけを入れます。TTLは1のままです。

R2 ignore-connected-checkの設定(STEP 3、R2のcommit)
router bgp 65001
 neighbor 10.0.0.4
  ignore-connected-check
 !
!

状態はIdleからActiveに変わり、Local hostが10.0.0.2になりました。直接接続の検査が外れて、TCPの接続を始めたということです。それでもセッションは上がりません。

R2 show bgp neighbor 10.0.0.4(STEP 3、抜粋)
BGP neighbor is 10.0.0.4
 Remote AS 65003, local AS 65001, external link
<snip>
  BGP state = Active
<snip>
  Connections established 0; dropped 0
  Local host: 10.0.0.2, Local port: 0, IF Handle: 0x00000000
  Foreign host: 10.0.0.4, Foreign port: 0

キャプチャーを見ると、R2が送ったSYNのTTLは1で、R3(10.2.3.3)がICMP Time Exceededを返しています。SYNは2秒・4秒・8秒の間隔で再送され、そのたびに同じICMPが返ります。R3 - R4間のキャプチャーには、R2から来たパケットは1つもありません(R4も同じ理由で、R4からのSYNがR3で捨てられています)。

R2 - R3間 パケットキャプチャー(STEP 3、tshark一覧)
    1   0.000000     10.0.0.2 → 10.0.0.4     TCP 62 16770 → 179 [SYN] Seq=0 Win=32768 Len=0 MSS=1240 WS=1
    2   0.003066     10.2.3.3 → 10.0.0.2     ICMP 110 Time-to-live exceeded (Time to live exceeded in transit)
    3   2.000413     10.0.0.2 → 10.0.0.4     TCP 62 [TCP Retransmission] 16770 → 179 [SYN] Seq=0 Win=32768 Len=0 MSS=1240 WS=1
    4   2.003217     10.2.3.3 → 10.0.0.2     ICMP 110 Time-to-live exceeded (Time to live exceeded in transit)
    5   6.001255     10.0.0.2 → 10.0.0.4     TCP 62 [TCP Retransmission] 16770 → 179 [SYN] Seq=0 Win=32768 Len=0 MSS=1240 WS=1
    6   6.004113     10.2.3.3 → 10.0.0.2     ICMP 110 Time-to-live exceeded (Time to live exceeded in transit)
STEP 3 R2 - R3間 No.2 ICMP(R3 → R2)tshark -V(抜粋)
Internet Protocol Version 4, Src: 10.2.3.3, Dst: 10.0.0.2
<snip>
    Time to Live: 255
<snip>
    Source Address: 10.2.3.3
    Destination Address: 10.0.0.2
<snip>
Internet Control Message Protocol
    Type: Time-to-live exceeded (11)
<snip>
    Code: 0 (Time to live exceeded in transit)
<snip>
    Internet Protocol Version 4, Src: 10.0.0.2, Dst: 10.0.0.4
<snip>
        Time to Live: 1
<snip>
        Source Address: 10.0.0.2
        Destination Address: 10.0.0.4
<snip>
    Transmission Control Protocol, Src Port: 16770, Dst Port: 179, Seq: 1946219533
上のtshark出力のパケット(STEP 3 No.2 ICMP)のpcapをダウンロード

STEP 4:ebgp-multihopで確立する

ignore-connected-checkを外し、R2・R4の両側にebgp-multihop 2を入れます。確立し、表示はmay be up to 2 hops awayに変わりました。

R2 show bgp neighbor 10.0.0.4(STEP 4、抜粋)
BGP neighbor is 10.0.0.4
 Remote AS 65003, local AS 65001, external link
<snip>
  BGP state = Established, up for 00:02:58
<snip>
  Connections established 1; dropped 0
  Local host: 10.0.0.2, Local port: 57050, IF Handle: 0x00000000
<snip>
  External BGP neighbor may be up to 2 hops away.

R2が送るパケットはTTL 2になりました。R4も2で送りますが、R3で1つ減るので、R2 - R3間では1です。

R2 - R3間 パケットキャプチャー(STEP 4、R2 - R4のBGP、TTL付き)
9	10.0.0.2	10.0.0.4	2	OPEN Message
12	10.0.0.4	10.0.0.2	1	OPEN Message, KEEPALIVE Message
13	10.0.0.2	10.0.0.4	2	KEEPALIVE Message
15	10.0.0.4	10.0.0.2	1	UPDATE Message, UPDATE Message, UPDATE Message, UPDATE Message
16	10.0.0.2	10.0.0.4	2	UPDATE Message, UPDATE Message, UPDATE Message, UPDATE Message, UPDATE Message
22	10.0.0.4	10.0.0.2	1	UPDATE Message, KEEPALIVE Message

AS_PATHによるループ防止

このセッションで、R4は自分が学習した経路をすべてR2へ送ります。その中の192.168.1.0/24・192.168.2.0/24は、R2のAS 65001から出てR3・R4を回ってきた経路で、AS_PATHは65003 65002 65001です(No.15)。

STEP 4 R2 - R3間 No.15 UPDATE(R4 → R2)tshark -V(抜粋)
Border Gateway Protocol - UPDATE Message
<snip>
                192.168.1.0/24
<snip>
                192.168.2.0/24
<snip>
        Path Attribute - AS_PATH: 65003 65002 65001 
<snip>
                AS4: 65003
                AS4: 65002
                AS4: 65001
上のtshark出力のパケット(STEP 4 No.15 UPDATE)のpcapをダウンロード

R2は自AS番号の65001を含むこの2本を捨てます。入方向ポリシー適用前の経路を見せるreceived routesにも入っていません。

R2 show bgp neighbors 10.0.0.4 received routes(STEP 4)
RP/0/RP0/CPU0:R2#show bgp neighbors 10.0.0.4 received routes
Tue Sep 22 09:08:11.188 UTC
BGP router identifier 10.0.0.2, local AS number 65001
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0000000   RD version: 7
BGP main routing table version 7
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.3.0/24     10.0.0.4                               0 65003 65002 i
*> 192.168.4.0/24     10.0.0.4                 0             0 65003 i

Processed 2 prefixes, 2 paths

STEP 5:元に戻す(最終状態)

R2 - R4のピア、スタティック経路、試験用のポリシーを削除し、STEP 0と同じ状態に戻します。

検証Configおよびshow結果

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

ファイル内容
..._show.txtshow version / show interface description / show route / show bgp / show bgp summary / show bgp <プレフィックス> / show bgp neighbors / ピアごとのadvertised-routes・routes・received routes / show bgp update-group / show rpl route-policy。R1・R2はshow ospf neighborも含む。STEP 2〜4はR2にshow route 10.0.0.4/32、R4にshow route 10.0.0.2/32も含む
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._ping.txtそのSTEPのpingとtraceroute(R1・R2・R4から192.168.4.1または192.168.1.1へ50発)
..._trace.txtshow bgp trace neighborとshow bgp trace error(BGPプロセス内部のイベント)
..._commit.cfgそのSTEPで実際にコミットされた設定(設定を変えたルータのみ)
..._exec.txtそのSTEPで実行したclear bgpのコマンドと時刻(STEP 1のR2)

STEP 0:初期状態

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtrace—
R3showlogrun—trace—
R4showlogrunpingtrace—

STEP 1:R2でclear bgp ipv4 unicast * soft out

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtraceexec
R3showlogrun—trace—
R4showlogrunpingtrace—

STEP 2:R2 - R4をLoopback0でピアリング(オプションなし)

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtracecommit
R3showlogrun—tracecommit
R4showlogrunpingtracecommit

STEP 3:R2・R4にignore-connected-check

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtracecommit
R3showlogrun—trace—
R4showlogrunpingtracecommit

STEP 4:ignore-connected-checkを外してebgp-multihop 2

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtracecommit
R3showlogrun—trace—
R4showlogrunpingtracecommit

STEP 5:R2 - R4のピアを削除して元に戻す(最終状態)

ルータshow出力syslogrunning-configpingtrace投入した設定
R1showlogrunpingtrace—
R2showlogrunpingtracecommit
R3showlogrun—tracecommit
R4showlogrunpingtracecommit

パケットキャプチャーはSTEPごとに取得しています(キャプチャーしていない区間は「—」)。

STEPR1 - R2間R2 - R3間R3 - R4間
0pcappcap—
1pcappcap—
2—pcappcap
3—pcappcap
4—pcappcap
5—pcap—

参考

資料タイトル概要
RFC 4271A Border Gateway Protocol 4 (BGP-4)BGP-4の基本仕様。5.1.2〜5.1.5でAS_PATH・NEXT_HOP・LOCAL_PREFの扱い、9.2でiBGPスプリットホライズン、第10章でMRAIの推奨値を定義。
RFC 4456BGP Route ReflectioniBGPフルメッシュを緩和するルートリフレクタを定義。
IANABorder Gateway Protocol (BGP) ParametersBGPで使われる番号の割り当て一覧。

関連記事