※本記事は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 のPath65535が記載されているのがわかります

では次に、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ルータ側で設定する内容と覚えておくと、理解しやすいかと思います。

参考

https://www.cisco.com/c/ja_jp/support/docs/ip/border-gateway-protocol-bgp/112236-allowas-in-bgp-config-example.html