※本記事は2023年8月時点の内容になります。
はじめに
こんにちは。今回はGNS3を使ってBGPのallowas-in機能を検証してみたいと思います。
※このブログは中の人の個人的な見解に基づいて運営しております
投稿内容はあくまで参考情報として認識おきください
この記事を読むと、以下のことが分かるようになります。
- BGPのallowas-in機能の設定方法
- AS_PATHAttributeの概要
基本情報
検証概要
・同一ASに所属するルータを2台用意し、Loopbackインターフェースに設定しているセグメントを互いに学習する
※以下の検証構成図で、R1であればR3の3.3.3.3/31を。R3であればR1の1.1.1.1/32を学習させる
検証構成図
コンフィグレーション
各機器の主な設定は以下です。
■R1
interface Loopback0
ip address 1.1.1.1 255.255.255.255
!
interface FastEthernet0/0
ip address 10.0.0.1 255.255.255.0
duplex auto
speed auto
!
router bgp 65535
bgp log-neighbor-changes
network 1.1.1.1 mask 255.255.255.255
neighbor 10.0.0.254 remote-as 10
■R3
interface Loopback0
ip address 3.3.3.3 255.255.255.255
!
interface FastEthernet0/0
ip address 10.0.1.1 255.255.255.0
duplex auto
speed auto
!
router bgp 65535
bgp log-neighbor-changes
network 3.3.3.3 mask 255.255.255.255
neighbor 10.0.1.254 remote-as 10
■ISP-NW
interface Loopback0
ip address 2.2.2.2 255.255.255.255
!
interface FastEthernet0/0
ip address 10.0.1.254 255.255.255.0
duplex auto
speed auto
!
interface FastEthernet0/1
ip address 10.0.0.254 255.255.255.0
duplex auto
speed auto
!
router bgp 10
bgp log-neighbor-changes
neighbor 10.0.0.1 remote-as 65535
neighbor 10.0.1.1 remote-as 65535
※ISP-NWに設定されているLoopbackの設定は今回の検証では使用しません
ログ
各機器のコマンドの出力結果は以下です
■R1
R1#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
+ - replicated route, % - next hop override
Gateway of last resort is not set
1.0.0.0/32 is subnetted, 1 subnets
C 1.1.1.1 is directly connected, Loopback1
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.0.0.0/24 is directly connected, FastEthernet0/0
L 10.0.0.1/32 is directly connected, FastEthernet0/0
R1#show ip bgp
BGP table version is 6, local router ID is 1.1.1.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,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.1/32 0.0.0.0 0 32768 i
R1#show ip bgp neighbors
BGP neighbor is 10.0.0.254, remote AS 10, external link
BGP version 4, remote router ID 2.2.2.2
BGP state = Established, up for 00:27:43
R1は対向のISP-NWとネイバーは確立できておりますが、eBGPから経路情報は受け取れていないことが確認できます。
■R3
R3#
R3#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
+ - replicated route, % - next hop override
Gateway of last resort is not set
3.0.0.0/32 is subnetted, 1 subnets
C 3.3.3.3 is directly connected, Loopback0
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.0.1.0/24 is directly connected, FastEthernet0/0
L 10.0.1.1/32 is directly connected, FastEthernet0/0
R3#show 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
*> 3.3.3.3/32 0.0.0.0 0 32768 i
R3#show ip bgp neighbors
BGP neighbor is 10.0.1.254, remote AS 10, external link
BGP version 4, remote router ID 2.2.2.2
BGP state = Established, up for 00:27:11
R1と同じくR3も、対向のISP-NWとネイバーは確立できておりますが、eBGPから経路情報は受け取れていないことが確認できます。
では、ISP-NWはどうでしょうか
■ISP-NW
ISP-NW#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
+ - replicated route, % - next hop override
Gateway of last resort is not set
1.0.0.0/32 is subnetted, 1 subnets
B 1.1.1.1 [20/0] via 10.0.0.1, 00:31:27
2.0.0.0/32 is subnetted, 1 subnets
C 2.2.2.2 is directly connected, Loopback0
3.0.0.0/32 is subnetted, 1 subnets
B 3.3.3.3 [20/0] via 10.0.1.1, 00:29:01
10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
C 10.0.0.0/24 is directly connected, FastEthernet0/1
L 10.0.0.254/32 is directly connected, FastEthernet0/1
C 10.0.1.0/24 is directly connected, FastEthernet0/0
L 10.0.1.254/32 is directly connected, FastEthernet0/0
ISP-NW#show ip bgp
BGP table version is 5, 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
*> 1.1.1.1/32 10.0.0.1 0 0 65535 i
*> 3.3.3.3/32 10.0.1.1 0 0 65535 i
ISP-NW#show ip bgp neighbors
BGP neighbor is 10.0.0.1, remote AS 65535, external link
BGP version 4, remote router ID 1.1.1.1
BGP state = Established, up for 00:31:28
~~~~
BGP neighbor is 10.0.1.1, remote AS 65535, external link
BGP version 4, remote router ID 3.3.3.3
BGP state = Established, up for 00:29:01
ISP-NWはR1とR3とネイバーを確立しており、R1、R3に設定されているLoopbackに設定されているIPアドレスを学習できています。
ログからわかること
現状、R1とR3でeBGPから経路を学習できないのは、BGPのAS_Path Attributeのループ防止機能が働いているためです。
AS_PATHAttributeの概要はこちら
※詳細について今後まとめる予定です
- eBGPで経路広報する際に、自身のAS番号を付与する
- 他のeBGPルータから学習してきた経路を、また別のeBGPルータに広報する場合、自身のAS番号を先頭につけて広報する
- 学習した経路情報に自身のAS番号が含まれていた場合、その経路情報を破棄する
- AS_PATHAttributeが最も短い経路が、ベストパスに選択される※ルーティングテーブルにエントリーされる
上記のポイントを踏まえ、
現状起こっている事象を下図にまとめました。
- R3はISP-NWから1.1.1.1/32の経路情報をeBGPで学習する際に、R1で付与したAS番号が自身のASと同じAS番号の為、BGP経路を受信しない
では、R3で設定されている自身のAS番号=AS65535を無視することができれば、R3は1.1.1.1/32を学習することができるのでしょうか。
allowas-inコマンドを試してみる
R3に以下のコマンドを設定してみます。
router bgp 65535
neighbor 10.0.1.254 allowas-in
次に、show ip routeとshow ip bgpの出力結果を見てみます
R3#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
+ - replicated route, % - next hop override
Gateway of last resort is not set
1.0.0.0/32 is subnetted, 1 subnets
B 1.1.1.1 [20/0] via 10.0.1.254, 00:02:13
3.0.0.0/32 is subnetted, 1 subnets
C 3.3.3.3 is directly connected, Loopback0
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.0.1.0/24 is directly connected, FastEthernet0/0
L 10.0.1.1/32 is directly connected, FastEthernet0/0
R3#show ip bgp
BGP table version is 3, 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
*> 1.1.1.1/32 10.0.1.254 0 10 65535 i
* 3.3.3.3/32 10.0.1.254 0 10 65535 i
*> 0.0.0.0 0 32768 i
無事1.1.1.1/32のセグメントを学習することができました。
allowas-inコマンドによって、自身のAS番号が含まれている経路情報が受信できるようになりました。
show ip bgp のPathに65535が記載されているのがわかります
では次に、R1でも同じくallowas-inコマンドを設定し
show ip route show ip bgpを出力してみます
R1#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
+ - replicated route, % - next hop override
Gateway of last resort is not set
1.0.0.0/32 is subnetted, 1 subnets
C 1.1.1.1 is directly connected, Loopback1
3.0.0.0/32 is subnetted, 1 subnets
B 3.3.3.3 [20/0] via 10.0.0.254, 00:00:11
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.0.0.0/24 is directly connected, FastEthernet0/0
L 10.0.0.1/32 is directly connected, FastEthernet0/0
R1#show ip bgp
BGP table version is 7, local router ID is 1.1.1.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,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* 1.1.1.1/32 10.0.0.254 0 10 65535 i
*> 0.0.0.0 0 32768 i
*> 3.3.3.3/32 10.0.0.254 0 10 65535 i
こちらもR3が持つセグメント3.3.3.3/32を受信することができるようになりました。
ICMPもOK!
R1#ping 3.3.3.3 source loopback 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 92/108/124 ms
R3#ping 1.1.1.1 source loopback 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 100/120/128 ms
R3#
これで、R1とR3のLoopbackセグメントで双方向の通信が可能になりました!
まとめ
allowas-in機能についてまとめました。
- eBGPで経路広報する際は、自身のAS番号を付与して広報する
- AS_PATHAttributeにより、eBGPで学習してきた経路情報に自身番号が含まれていた場合は、経路を学習しない
- eBGPで学習してきた経路情報に、自身のAS番号が含まれていても学習できるようにするコマンドがallowas-in機能
ちなみにas-overrideコマンドによって、AS_PATHに含まれているAS番号を自身のAS番号に書き換えることで、
同じようなことを実現することが可能です。
allowas-inはCEルータ側で、as-overrideはPEルータ側で設定する内容と覚えておくと、理解しやすいかと思います。