BGP の経路は、AS_PATH の内容を条件にして、特定の AS を通ってきた経路だけを許可したり拒否したりできます。これを AS_PATH フィルタと呼び、AS の条件は正規表現で書くのが一般的です。この記事では、Cisco ルータで AS_PATH フィルタを設定し、受信する経路がどう変わるかを確認します。
正規表現については、次の記事を参照してください。
>> 参考:BGPルート操作を効率化!Ciscoでの正規表現の実践例
- 通過する AS を指定して経路をフィルタする(
_2_) - 経路の発生元の AS を指定してフィルタする(
_1$) - 隣接 AS を指定してフィルタする(
^3_)
検証構成
R1〜R4 を直列に接続し、隣どうしで eBGP のピアを張ります。各ルータは自分の Loopback0 を BGP で広告し、R4 で AS_PATH フィルタを設定します。BGP の基本設定は省略します。
AS_PATH フィルタを設定する前の、R4 の BGP テーブルです。3 つの経路を受信しています。
R4
R4# show ip bgp
BGP table version is 5, local router ID is 4.4.4.4
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 192.168.34.3 0 3 2 1 i
*> 2.2.2.2/32 192.168.34.3 0 3 2 i
*> 3.3.3.3/32 192.168.34.3 0 0 3 i
| 経路 | AS_PATH | 読み方 |
|---|---|---|
| 1.1.1.1/32 | 3 2 1 | AS 1 で発生し、AS 2、AS 3 を通って届いた |
| 2.2.2.2/32 | 3 2 | AS 2 で発生し、AS 3 を通って届いた |
| 3.3.3.3/32 | 3 | 隣接する AS 3 で発生した |
AS_PATH は、左が最後に通った AS(R4 から見て隣接する AS)、右端が経路の発生元の AS です。
AS_PATH フィルタの設定方法
AS_PATH フィルタは、次の 3 つの設定を組み合わせて作ります。
- AS_PATH アクセスリスト(
ip as-path access-list)で、AS_PATH の条件を正規表現で書く - ルートマップ(
route-map)のmatch as-pathで、そのアクセスリストを指定する - フィルタしたいネイバーに、ルートマップを適用する(受信する経路なら
in)
ルートマップのどのエントリにも合わなかった経路は、拒否されます。条件に合う経路だけを許可し、それ以外を落とすときは、この記事のように permit のエントリ 1 つだけで書けます。
通過する AS を指定して経路をフィルタ
AS 2 を通過した経路だけを許可する AS_PATH フィルタを設定します。_2_ は、AS_PATH の中のどこかに AS 2 があるという意味です。_ は区切り(空白や AS_PATH の先頭・末尾)にマッチするので、AS 12 や AS 21 にはマッチしません。
R4
R4(config)# ip as-path access-list 1 permit _2_ R4(config)# route-map AS-PATH-FILTER permit 10 R4(config-route-map)# match as-path 1 R4(config-route-map)# exit R4(config)# router bgp 4 R4(config-router)# neighbor 192.168.34.3 route-map AS-PATH-FILTER in
BGP セッションをクリアします。
R4
R4# clear ip bgp * R4# %BGP-5-ADJCHANGE: neighbor 192.168.34.3 Down User reset %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.34.3 IPv4 Unicast topology base removed from session User reset %BGP-5-ADJCHANGE: neighbor 192.168.34.3 Up
R4 の BGP テーブルを確認します。AS 2 を通過した 2 つの経路だけが表示され、AS_PATH が「3」だけの 3.3.3.3/32 は落とされています。
R4
R4# show ip bgp
BGP table version is 5, local router ID is 4.4.4.4
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 192.168.34.3 0 3 2 1 i
*> 2.2.2.2/32 192.168.34.3 0 3 2 I
経路の発生元の AS を指定して経路をフィルタ
AS 1 で発生した経路だけを許可する AS_PATH フィルタを設定します。_1$ は、AS_PATH の最後(右端)が 1 であるという意味です。
R4
R4(config)# ip as-path access-list 2 permit _1$ R4(config)# route-map AS-PATH-FILTER permit 10 R4(config-route-map)# match as-path 2 R4(config-route-map)# exit R4(config)# router bgp 4 R4(config-router)# neighbor 192.168.34.3 route-map AS-PATH-FILTER in
BGP セッションをクリアします。
R4
R4# clear ip bgp * R4# %BGP-5-ADJCHANGE: neighbor 192.168.34.3 Down User reset %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.34.3 IPv4 Unicast topology base removed from session User reset %BGP-5-ADJCHANGE: neighbor 192.168.34.3 Up
R4 の BGP テーブルを確認します。AS 1 で発生した 1.1.1.1/32 だけが表示されています。
R4
R4# show ip bgp
BGP table version is 2, local router ID is 4.4.4.4
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 192.168.34.3 0 3 2 1 I
同じルートマップのエントリに match as-path を続けて入力すると、前の条件が残ったまま条件が追加されることがあります(複数のリストはどれかに合えば一致)。手順を進めるときは、show route-map で今の条件を確かめてください。
隣接 AS を指定して経路をフィルタ
隣接する AS 3 から広告された経路を許可する AS_PATH フィルタを設定します。^3_ は、AS_PATH の最初(左端)が 3 であるという意味です。
R4
R4(config)# ip as-path access-list 3 permit ^3_ R4(config)# route-map AS-PATH-FILTER permit 10 R4(config-route-map)# match as-path 3 R4(config-route-map)# exit R4(config)# router bgp 4 R4(config-router)# neighbor 192.168.34.3 route-map AS-PATH-FILTER in
BGP セッションをクリアします。
R4
R4# clear ip bgp * R4# %BGP-5-ADJCHANGE: neighbor 192.168.34.3 Down User reset %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.34.3 IPv4 Unicast topology base removed from session User reset %BGP-5-ADJCHANGE: neighbor 192.168.34.3 Up
R4 の BGP テーブルを確認します。
R4
R4# show ip bgp
BGP table version is 4, local router ID is 4.4.4.4
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 192.168.34.3 0 3 2 1 i
*> 2.2.2.2/32 192.168.34.3 0 3 2 i
*> 3.3.3.3/32 192.168.34.3 0 0 3 I
この構成では、R4 は AS 3 からしか経路を受信していないので、すべての経路が表示されます。複数の AS と接続していて、特定の隣接 AS の経路だけを受け入れたいときに使う条件です。
この記事では検証のため clear ip bgp *(ハードリセット)で反映しています。運用中のネットワークでは、受信する経路のフィルタなら clear ip bgp * in のように、セッションを切らないソフトリセットで反映できます。詳しくは ルートリフレッシュ機能の記事 を参考にしてください。
まとめ
| 正規表現 | 意味 | R4 で残った経路(AS_PATH) |
|---|---|---|
| _2_ | AS 2 を通過した | 1.1.1.1/32(3 2 1)、2.2.2.2/32(3 2) |
| _1$ | AS 1 で発生した | 1.1.1.1/32(3 2 1) |
| ^3_ | 隣接する AS 3 から広告された | 3 つすべて |
AS_PATH フィルタは、ip as-path access-list で条件を書き、route-map の match as-path で指定して、ネイバーに適用します。
コメント