目次
概要
ルートマップによるBGPルートフィルタの設定例です。ルートマップでは、match条件で標準/拡張ACL、プレフィクスリスト、AS_PATH ACLを参照して柔軟にフィルタするBGPルートを特定できます。
関連記事
ネットワーク構成

設定条件
- 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-routes | R2へアドバタイズするBGPルートを表示します。 |
show ip bgp neighbor 10.0.0.6 advertised-routes | R3へアドバタイズするBGPルートを表示します。 |
show ip bgp neighbor 10.0.0.2 routes | R2から受信するBGPルートを表示します。 |
show ip bgp neighbor 10.0.0.6 routes | R3から受信する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ルートのみをアドバタイズしていることがわかります。

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

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のルートマップに関するコマンドは次の通りです。
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の仕組み
- BGPの概要 ~AS間でルート情報を交換~
- BGPの動作
- BGPの基本設定と確認コマンド
- BGPピアグループ(Peer Group) ~ネイバーの設定をまとめよう~
- BGPネイバーの状態
- BGPコンフェデレーションの設定
- BGPコンフェデレーションの設定例
- BGPネイバー認証
- BGP Well Known Mandatory アトリビュート -ORIGIN/AS_PATH/NEXT_HOP-
- 図解!BGPベストパス選択アルゴリズム
- BGP 基本的な設定についての演習[Cisco]
- BGPの基本的な設定についての演習 ~トラブルシュート~
- BGP KEEPALIVEタイマ/ホールドタイムの設定
- BGPルート 最小送信間隔の設定
- BGPルートダンプニング
- マルチホーム – インターネット接続の冗長化 –
- マルチホームAS BGPルートフィルタのポイント
- マルチホームAS ベストパス選択のポイント
- マルチホームAS IGPとBGPの連携のポイント
- マルチホームAS BGPの設定例
- IP-VPNでのBGPの利用 設定例
- BGPルートフィルタの種類
- BGPルートフィルタ -ディストリビュートリスト-
- BGPルートフィルタ -ディストリビュートリスト設定例-
- BGPルートフィルタ -プレフィクスリスト-
- BGPルートフィルタ -プレフィクスリスト設定例-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)設定例-
- BGPルートフィルタ -ルートマップ(route-map)-
- BGPルートフィルタ -ルートマップ(route-map)設定例-
- BGP neighbor allowas-inコマンド
- BGP neighbor as-overrideコマンド
- BGPルート RIB Failure
- BGPルート アドミニストレイティブディスタンスの制御
- BGPルートの負荷分散
- BGPルート 条件付き生成
- BGPルート 条件付きアドバタイズ
- BGP ルート集約 自動集約
- BGPルート集約 networkコマンドによる集約
- BGPルート集約 networkコマンドによる集約 設定例
- BGP ルート集約 aggregate-addressコマンドによる集約
- aggregate-addressコマンドのオプション summary-only
- aggregate-addressコマンドのオプション attribute-map
- aggregate-addressコマンドのオプション as-set
- aggregate-addressコマンドのオプション advertise-map
- aggregate-addressコマンド as-set/attribute-map/advertise-map 設定例
- BGP選択型集約の概要
- BGP選択型集約 suppress-map
- BGP選択型集約 unsuppress-map
- BGP 選択型集約 suppress-map/unsuppress-map 設定例
- BGP local-as ~ネイバーに他のASのように見せる~
- BGP neighbor remove-private-ASコマンド
- bgp fast external-fallover
- BGP プレフィクス数の制限
- BGP COMMUNITYアトリビュートの使い方
- BGP Well-known COMMUNITYのルートフィルタ設定例
- BGP プライベートCOMMUNITYによるルート制御の設定例
- [演習]BGP応用 Part1:BGP基本設定
- [演習]BGP応用 Part2:ルート集約
- [演習]BGP応用 Part3:ポリシーベースルーティング
- [演習]BGP応用 Part4:トラブルシューティング
- BGP 設定ミスの切り分けと修正 Part1
- BGP 設定ミスの切り分けと修正 Part2
- BGP 設定ミスの切り分けと修正 Part3
- BGP 設定ミスの切り分けと修正 Part4
- BGP 設定ミスの切り分けと修正 Part5
- BGP 設定ミスの切り分けと修正 Part6
- BGP 設定ミスの切り分けと修正 Part7
- IPv6 BGPの設定例 Part1
- IPv6 BGPの設定例 Part2
- 2021年10月4日 Facebookに何が起こったか?
- IPv4 BGPネイバーでのIPv6プレフィックスの交換