iBGPとeBGPとは
BGPのピア関係は、相手が同じAS(自律システム)に属するか、異なるASに属するかによって2種類に分かれます。同じASに属するルータ同士のピアをiBGP(Internal BGP)、異なるASに属するルータ同士のピアをeBGP(External BGP)と呼びます。
どちらも同じBGPプロトコルで、メッセージの形式も状態遷移も共通です。異なるのは経路を広告するときの振る舞いで、AS_PATHとNEXT_HOPの扱い、ループ防止の仕組み、パケットのTTL、経路の優先度などが変わります。本記事ではこれらの違いを整理し、IOS XR(XRd)の検証環境で実際の動作を確認します。BGPの基本的な仕組みはBGP(Border Gateway Protocol)を参照してください。
違いの一覧
| 項目 | eBGP | iBGP |
|---|---|---|
| ピアの関係 | 異なるASに属するルータ同士 | 同じASに属するルータ同士 |
AS_PATH | 広告時に自身のAS番号を先頭に追加する | 変更しない |
NEXT_HOP | 広告時に自身のアドレスに書き換える | 変更しない |
| ループ防止 | AS_PATHに自身のAS番号が含まれる経路を破棄する | iBGPで学習した経路を他のiBGPピアへ広告しない(スプリットホライズン) |
| アドミニストレーティブディスタンス | 20 | 200 |
| IPパケットのTTL(既定値) | 1 | 255 |
| ピアの前提 | 直接接続されていること(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です。
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です。
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で受け取った経路です。
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 26Not advertised to any peerと表示されており、どのピアにも広告していません。R1のBGPピアはR2だけで、そのR2はiBGPピアであるため、スプリットホライズンにより広告されないことがわかります。
AS_PATHとNEXT_HOPが変わらないこと
R1が持つ192.168.4.0/24は、AS 65003のR4が広告し、R3・R2を経由して届いた経路です。
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 25AS_PATHは65002 65003で、R2がiBGPで広告する際に自身のAS番号65001を追加していません。NEXT_HOPも10.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)です。
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: 179internal linkと表示され、Neighbor is not directly connectedとなっています。同じ項目をeBGPピア(R2から見たR3)で見ると、external link、Neighbor is directly connectedとなります(BGPメッセージの出力を参照)。
eBGPパケットのTTL
eBGPのパケットはTTLが1で送出されます。R2 - R3間のキャプチャーからBGPパケットのIP TTLを抜き出すと、すべて1になっています。
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 4271 | A Border Gateway Protocol 4 (BGP-4) | BGP-4の基本仕様。iBGP / eBGPでの経路広告のルールを定義。 |
| RFC 4456 | BGP Route Reflection | iBGPフルメッシュを緩和するルートリフレクタを定義。 |
| IANA | Border Gateway Protocol (BGP) Parameters | BGPで使われる番号の割り当て一覧。 |