概要

ルートマップによるBGPルートフィルタの設定例です。ルートマップでは、match条件で標準/拡張ACL、プレフィクスリスト、AS_PATH ACLを参照して柔軟にフィルタするBGPルートを特定できます。

ネットワーク構成

図 BGPルートフィルタ ルートマップ(route-map)設定例
図 BGPルートフィルタ ルートマップ(route-map)設定例

設定条件

  • R1は自AS内のネットワークアドレス3オクテット目が偶数の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.4.1 255.255.255.0 secondary
 ip address 192.168.5.1 255.255.255.0 secondary
 ip address 192.168.6.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
 network 192.168.4.0
 network 192.168.5.0
 network 192.168.6.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 ルートマップ適用前のBGPルートの送信の確認

R1#show ip bgp neighbors 10.0.0.2 advertised-routes
BGP table version is 11, 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
 *>  192.168.4.0      0.0.0.0                  0         32768 i
 *>  192.168.5.0      0.0.0.0                  0         32768 i
 *>  192.168.6.0      0.0.0.0                  0         32768 i

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

Total number of prefixes 10

R1からEBGPネイバーのR2/R3へ自AS内の192.168.1.0/24~192.168.6.0/24だけでなく、自AS以外のBGPルートもアドバタイズしています。

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

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

R1 ルートマップ適用前の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ルートはネットワークアドレス3オクテット目が偶数の自ASのルートのみに限定するためにルートマップのフィルタを設定します。

R1 ルートマップoutの設定

ip as-path access-list 1 permit ^$
access-list 1 permit 0.0.0.0 255.255.254.255
!
route-map TO_EBGP permit 10
 match ip address 1
 match as-path 1
!
router bgp 1
 neighbor 10.0.0.2 route-map TO_EBGP out
 neighbor 10.0.0.6 route-map TO_EBGP out

自AS内の3オクテット目が偶数のBGPルートのみをアドバタイズするという条件を満足するために、ルートマップで標準ACLとAS_PATH ACLをANDで参照します。

偶数とは最下位ビットが0です。そのため、8ビットの10進数で偶数を表すアドレスとワイルドカードマスクは以下のようになります。

図 偶数を表すアドレスとワイルドカードマスク
図 偶数を表すアドレスとワイルドカードマスク

3オクテット目のアドレスとワイルドカードマスクの組み合わせを「0」と「254」にすればOKです。3オクテット目が偶数のネットワークアドレスを特定するために標準ACL 1を設定しています。

標準ACL ネットワークアドレス3オクテット目「偶数」

access-list 1 permit 0.0.0.0 255.255.254.255

また、自AS内のBGPルートはAS_PATHアトリビュートがカラなので、AS_PATH ACL 1で簡単に特定できます。

AS_PATH ACL 自ASのBGPルート

ip as-path access-list 1 permit ^$

そして、ルートマップ「TO_EBGP」で標準ACL1とAS_PATH ACL 1を参照します。

ルートマップ 標準ACL/AS_PATH ACLを参照

route-map TO_EBGP permit 10
 match ip address 1
 match as-path 1

match条件を複数設定しているとANDで評価します。つまり、「ネットワークアドレス3バイト目が偶数(標準ACL 1)」かつ「自ASのBGPルート(AS_PATH ACL1)」がmatch条件を満足するルート情報です。該当したBGPルートをアドバタイズしたいのでpermitの動作です。

作成したルートマップ「TO_EBGP」をネイバー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 11, 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.2.0      0.0.0.0                  0         32768 i
 *>  192.168.4.0      0.0.0.0                  0         32768 i
 *>  192.168.6.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 11, 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.2.0      0.0.0.0                  0         32768 i
 *>  192.168.4.0      0.0.0.0                  0         32768 i
 *>  192.168.6.0      0.0.0.0                  0         32768 i

Total number of prefixes 3

条件通りに、R1からR2/R3へネットワークアドレス3オクテット目が偶数である自AS内のBGPルートのみをアドバタイズしていることがわかります。

図  R1 ルートマップoutの確認
図 R1 ルートマップoutの確認

Step4: R1 ルートマップinの設定 From R2

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

R1 ルートマップinの設定 From R2

ip as-path access-list 2 permit _2$|_20$
!
route-map FROM_R2 permit 10
 match as-path 2
!
router bgp 1
 neighbor 10.0.0.2 route-map FROM_R2 in

AS_PATH ACL 2では、AS_PATHアトリビュートの最後が「2」または「20」になる条件を決めています。すなわち、AS2またはAS20で生成されたBGPルートです。そして、ルートマップ「FROM_R2」でAS_PATH ACL 2を参照することで、AS2またはAS20で生成されたBGPルートを特定します。該当したBGPルートを受信したいのでルートマップの動作はpermitです。

そして、ルートマップ「FROM_R2」をネイバー10.0.0.2(R2)にinで適用します。ルートマップを適用したあとは、R2からBGPルートを再度受信します。

AS_PATH ACL 2を直接ネイバーに適用したほうが話は早いのですが、ルートマップを利用する練習です。

R1 BGPルートの再受信

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で生成したルートのみに限定されていることがわかります。

図  R1 ルートマップinの確認 From R2
図 R1 ルートマップinの確認 From R2

Step6: R1 ルートマップinの設定 From R3

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

R1 ルートマップinの設定 From R3

ip as-path access-list 2 permit _2$|_20$
!
route-map FROM_R3 deny 10
 match as-path 2
!
route-map FROM_R3 permit 999
!
router bgp 1
 neighbor 10.0.0.6 route-map FROM_R3 in

AS_PATH ACL 2は設定済みのものを再度載せています。

R3からはAS2およびAS20で生成されたBGPルートを受信しません。Step4のAS2およびAS20で生成されたBGPルートを特定するAS_PATH ACL 2を使いまわします。

ルートマップ「FROM_R3」を作成して、シーケンス10でAS_PATH ACL 2を参照します。これにより、AS2およびAS20で生成されたBGPルートがルートマップの処理対象です。ルートを受信したくないので、ルートマップの動作をdenyとすればOKです。

denyのシーケンスしかないと、暗黙のdenyで結局はすべてのBGPルートがdenyされてしまいます。暗黙のdenyを回避するためにシーケンス999の設定をしています。シーケンス番号は適当です。シーケンス999はmatch条件を省略しているのですべてです。シーケンス10に一致しなかったBGPルートはシーケンス999でpermitされます。

そして、ルートマップ「FROM_R3」をネイバー10.0.0.6(R3)にinで適用します。ルートマップを適用したあとは、R3からBGPルートを再度受信します。

R1 BGPルートの再受信

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

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

図  R1 ルートマップinの確認 From R3
図 R1 ルートマップinの確認 From R3

設定のまとめ

初期設定の状態から設定したR1のルートマップに関するコマンドは次の通りです。

R1 ルートマップ(route-map)設定コマンドのまとめ

router bgp 1
 neighbor 10.0.0.2 route-map FROM_R2 in
 neighbor 10.0.0.2 route-map TO_EBGP out
 neighbor 10.0.0.6 route-map FROM_R3 in
 neighbor 10.0.0.6 route-map TO_EBGP out
!
ip as-path access-list 1 permit ^$
ip as-path access-list 2 permit _2$|_20$
!
route-map FROM_R3 deny 10
 match as-path 2
!
route-map FROM_R3 permit 999
!
route-map FROM_R2 permit 10
 match as-path 2
!
route-map TO_EBGP permit 10
 match ip address 1
 match as-path 1
!
access-list 1 permit 0.0.0.0 255.255.254.255

BGPの仕組み