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

iBGPとeBGPの違い

目次

iBGPとeBGPとは

BGPのピア関係は、相手が同じAS(自律システム)に属するか、異なるASに属するかによって2種類に分かれます。同じASに属するルータ同士のピアをiBGP(Internal BGP)、異なるASに属するルータ同士のピアをeBGP(External BGP)と呼びます。

どちらも同じBGPプロトコルで、メッセージの形式状態遷移も共通です。異なるのは経路を広告するときの振る舞いで、AS_PATHNEXT_HOPの扱い、ループ防止の仕組み、パケットのTTL、経路の優先度などが変わります。本記事ではこれらの違いを整理し、IOS XR(XRd)の検証環境で実際の動作を確認します。BGPの基本的な仕組みはBGP(Border Gateway Protocol)を参照してください。

違いの一覧

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

AS_PATHとNEXT_HOPの扱い

eBGPで経路を広告するとき、ルータはAS_PATHの先頭に自身のAS番号を追加し、NEXT_HOPを自身のアドレスに書き換えます。ASの境界を越えるたびに、その経路が「どのASを通ってきたか」と「次にどこへ渡せばよいか」が更新されるためです。

一方iBGPでは、どちらも変更しません。同じAS内での中継にすぎず、ASを越えていないためです。この結果、iBGPで受け取った経路のNEXT_HOPは、AS内のルータではなくAS外のルータのアドレスのままになります。受信したルータがこのNEXT_HOPに到達できないと経路が有効にならないため、IGPでそのアドレスへの経路を配るか、next-hop-selfを使う必要があります。詳細はnext-hop-selfで解説します。

ループ防止の仕組み

eBGPはAS_PATHでループを防ぎます。受信した経路のAS_PATHに自身のAS番号が含まれていれば、その経路は一度自分のASを通っていることになるため破棄します。

iBGPはAS_PATHが変化しないため、この方法が使えません。代わりに「iBGPピアから学習した経路は、他のiBGPピアへ広告しない」というルール(iBGPスプリットホライズン)でループを防ぎます。

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

スプリットホライズンにより、iBGPの経路は1ホップしか伝わりません。そのためAS内でBGPを動かすすべてのルータが、互いに直接iBGPピアを張る必要があります。これをフルメッシュと呼びます。

必要なピア数はルータ台数を n として n × (n - 1) ÷ 2 になり、10台なら45本、20台なら190本と急増します。この負担を減らす仕組みがルートリフレクタやコンフェデレーションで、ルートリフレクタについては別記事で解説します。

TTLとピアの前提

eBGPは既定でIPパケットのTTLを1にして送出します。TTLが1のパケットは次のルータで破棄されるため、ピアが直接接続されていることが前提になります。ルータを1台でも挟む構成ではebgp-multihopでTTLを増やす必要があります。

iBGPは既定でTTLが255なので、AS内のどこにいるルータとでもピアを張れます。このためiBGPのピアリングにはLoopbackインタフェースのアドレスを使うのが一般的です。物理インタフェースのアドレスでピアを張るとそのリンクの障害でセッションが切れますが、Loopbackであれば迂回経路がある限りセッションを維持できます。

実機での検証

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

R2はiBGPピア(R1)とeBGPピア(R3)の両方を持っているため、同じルータの上で2種類のピアを比較できます。

internal と external の表示

show bgp <プレフィックス>では、その経路をiBGPとeBGPのどちらで学習したかがinternal / externalとして表示されます。まずR2がeBGPで学習した192.168.3.0/24です。

R2 show bgp 192.168.3.0/24(eBGPで学習)
RP/0/RP0/CPU0:R2#show bgp 192.168.3.0/24
Sat Sep  5 05:10:56.009 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:16:33
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)

externalと表示され、Advertised IPv4 Unicast paths to peersにiBGPピアのR1(10.0.0.1)が挙がっています。eBGPで学習した経路はiBGPピアへ広告されます。

次に、R2がiBGPで学習した192.168.1.0/24です。

R2 show bgp 192.168.1.0/24(iBGPで学習)
RP/0/RP0/CPU0:R2#show bgp 192.168.1.0/24
Sat Sep  5 05:10:56.315 UTC
BGP routing table entry for 192.168.1.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 22           22
Last Modified: Sep  5 05:10:40.774 for 00:00:15
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
    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 22

こちらはinternalで、広告先はeBGPピアのR3(10.2.3.3)だけです。iBGPで学習した経路はeBGPピアへは広告されますが、他のiBGPピアへは広告されません。

iBGPスプリットホライズンの確認

R1が持つ192.168.3.0/24は、R2からiBGPで受け取った経路です。

R1 show bgp 192.168.3.0/24(iBGPで学習)
RP/0/RP0/CPU0:R1#show bgp 192.168.3.0/24
Sat Sep  5 05:11:03.447 UTC
BGP routing table entry for 192.168.3.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 26           26
Last Modified: Sep  5 05:10:40.774 for 00:00:22
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002
    10.2.3.3 (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 26

Not advertised to any peerと表示されており、どのピアにも広告していません。R1のBGPピアはR2だけで、そのR2はiBGPピアであるため、スプリットホライズンにより広告されないことがわかります。

AS_PATHとNEXT_HOPが変わらないこと

R1が持つ192.168.4.0/24は、AS 65003のR4が広告し、R3・R2を経由して届いた経路です。

R1 show bgp 192.168.4.0/24(iBGPで学習)
RP/0/RP0/CPU0:R1#show bgp 192.168.4.0/24
Sat Sep  5 05:11:03.750 UTC
BGP routing table entry for 192.168.4.0/24
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 25           25
Last Modified: Sep  5 05:10:40.774 for 00:00:23
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  65002 65003
    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 25

AS_PATH65002 65003で、R2がiBGPで広告する際に自身のAS番号65001を追加していません。NEXT_HOP10.2.3.3(R3のアドレス)のままで、R2のアドレスには書き換わっていません。from 10.0.0.2はこの経路を送ってきたピアがR2であることを示しますが、これはNEXT_HOPとは別の情報です。

R1がこの経路を使えているのは、R2がR3側のリンク(10.2.3.0/24)をOSPFで広告しており、10.2.3.3へ到達できるためです。

ピアの属性の違い

show bgp neighborの出力にも違いが現れます。まずiBGPピア(R1から見たR2)です。

R1 show bgp neighbor 10.0.0.2(iBGPピア、抜粋)
RP/0/RP0/CPU0:R1#show bgp neighbor 10.0.0.2
Sat Sep  5 05:11:25.445 UTC

BGP neighbor is 10.0.0.2
 Remote AS 65001, local AS 65001, internal link
 Description: iBGP to R2 (Loopback0)
 Remote router ID 10.0.0.2
  BGP state = Established, up for 00:00:45
  Previous State: Idle
  Last Received Message: Update
  NSR State: None
  Hold time is 180, keepalive interval is 60 seconds
  Configured hold time: 180, keepalive: 60, min acceptable hold time: 3
  Received 139 messages, 0 notifications, 0 in queue
  Sent 130 messages, 1 notifications, 0 in queue
  Fast fallover is not enabled
    Neighbor is not directly connected
    Neighbor fast-fallover is not configured
  Connections established 2; dropped 1
  Local host: 10.0.0.1, Local port: 43703, IF Handle: 0x00000000
  Foreign host: 10.0.0.2, Foreign port: 179

internal linkと表示され、Neighbor is not directly connectedとなっています。同じ項目をeBGPピア(R2から見たR3)で見ると、external linkNeighbor is directly connectedとなります(BGPメッセージの出力を参照)。

eBGPパケットのTTL

eBGPのパケットはTTLが1で送出されます。R2 - R3間のキャプチャーからBGPパケットのIP TTLを抜き出すと、すべて1になっています。

tshark -r bgp.pcap -Y bgp -T fields -e frame.number -e ip.src -e ip.dst -e ip.ttl -e bgp.type
1	10.2.3.2	10.2.3.3	1	3
9	10.2.3.2	10.2.3.3	1	1
15	10.2.3.3	10.2.3.2	1	1
18	10.2.3.2	10.2.3.3	1	1,4
19	10.2.3.3	10.2.3.2	1	4
20	10.2.3.2	10.2.3.3	1	2,2,2
21	10.2.3.3	10.2.3.2	1	2,2,2
23	10.2.3.3	10.2.3.2	1	2,2,4
25	10.2.3.3	10.2.3.2	1	2
27	10.2.3.2	10.2.3.3	1	4
29	10.2.3.3	10.2.3.2	1	2
31	10.2.3.2	10.2.3.3	1	4
33	10.2.3.3	10.2.3.2	1	4

一方iBGPはTTLが255なので、AS内で何台ルータを挟んでもピアを張れます。

検証Config

R1 config(r1_bgp-ibgp-ebgp.cfg) をダウンロード

R2 config(r2_bgp-ibgp-ebgp.cfg) をダウンロード

R3 config(r3_bgp-ibgp-ebgp.cfg) をダウンロード

R4 config(r4_bgp-ibgp-ebgp.cfg) をダウンロード

参考

資料タイトル概要
RFC 4271A Border Gateway Protocol 4 (BGP-4)BGP-4の基本仕様。iBGP / eBGPでの経路広告のルールを定義。
RFC 4456BGP Route ReflectioniBGPフルメッシュを緩和するルートリフレクタを定義。
IANABorder Gateway Protocol (BGP) ParametersBGPで使われる番号の割り当て一覧。

関連記事