【BGP】AS-PATHフィルタ 動作確認 Cisco

BGP の経路は、AS_PATH の内容を条件にして、特定の AS を通ってきた経路だけを許可したり拒否したりできます。これを AS_PATH フィルタと呼び、AS の条件は正規表現で書くのが一般的です。この記事では、Cisco ルータで AS_PATH フィルタを設定し、受信する経路がどう変わるかを確認します。

正規表現については、次の記事を参照してください。

>> 参考:BGPルート操作を効率化!Ciscoでの正規表現の実践例

この記事でわかること
  1. 通過する AS を指定して経路をフィルタする(_2_)
  2. 経路の発生元の AS を指定してフィルタする(_1$)
  3. 隣接 AS を指定してフィルタする(^3_)

検証構成

R1〜R4 を直列に接続し、隣どうしで eBGP のピアを張ります。各ルータは自分の Loopback0 を BGP で広告し、R4 で AS_PATH フィルタを設定します。BGP の基本設定は省略します。

Lo0 1.1.1.1/32 AS 1 R1 .1 Lo0 2.2.2.2/32 AS 2 R2 .2 .2 Lo0 3.3.3.3/32 AS 3 R3 .3 .3 Lo0 4.4.4.4/32 AS 4 R4 .4 192.168.12.0/24 eBGP 192.168.23.0/24 eBGP 192.168.34.0/24 eBGP
図1 検証構成

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/323 2 1AS 1 で発生し、AS 2、AS 3 を通って届いた
2.2.2.2/323 2AS 2 で発生し、AS 3 を通って届いた
3.3.3.3/323隣接する AS 3 で発生した

AS_PATH は、左が最後に通った AS(R4 から見て隣接する AS)、右端が経路の発生元の AS です。

AS_PATH フィルタの設定方法

AS_PATH フィルタは、次の 3 つの設定を組み合わせて作ります。

  1. AS_PATH アクセスリスト(ip as-path access-list)で、AS_PATH の条件を正規表現で書く
  2. ルートマップ(route-map)の match as-path で、そのアクセスリストを指定する
  3. フィルタしたいネイバーに、ルートマップを適用する(受信する経路なら in)
AS_PATH アクセスリストip as-path access-list 1permit _2_ルートマップroute-map AS-PATH-FILTERmatch as-path 1ネイバーに適用neighbor 192.168.34.3route-map AS-PATH-FILTER inAS_PATH の条件(正規表現)条件に合う経路を許可R3 から受信する経路に適用
図2 AS_PATH フィルタの設定の組み合わせ
注意

ルートマップのどのエントリにも合わなかった経路は、拒否されます。条件に合う経路だけを許可し、それ以外を落とすときは、この記事のように 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 で指定して、ネイバーに適用します。

コメント