はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
今回は、今まで学んできたBGPの基本を実機を使って確認し、理解を深めていきたいと思います。

理解には、実機確認が一番早い!
検証構成
今回、実機確認で用いるのはEVE-NGで構築した以下の構成を利用します。

Cisco IOSを使って確認していきます!

ルータの若番が小さいIPアドレスに設定しています。
この構成の理由は、「iBGP」、「eBGP」、「Network文による経路広報」の3つを確認するためにASを2つ、同じAS内に複数のルータを構築しました。
実際に動作確認をしてみよう!
先程も少し触れましたが、今回は以下の表に記載の3項目について実機確認を実施していきます。
| No | 項目 | 確認内容 |
|---|---|---|
| 1 | iBGPの設定 | iBGPの設定とパケットキャプチャ |
| 2 | eBGPの設定 | eBGPの設定とパケットキャプチャ |
| 3 | Network文による経路広報の設定 | AS内外への経路広報とパケットキャプチャ |
項目①:iBGPの設定
最初の設定と確認は、同一AS内に存在するルータで設定する「iBGP」です。
「iBGP」は、同じASに属する全ルータでピアを張り合う「フルメッシュ構成」にする必要があります。

その手間を省くためにルートリフレクタを使う場合もあります!
基本となるコマンド
BGPかつiBGPピアのための基本となる設定は以下のコマンドを利用します。
(config)# router bgp <AS番号>
(config-router)# bgp router-id <BGPルータIDとするIPアドレス>
(config-router)# neighbor <接続先IPアドレス> remote-as <接続先のAS番号> *iBGPの場合:同一AS番号
(config-router)# neighbor <IPアドレス> update-source <接続元となるInterface>
設定ログ
実際に実機に投入したConfigの一例を以下にまとめておきます。
Router1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#router bgp 100
Router1(config-router)#neighbor 10.10.3.1 remote-as 100
Router1(config-router)#neighbor 10.10.3.1 update-source loopback 0
状態確認
iBGPピアの設定後は、実際にピアが確立できているかどうかを確認してみましょう。
「show ip bgp summary」で確認でき、ネイバーごとのAS番号やVersion、BGPメッセージの送受信数、Up/Down時間や状態を確認することができます。

BGPピア状態を確認したいならこのコマンドが一般的だと思います!
Router1#show ip bgp summary
BGP router identifier 10.10.1.1, local AS number 100
BGP table version is 1, main routing table version 1
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.10.2.1 4 100 19 18 1 0 0 00:13:21 0
10.10.3.1 4 100 6 4 1 0 0 00:02:44 0
10.10.4.1 4 100 2 2 1 0 0 00:00:35 0
Router1#
パケットキャプチャ
Router1とRouter2間でiBGPピアを確立した時のパケットキャプチャを実施してみました。
最初にRouter1(10.10.1.1)とRouter2(10.10.2.1)を送信元としたOPENメッセージがそれぞれ送信されています。
確立後にはKEEPALIVEメッセージが送信されていることが確認できます。

OPENメッセージのOptional Parametersを見ていくとAS番号(100)なのがわかります。

項目②:eBGPの設定
次に確認するのは、外部ASに存在するルータと接続を行う「eBGP」です。
「eBGP」の設定は、「iBGP」と基本的に同じ設定になり、「接続先のAS番号」で判別されます。

eBGPではルートリフレクタを基本的には利用しません
基本となるコマンド
(config)# router bgp <AS番号>
(config-router)# bgp router-id <BGPルータIDとするIPアドレス>
(config-router)# neighbor <接続先IPアドレス> remote-as <接続先のAS番号> *eBGPの場合:異なるAS番号
(config-router)# neighbor <IPアドレス> update-source <接続元となるInterface>
設定ログ
Router1(config)# router bgp 100
Router1(config-router)# neighbor 192.168.1.2 remote-as 200
Router1(config-router)# neighbor 192.168.1.2 update-source gigabitEthernet 0/3
Router5(config)# router bgp 200
Router5(config-router)# neighbor 192.168.1.1 remote-as 100
Router1(config-router)# neighbor 192.168.1.2 update-source gigabitEthernet 0/3
状態確認
設定では「remote-as」で指定するAS番号がそれぞれ異なるように設定しているため、「eBGP」として判断されます。
「show ip bgp summary」では、AS番号を見て判断することになります。
Router1#show ip bgp summary
BGP router identifier 10.10.1.1, local AS number 100
BGP table version is 1, main routing table version 1
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.10.2.1 4 100 139 139 1 0 0 02:04:06 0
10.10.3.1 4 100 14 15 1 0 0 00:11:46 0
10.10.4.1 4 100 15 14 1 0 0 00:11:37 0
192.168.1.2 4 200 11 11 1 0 0 00:06:32 0
パケットキャプチャ

項目③:Network文による経路広報の設定
最後に確認するのは、Network文による経路広報を確認していきたいと思います。
確認ポイントは「ルータ4」と「ルータ7」です。
このルータでLoopbackを広報し確認していきます。
基本となるコマンド
(config)# router bgp <AS番号>
(config-router)# network <広報するPrefix/IPアドレス> mask X.X.X.X(Prefix長)
設定ログ
Router4(config)#router bgp 100
Router4(config-router)#network 10.10.4.1 mask 255.255.255.255
状態確認
ルータ7で事前状態を確認してみたいと思います。
Router7#show ip route
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, p - overrides from PfR
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
O 10.2.0.0/30 [110/2] via 10.2.2.1, 02:14:03, GigabitEthernet0/3
[110/2] via 10.2.1.1, 02:14:03, GigabitEthernet0/2
C 10.2.1.0/30 is directly connected, GigabitEthernet0/2
L 10.2.1.2/32 is directly connected, GigabitEthernet0/2
C 10.2.2.0/30 is directly connected, GigabitEthernet0/3
L 10.2.2.2/32 is directly connected, GigabitEthernet0/3
O 10.20.5.1/32 [110/2] via 10.2.1.1, 02:14:03, GigabitEthernet0/2
O 10.20.6.1/32 [110/2] via 10.2.2.1, 02:14:03, GigabitEthernet0/3
C 10.20.7.1/32 is directly connected, Loopback0
最初の状態ではルーティングテーブルに何もありませんが、「設定ログ」で記載したConfigを投入後どうなっているか確認していきましょう。
Router7#show ip route
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, p - overrides from PfR
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
O 10.2.0.0/30 [110/2] via 10.2.2.1, 02:23:24, GigabitEthernet0/3
[110/2] via 10.2.1.1, 02:23:24, GigabitEthernet0/2
C 10.2.1.0/30 is directly connected, GigabitEthernet0/2
L 10.2.1.2/32 is directly connected, GigabitEthernet0/2
C 10.2.2.0/30 is directly connected, GigabitEthernet0/3
L 10.2.2.2/32 is directly connected, GigabitEthernet0/3
O 10.20.5.1/32 [110/2] via 10.2.1.1, 02:23:24, GigabitEthernet0/2
O 10.20.6.1/32 [110/2] via 10.2.2.1, 02:23:24, GigabitEthernet0/3
C 10.20.7.1/32 is directly connected, Loopback0
設定投入後にも関わらず「10.10.4.1/32」がありません。
では、BGPテーブルを見ていきましょう。
Router7#show ip bgp
BGP table version is 2, local router ID is 10.20.7.1
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,
t secondary path,
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 10.10.4.1/32 192.168.1.1 0 100 0 100 i
*> 10.20.7.1/32 0.0.0.0 0 32768 i
Router7#
「10.10.4.1」をしっかり受信していますが、ルーティングテーブルには出力されていません。

これはなぜでしょう?
ルータ7がNexthopとなっている「192.168.1.1」の経路を持っていないため
これを解決するためには、eBGPピアを持つルータ(ルータ5)から各iBGPに対し「next-hop-self」を設定してあげます。

この設定でeBGPルータが持つIPアドレスにnexthopを書き換えることができます
Router5(config)#router bgp 200
Router5(config-router)#neighbor 10.20.6.1 next-hop-self
Router5(config-router)#neighbor 10.20.7.1 next-hop-self
設定後の状態を確認してみましょう。
Router7#show ip route
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, p - overrides from PfR
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 9 subnets, 2 masks
O 10.2.0.0/30 [110/2] via 10.2.2.1, 02:33:31, GigabitEthernet0/3
[110/2] via 10.2.1.1, 02:33:31, GigabitEthernet0/2
C 10.2.1.0/30 is directly connected, GigabitEthernet0/2
L 10.2.1.2/32 is directly connected, GigabitEthernet0/2
C 10.2.2.0/30 is directly connected, GigabitEthernet0/3
L 10.2.2.2/32 is directly connected, GigabitEthernet0/3
B 10.10.4.1/32 [200/0] via 10.20.5.1, 00:01:02
O 10.20.5.1/32 [110/2] via 10.2.1.1, 02:33:31, GigabitEthernet0/2
O 10.20.6.1/32 [110/2] via 10.2.2.1, 02:33:31, GigabitEthernet0/3
C 10.20.7.1/32 is directly connected, Loopback0
Router7#
「10.10.4.1/32」がしっかり反映されたことがわかります。
パケットキャプチャ
Network文を設定した際のパケットをキャプチャしたところ、「UPDATEメッセージ」にしっかり載っていました。

最後に
今までの記事でBGPの基本を学んできたため、Cisco IOSによる実機確認をまとめてみました。
次回の記事からはBGPについて、もう少し深く触れて理解していきたいと思います。


