iBGP(Internal BGP)では、AS 内のルータ同士がフルメッシュでピアを張るのが基本です。iBGP には「iBGP ネイバーから学習した経路を、別の iBGP ネイバーへは広告しない」というルールがあるためです。このルールは AS 内でのルーティングループを防ぐためのものですが、そのままでは AS 内のすべてのルータに経路を行き渡らせるには、すべてのルータ同士が直接ピアを張る必要があります。
この記事では、Cisco ルータ3台で、フルメッシュでないと経路が届かないことを確認し、R1–R3 間にも iBGP を追加してフルメッシュにする手順を確認します。
- R1–R2、R2–R3 の間に iBGP を設定する
- R1 のループバックを広告し、R3 には届かないことを確認する
- EIGRP で R1 と R3 の間の到達性を確保する
- R1–R3 の間にも iBGP を張り、フルメッシュにする
iBGP フルメッシュの設定例
3台のルータ(R1、R2、R3)で iBGP フルメッシュを構成します。3台とも AS 123 に属し、R1–R2 と R2–R3 が物理的に接続されています。
R1–R2、R2–R3 の iBGP を設定する
まず、物理的に隣り合うルータ同士で iBGP を設定します。remote-as に自分と同じ AS 番号(123)を指定すると iBGP になります。この時点では R1 と R3 の間にピアはなく、フルメッシュではありません。
R1
R1(config)#router bgp 123 R1(config-router)#neighbor 192.168.12.2 remote-as 123
R2
R2(config)#router bgp 123 R2(config-router)#neighbor 192.168.12.1 remote-as 123 R2(config-router)#neighbor 192.168.23.3 remote-as 123
R3
R3(config)#router bgp 123 R3(config-router)#neighbor 192.168.23.2 remote-as 123
R1 のループバックを広告して確認する
R1 でループバックアドレス 1.1.1.1/32 を広告します。
R1
R1(config)#router bgp 123
R1(config-router)#network 1.1.1.1 mask 255.255.255.255
R2 での確認
R2 で、R1 からの経路を学習しているか確認します。
R2#sh ip bgp
BGP table version is 2, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*>i 1.1.1.1/32 192.168.12.1 0 100 0 I
| 表示 | 意味 |
|---|---|
| *>i | 有効(*)なベストパス(>)で、iBGP(i)で学習した経路 |
| Next Hop 192.168.12.1 | R1 のアドレス。R2 から直結で到達できる |
| LocPrf 100 | Local Preference のデフォルト値。iBGP ピアの間で受け渡される |
| Path | AS 番号が入っていない。AS_PATH に AS 番号が付くのは eBGP ピアへ広告するときなので、AS 内で生まれた経路は空になる。末尾の1文字は Origin 属性(network コマンドで載せた経路は IGP) |
R3 での確認
R3 でも同じように確認しますが、BGP テーブルは空です。R2 は R1 から iBGP で学習した 1.1.1.1/32 を、別の iBGP ネイバーである R3 には広告しません。
R3#sh ip bgp R3#
R3 が R1 の経路を受け取るには、R1 と R3 の間にも直接 iBGP を張る必要があります。これが、iBGP でフルメッシュが必要になる理由です。
IGP を利用した R1 と R3 の接続
EIGRP で R1–R3 間の到達性を確保する
R1 と R3 は直結していないので、iBGP を張るには、まずお互いのアドレスに到達できる必要があります。IGP(内部ゲートウェイプロトコル。今回は EIGRP)を R1〜R3 で有効にして、到達性を確保します。
R1〜R3 : R1(config)#router eigrp 123 R1(config-router)#network 192.168.0.0 0.0.255.255
network 192.168.0.0 0.0.255.255 は、192.168. で始まるアドレスを持つインタフェースすべてで EIGRP を有効にする指定です。EIGRP の AS 番号(ここでは 123)は BGP の AS 番号とは関係ありませんが、EIGRP のネイバーになるルータ同士で一致させる必要があります。
IGP 接続性の確認
R1 と R3 で、相手側のネットワークを EIGRP で学習していることと、ping が通ることを確認します。
R1#sh ip route eigrp
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override
Gateway of last resort is not set
D 192.168.23.0/24 [90/307200] via 192.168.12.2, 00:00:59, FastEthernet0/0.12
R1#ping 192.168.23.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.23.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/2 ms
R3#sh ip route eigrp
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override
Gateway of last resort is not set
D 192.168.12.0/24 [90/307200] via 192.168.23.2, 00:01:46, FastEthernet0/0.23
R3#ping 192.168.12.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/2 ms
R3#
| 表示 | 意味 |
|---|---|
| D | EIGRP で学習した経路 |
| [90/307200] | アドミニストレーティブディスタンス 90(EIGRP 内部経路)と、EIGRP のメトリック |
| via 192.168.12.2 | R1 から見た次の宛先は R2 |
| Success rate is 100 percent | R1 から R3(192.168.23.3)へ、R3 から R1(192.168.12.1)へ届いている |
R1 と R3 の iBGP ピアリング設定
R1–R3 にも iBGP を張りフルメッシュにする
IGP で到達性を確保したら、R1 と R3 の間に直接 iBGP を設定します。
R1
R1(config)#router bgp 123
R1(config-router)#neighbor 192.168.23.3 remote-as 123
R3
R3(config)#router bgp 123
R3(config-router)#neighbor 192.168.12.1 remote-as 123
*May 6 12:16:31.512: %BGP-5-ADJCHANGE: neighbor 192.168.12.1 Up
R1 と R3 は直結していませんが、iBGP はデフォルトで TTL=255 で BGP パケットを送るので、R2 を経由しても TCP セッションを張れます。R3 で BGP テーブルを確認すると、R1 から 1.1.1.1/32 を学習しています。
R3#sh ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*>i 1.1.1.1/32 192.168.12.1 0 100 0 i
Next Hop の 192.168.12.1 へは EIGRP の経路で到達できるので、ベストパス(>)になっています。
この検証ではインタフェースのアドレスでピアを張りましたが、本番の iBGP では、IGP でループバックを広告し、ループバック同士で update-source を使ってピアを張るのが一般的です。物理リンクが1本切れても、IGP が別の経路に切り替えれば BGP セッションを維持できます。詳しくは update-source と ebgp-multihop の記事 を参照してください。
iBGP でフルメッシュが必要な理由
eBGP では、受け取った経路の AS_PATH に自分の AS 番号が含まれていればループと判断して捨てられます。しかし iBGP は同じ AS の中のやり取りで、AS_PATH に AS 番号が追加されないため、この方法ではループを検出できません。その代わりに iBGP では、iBGP ネイバーから学習した経路を別の iBGP ネイバーへ広告しないことでループを防ぎます。
このため、AS 内のすべてのルータが互いに直接ピアを張る必要があり、ルータが増えるとピアの数が急に増えます。N 台のルータでフルメッシュにするのに必要な iBGP ピアの数は N(N-1)/2 です。
| ルータの台数 | 必要な iBGP ピアの数 |
|---|---|
| 3台 | 3 |
| 5台 | 10 |
| 10台 | 45 |
| 20台 | 190 |
スケーラビリティ対策:ルートリフレクタとコンフェデレーション
ネットワークが大きくなると、フルメッシュの維持は難しくなります。そこで、次の2つの方法が使われます。
| 方法 | 仕組み | 参考記事 |
|---|---|---|
| ルートリフレクタ | 特定のルータ(ルートリフレクタ)が、iBGP で学習した経路を他の iBGP ピアへ反射(再広告)する。各ルータはルートリフレクタとだけピアを張ればよい | Cisco BGPルートリフレクタの設定と動作検証 |
| コンフェデレーション | AS を複数の小さなサブ AS に分け、サブ AS の中だけをフルメッシュにする。サブ AS 同士は eBGP に近い形でつなぐ | BGPコンフェデレーション設定と動作確認 |
うまくいかないときの切り分け
| 状態 | よくある原因 | 確認すること |
|---|---|---|
| 経路が届かない | 経路を広告したルータと直接 iBGP を張っていない(フルメッシュになっていない) | 各ルータの show ip bgp summary で、他のすべての iBGP ルータとピアがあるか |
| ピアが Up しない | 相手のアドレスへの経路がない | show ip route <相手のアドレス>、ping |
> が付かない | Next Hop に到達できない(inaccessible) | show ip bgp <プレフィックス>、show ip route <Next Hop> |
まとめ
iBGP では、ループを防ぐために「iBGP で学習した経路は他の iBGP ピアへ広告しない」ルールがあり、AS 内のすべてのルータに経路を届けるにはフルメッシュが必要です。直結していないルータ同士でピアを張るには、IGP などで相手のアドレスへの到達性を先に確保します。ネットワークの規模が大きくなったら、ルートリフレクタやコンフェデレーションでピアの数を減らします。
コメント