目次
概要
フィルタリスト(AS_PATH ACL)によるBGPルートフィルタの設定例です。正規表現でどのようにAS_PATHアトリビュートを表すかが大事なポイントです。
関連記事
フィルタリスト(AS_PATH ACL)の設定と確認コマンドについて、以下の記事で詳しく解説しています。
ネットワーク構成
設定条件
- 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-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 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ルートのみをアドバタイズしていることがわかります。
なお、フィルタリストでフィルタしたあとに、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で生成したルートのみに限定されていることがわかります。
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ルートを受信していません。
設定のまとめ
初期設定の状態から設定した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の仕組み
- 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プレフィックスの交換