filter-list と as-path access-list の使い方
ip as-path access-list を使うことで、『どういう順番でどの AS を通過したか』という情報を表現できます。
そして neighbor X.X.X.X filter-list [as-path access-list #] 設定により、その as-path access-list での表現に合致するルートのみを広報することができます。
例えば AS=10 で生成されたルート [ 1.1.1.0/24 ] が AS=20、AS=30 という順番で広報されてきたとき、AS=50 では以下の設定をすることでそのルートだけを受信することができます。
RT5(config)# ip as-path access-list 1 permit 30_20_10 RT5(config)# router bgp 50 RT5(config-router)# neighbor 10.1.35.3 filter-list 1 in
_ (アンダースコア) は AS 番号の区切りとして考えることができます。
正規表現とは
正規表現とはネットワーク用語ではなく、Windows の findstr コマンドや Linux の grep コマンドなど、色々なシステムやコマンドで幅広く使われています。
正規表現 (Regular Expression) は文字列のパターンマッチングで使われるもので、例えば 0 から 19 までの AS を表現する場合は以下のようになります。
? は『直前の文字がを 0 個または 1 個』を表します。
[ - ] は範囲を示します。一般的には [a-z] とすれば英小文字の a から z までの任意の 1 文字を表しますが、AS を表現する際には使われません。[0-9] とすれば 0 から 9 の任意の数字を表します。
また、$ は直前の文字が文字列の最後尾であることを示します。
なので先程の例で、
(config)# ip as-path access-list 2 permit _1?[0-9]$ (config)# router bgp 50 (config-router)# neighbor 10.1.35.3 filter-list 2 in
とすれば AS 番号が 0 から 19 で終わる (つまり 0 から 19 の中で生成された) ルートのみが引っ掛かります。
RT5# sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 10.1.35.3 0 30 20 10 i
正規表現の特殊文字には以下のような種類があります。
記号 | 読み方 | 正規表現の意味 |
---|---|---|
. | ピリオド | 任意の 1 文字と一致 |
* | アスタリスク | 直前の文字を 0 個以上繰り返し |
+ | プラス | 直前の文字を 1 個以上繰り返し |
? | クエスチョンマーク | 直前の文字を 0 個または 1 個 |
^ | ハット | 直後の文字が文字列の最初 |
$ | ダラー | 直前の文字が文字列の最後 |
[ - ] | ブラケット, ハイフン | 範囲を示す ( [3-7] は 3, 4, 5, 6, 7 のどれかを示す) |
_ | アンダースコア | 直後の文字が文字列の最後, 直前の文字が文字列の最初, スペース のいずれかを示す |
なお、アンダースコアは一般的な正規表現には含まれません。Cisco 等での独自の使い方です。
アンダースコアの代わりにスペースを使うこともできます。
RT5(config)# ip as-path access-list 3 permit 30 20 10
コメント