BGP(Border Gateway Protocol)において、正規表現を活用することで、特定のAS-PATHを基準にしたルートの参照やフィルタリングを効率的に行うことができます。本記事では、BGPで使用可能な正規表現の基本構文と、それらを活用した具体例について解説します。
正規表現の基本構文
以下は、BGPルート操作に役立つ正規表現の主な文字列とその意味です。
| 文字列 | 説明 |
| _ (アンダースコア) | 数字以外の任意の文字列(主にAS番号間のスペース) |
| * (アスタリスク) | 前の文字を0回または複数回繰り返す |
| $ (ドル) | 文字列の末尾に一致 |
| [] (ブラケット) | 範囲を表す |
| ^ (キャレット) | 文字列の先頭に一致 |
| + (プラス) | 前の文字を1回以上繰り返す |
| . (ピリオド) | 任意の1文字(スペースを含む) |
主な正規表現例とその意味
BGPルート操作に便利な正規表現例を簡単に解説します。これを押さえれば、AS-PATHの解析やフィルタリングがスムーズに行えます。
| 正規表現 | 説明 |
| 10 | 10という文字列 |
| _10 | 10という文字列の前にスペースがある |
| _10_ | 10という文字列の前後にスペースがある →AS10を通過する |
| ^1_ | AS-PATHの先頭が1という文字列で始まり、その後がスペース →先頭のAS(直接接続されているAS)が1である |
| _13$ | 最後に13という文字列があり、その前はスペースがある →最後のAS(ルートが生成されたAS)が13である |
| 1[13] | 11もしくは13という文字列 |
| [1-3]0 | 10,20,30という文字列 |
| ^[12]_[23]_ | 先頭が1もしくは2で始まり、スペースの後、2もしくは3、そしてスペースがある文字列 |
| _1[23]$ | 12もしくは13で終わり、前にスペースがある文字列 |
| _1.$ | 10〜19で終わり、前にスペースがある文字列 |
| ^$ | 空っぽの文字列 →空のASパスに一致するため、ローカルASから生成されたルートを検索 |
詳細は以下を参考にしてください。
活用例:BGPテーブルを使った検索
以下のBGPテーブルを使用して、正規表現を用いた具体的な検索例を見ていきます。
R5# show ip bgp
BGP table version is 12, local router ID is 5.5.5.5
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.15.1 0 0 1 1 10 11 i
*> 2.2.2.2/32 192.168.25.2 0 0 2 2 20 1000 12 i
*> 3.3.3.3/32 192.168.35.3 0 0 3 3 30 1000 13 i
*> 4.4.4.4/32 192.168.45.4 0 0 4 i
*> 5.5.5.5/32 0.0.0.0 0 32768 i
特定のASを通過するルートを検索
AS10を通過したルートを検索するとします。以下の通り、条件を10だけにすると、10だけでなく1000も一致となります。
R5# show ip bgp regexp 10 BGP table version is 12, local router ID is 5.5.5.5 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.15.1 0 0 1 1 10 11 i *> 2.2.2.2/32 192.168.25.2 0 0 2 2 20 1000 12 i *> 3.3.3.3/32 192.168.35.3 0 0 3 3 30 1000 13 I
_10だと、先頭のスペースも条件になります。ただし、前回同様1000も一致となります。
R5# show ip bgp regexp _10 BGP table version is 12, local router ID is 5.5.5.5 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.15.1 0 0 1 1 10 11 i *> 2.2.2.2/32 192.168.25.2 0 0 2 2 20 1000 12 i *> 3.3.3.3/32 192.168.35.3 0 0 3 3 30 1000 13 I
AS10のみを通過したルートを検索するには、10の文字列の前後にスペースを含める必要があるため、 _10_で検索します。
R5# show ip bgp regexp _10_ BGP table version is 12, local router ID is 5.5.5.5 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.15.1 0 0 1 1 10 11 I
隣接ASから広告されたルートを検索
隣接されたAS1から広告されたルートを検索するには、先頭が1という文字列で始まり、その後がスペースがある条件で検索します。
R5# show ip bgp regexp ^1_ BGP table version is 12, local router ID is 5.5.5.5 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.15.1 0 0 1 1 10 11 I
特定のASで生成されたルートを検索
AS13から生成されたルートは、最後に13という文字列があり、その前はスペースがある条件で検索します。
R5# show ip bgp regexp _13$ BGP table version is 12, local router ID is 5.5.5.5 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 *> 3.3.3.3/32 192.168.35.3 0 0 3 3 30 1000 13 i
複数のAS条件を組み合わせて検索
AS-PATHに11もしくは13の文字列があるものを検索します。
R5# show ip bgp regexp 1[13] BGP table version is 12, local router ID is 5.5.5.5 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.15.1 0 0 1 1 10 11 i *> 3.3.3.3/32 192.168.35.3 0 0 3 3 30 1000 13 I
AS-PATHに10,20,30いずれかの文字列があるものを検索します。
R5# show ip bgp regexp [1-3]0 BGP table version is 12, local router ID is 5.5.5.5 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.15.1 0 0 1 1 10 11 i *> 2.2.2.2/32 192.168.25.2 0 0 2 2 20 1000 12 i *> 3.3.3.3/32 192.168.35.3 0 0 3 3 30 1000 13 i
AS-PATHの先頭のAS番号が1か2 で次のAS番号が2か3であるものを検索します。
R5# show ip bgp regexp ^[12]_[23]_ BGP table version is 12, local router ID is 5.5.5.5 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 *> 2.2.2.2/32 192.168.25.2 0 0 2 2 20 1000 12 i
AS-PATHの最後のAS番号が12もしくは13であるものを検索します。
R5# show ip bgp regexp _1[23]$ BGP table version is 12, local router ID is 5.5.5.5 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 *> 2.2.2.2/32 192.168.25.2 0 0 2 2 20 1000 12 i *> 3.3.3.3/32 192.168.35.3 0 0 3 3 30 1000 13 i
AS-PATHの最後のAS番号が10〜19であるものを検索します。
R5# show ip bgp regexp _1.$ BGP table version is 12, local router ID is 5.5.5.5 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.15.1 0 0 1 1 10 11 i *> 2.2.2.2/32 192.168.25.2 0 0 2 2 20 1000 12 i *> 3.3.3.3/32 192.168.35.3 0 0 3 3 30 1000 13 I
自身が生成したルートを検索
これは、空っぽの文字列のAS番号を条件にすることで検索できます。
R5# show ip bgp regexp ^$
BGP table version is 12, local router ID is 5.5.5.5
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
*> 5.5.5.5/32 0.0.0.0 0 32768 i
その他 BGP関連記事は >> ルーティングプロトコル(BGP)まとめ << より参照できます。
コメント