概要

フィルタリスト(AS_PATH ACL)によるBGPルートフィルタの設定例です。正規表現でどのようにAS_PATHアトリビュートを表すかが大事なポイントです。

ネットワーク構成

図 BGP フィルタリスト ネットワーク構成
図 BGP フィルタリスト ネットワーク構成

設定条件

  • R1は自AS内のBGPルートのみをR2/R3へアドバタイズします。
  • R1は、R2からAS2およびAS20で生成されたBGPルートのみを受信します。
  • R1は、R3からAS2およびAS20で生成されたBGPルートを受信してはいけません。

初期設定

R1/R2/R3のBGPに関する設定は以下の通りです。

R1 初期設定(Click)

hostname R1
!
interface Loopback0
 ip address 192.168.2.1 255.255.255.0 secondary
 ip address 192.168.3.1 255.255.255.0 secondary
 ip address 192.168.1.1 255.255.255.0
!
interface Ethernet0/0
 ip address 10.0.0.1 255.255.255.252
!
interface Ethernet0/1
 ip address 10.0.0.5 255.255.255.252
!
router bgp 1
 bgp router-id 1.1.1.1
 bgp log-neighbor-changes
 network 192.168.1.0
 network 192.168.2.0
 network 192.168.3.0
 neighbor 10.0.0.2 remote-as 2
 neighbor 10.0.0.6 remote-as 3

R2 初期設定(Click)

hostname R2
!
interface Loopback0
 ip address 10.2.20.2 255.255.255.0 secondary
 ip address 10.2.2.2 255.255.255.0
!
interface Ethernet0/0
 ip address 10.0.0.2 255.255.255.252
!
interface Ethernet0/1
 ip address 10.0.0.9 255.255.255.252
!
router bgp 2
 bgp router-id 2.2.2.2
 bgp log-neighbor-changes
 network 10.2.2.0 mask 255.255.255.0
 network 10.2.20.0 mask 255.255.255.0
 neighbor 10.0.0.1 remote-as 1
 neighbor 10.0.0.1 route-map AS_PATH out
 neighbor 10.0.0.10 remote-as 3
 neighbor 10.0.0.10 route-map AS_PATH out
!
route-map AS_PATH permit 10
 match ip address 1
 set as-path prepend 20
!
route-map AS_PATH permit 100
!
access-list 1 permit 10.2.20.0

R3 初期設定(Click)

hostname R3
!
interface Loopback0
 ip address 10.3.30.3 255.255.255.0 secondary
 ip address 10.3.3.3 255.255.255.0
!
interface Ethernet0/0
 ip address 10.0.0.6 255.255.255.252
!
interface Ethernet0/1
 ip address 10.0.0.10 255.255.255.252
!
router bgp 3
 bgp router-id 3.3.3.3
 bgp log-neighbor-changes
 network 10.3.3.0 mask 255.255.255.0
 network 10.3.30.0 mask 255.255.255.0
 neighbor 10.0.0.5 remote-as 1
 neighbor 10.0.0.5 route-map AS_PATH out
 neighbor 10.0.0.9 remote-as 2
 neighbor 10.0.0.9 route-map AS_PATH out
!
route-map AS_PATH permit 10
 match ip address 1
 set as-path prepend 30
!
route-map AS_PATH permit 100
!
access-list 1 permit 10.3.30.0

設定と確認

Step1: フィルタリスト適用前のBGPルートの送受信の確認

R1でフィルタリストを適用する前のBGPルート送受信を確認します。

show ip bgp neighbor 10.0.0.2 advertised-routesR2へアドバタイズするBGPルートを表示します。
show ip bgp neighbor 10.0.0.6 advertised-routesR3へアドバタイズするBGPルートを表示します。
show ip bgp neighbor 10.0.0.2 routesR2から受信するBGPルートを表示します。
show ip bgp neighbor 10.0.0.6 routesR3から受信するBGPルートを表示します。

まずは、R1からR2/R3へアドバタイズしているBGPルートを確認します。

R1 R2/R3へアドバタイズするBGPルート フィルタ適用前

R1#show ip bgp neighbors 10.0.0.2 advertised-routes
BGP table version is 10, 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
 *>  10.2.2.0/24      10.0.0.2                 0             0 2 i
 *>  10.2.20.0/24     10.0.0.2                 0             0 2 20 i
 *>  10.3.3.0/24      10.0.0.6                 0             0 3 i
 *>  10.3.30.0/24     10.0.0.6                 0             0 3 30 i
 *>  192.168.1.0      0.0.0.0                  0         32768 i
 *>  192.168.2.0      0.0.0.0                  0         32768 i
 *>  192.168.3.0      0.0.0.0                  0         32768 i

Total number of prefixes 7
R1#show ip bgp neighbors 10.0.0.6 advertised-routes
BGP table version is 10, 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
 *>  10.2.2.0/24      10.0.0.2                 0             0 2 i
 *>  10.2.20.0/24     10.0.0.2                 0             0 2 20 i
 *>  10.3.3.0/24      10.0.0.6                 0             0 3 i
 *>  10.3.30.0/24     10.0.0.6                 0             0 3 30 i
 *>  192.168.1.0      0.0.0.0                  0         32768 i
 *>  192.168.2.0      0.0.0.0                  0         32768 i
 *>  192.168.3.0      0.0.0.0                  0         32768 i

Total number of prefixes 7

R1からR2/R3には自ASのBGPルート以外もアドバタイズしていることがわかります。

なお、R1はEBGPネイバーのR2とR3を自動的に同じUpdate-Groupにします。そのため、R2/R3へアドバタイズするBGPルートはまったく同じです。結果として、EBGPネイバーへは受信したBGPルートを送り返しているのですが、ネイバー側でループとみなして破棄されます。

そして、R2/R3から受信するBGPルートは以下のようになっています。

R1 R2/R3から受信するBGPルート フィルタ適用前

R1#show ip bgp neighbors 10.0.0.2 routes
BGP table version is 10, 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
 *>  10.2.2.0/24      10.0.0.2                 0             0 2 i
 *>  10.2.20.0/24     10.0.0.2                 0             0 2 20 i
 *   10.3.3.0/24      10.0.0.2                               0 2 3 i
 *   10.3.30.0/24     10.0.0.2                               0 2 3 30 i

Total number of prefixes 4
R1#show ip bgp neighbors 10.0.0.6 routes
BGP table version is 10, 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
 *   10.2.2.0/24      10.0.0.6                               0 3 2 i
 *   10.2.20.0/24     10.0.0.6                               0 3 2 20 i
 *>  10.3.3.0/24      10.0.0.6                 0             0 3 i
 *>  10.3.30.0/24     10.0.0.6                 0             0 3 30 i

Total number of prefixes 4

R1はR2からAS2/AS20で生成されたBGPルートだけでなく、AS3/AS30で生成されたBGPルートも受信しています。R3から受信するBGPルートも同様です。

Step2: R1 フィルタリストoutの設定

R1からR2/R3へアドバタイズするBGPルートは自ASのルートのみに限定するためにフィルタリストを設定します。

R1 フィルタリストoutの設定

ip as-path access-list 1 permit ^$
!
router bgp 1
 neighbor 10.0.0.2 filter-list 1 out 
 neighbor 10.0.0.6 filter-list 1 out

自AS内のBGPルートのみをアドバタイズするという条件を満足するためにディストリビュートリストまたはプレフィクスリストでフィルタすることも可能です。しかし、自ASのBGPルートだけをアドバタイズするには、フィルタリストを利用するのが一番簡単です。

ディストリビュートリストやプレフィクスリストを利用するには、BGPルートのネットワークアドレスによっては何行ものACLまたはプレフィクスリストを設定しなければいけません。

一方、自ASで生成したBGPルートのAS_PATHはカラなので、正規表現「^$」で特定できます。そのため、自AS内のBGPルートがいくつあっても、どのようなネットワークアドレスであっても、たった1行のAS_PATH ACL 1によって自ASで生成したBGPルートを特定してpermitできます。

そして、AS_PATH ACL 1をネイバー10.0.0.2(R2)と10.0.0.6(R3)のoutで適用すればOKです。

フィルタリストを適用したあとは、BGPルートを再送する必要があります。

R1 BGPルートの再送

R1#clear ip bgp 10.0.0.2 out
R1#clear ip bgp 10.0.0.6 out

Step3: R1 フィルタリストoutの確認

R1からR2/R3へアドバタイズするBGPルートを確認します。

  • show ip bgp neighbor 10.0.0.2 advertised-routes
  • show ip bgp neighbor 10.0.0.6 advertised-routes

R1 フィルタリストoutの確認

R1#show ip bgp neighbors 10.0.0.2 advertised-routes
BGP table version is 10, 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
 *>  192.168.1.0      0.0.0.0                  0         32768 i
 *>  192.168.2.0      0.0.0.0                  0         32768 i
 *>  192.168.3.0      0.0.0.0                  0         32768 i

Total number of prefixes 3
R1#show ip bgp neighbors 10.0.0.6 advertised-routes
BGP table version is 10, 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
 *>  192.168.1.0      0.0.0.0                  0         32768 i
 *>  192.168.2.0      0.0.0.0                  0         32768 i
 *>  192.168.3.0      0.0.0.0                  0         32768 i

Total number of prefixes 3

R1からR2/R3へ自AS内のBGPルートのみをアドバタイズしていることがわかります。

図 フィルタリスト out
図 フィルタリスト out

なお、フィルタリストでフィルタしたあとに、AS_PATHに自ASをプリペンドします。そのため、R2/R3で受信するBGPルートのAS_PATHは「1」です。

Step4: R1 フィルタリストinの設定 From R2

R1でR2から受信するBGPルートをフィルタリストでフィルタします。

R1 フィルタリストinの設定 From R2

ip as-path access-list 2 permit _2$|_20$
!
router bgp 1
 neighbor 10.0.0.2 filter-list 2 in

R1では、R2から受信するBGPルートはAS2またはAS20で生成したルートのみに限定します。つまり、AS_PATHの最後が2または20です。正規表現では「_2$|_20$」です。

AS_PATH ACL 2は、この正規表現によってAS2またはAS20で生成したBGPルートを特定してpermitします。そして、AS_PATH ACL 2をネイバー10.0.0.2(R2)にinで適用します。

フィルタリストを適用したあとは、R2からBGPルートを再度受信します。

R1 BGPルートの再受信 From R2

R1#clear ip bgp 10.0.0.2 in

Step5: R1 フィルタリストinの確認 From R2

R1でR2から受信するBGPルートを確認します。show ip bgp neighbor 10.0.0.2 routesコマンドを利用します。

R1 フィルタリストinの確認 From R2

R1#show ip bgp neighbors 10.0.0.2 routes
BGP table version is 10, 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
 *>  10.2.2.0/24      10.0.0.2                 0             0 2 i
 *>  10.2.20.0/24     10.0.0.2                 0             0 2 20 i

Total number of prefixes 2

R2から受信するBGPルートはAS2またはAS20で生成したルートのみに限定されていることがわかります。

図 フィルタリスト in From R2
図 フィルタリスト in From R2

Step6: R1 フィルタリストinの設定 From R3

R1でR3から受信するBGPルートをフィルタリストでフィルタします。

R1 フィルタリストinの設定 From R3

ip as-path access-list 3 deny _2$|_20$
ip as-path access-list 3 permit .*
!
router bgp 1
 neighbor 10.0.0.6 filter-list 3 in

R3からはAS2およびAS20で生成されたBGPルートを受信しません。AS_PATH ACL 3でAS_PATHの最後が2または20であるBGPルートをdenyします。denyの条件しかないと暗黙のdenyですべてdenyされてしまいます。暗黙のdenyを回避するためにAS_PATH ACL 3にはpermit .*の条件が必要です。「.*」はあらゆる文字列を表す正規表現なので、すべてのAS_PATHアトリビュートに一致します。

そして、AS_PATH ACL 3をネイバー10.0.0.6(R3)にinで適用します。フィルタリストを適用したあとは、R3からBGPルートを再度受信します。

R1 BGPルートの再受信 From R3

R1#clear ip bgp 10.0.0.6 in

Step7: R1 フィルタリストinの確認 From R3

R1でR3から受信するBGPルートを確認します。show ip bgp neighbor 10.0.0.6 routesコマンドを利用します。

R1 フィルタリストinの確認 From R3

R1#show ip bgp neighbors 10.0.0.6 routes
BGP table version is 10, 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
 *>  10.3.3.0/24      10.0.0.6                 0             0 3 i
 *>  10.3.30.0/24     10.0.0.6                 0             0 3 30 i

Total number of prefixes 2

R1は、R3からはAS2またはAS20で生成したBGPルートを受信していません。

図 フィルタリスト in From R3
図 フィルタリスト in From R3

設定のまとめ

初期設定の状態から設定したR1のフィルタリストに関するコマンドは次の通りです。

R1 フィルタリスト(AS_PATH ACL) 設定コマンドのまとめ

router bgp 1
 neighbor 10.0.0.2 filter-list 2 in
 neighbor 10.0.0.2 filter-list 1 out
 neighbor 10.0.0.6 filter-list 3 in
 neighbor 10.0.0.6 filter-list 1 out
!
ip as-path access-list 1 permit ^$
ip as-path access-list 2 permit _2$|_20$
ip as-path access-list 3 deny _2$|_20$
ip as-path access-list 3 permit .*

BGPの仕組み