| 確認 |
BGPで経路情報のフィルタをする方法として,ASパス属性を使う方法もあります。
「このASを通った経路情報は受信する」とか「このASから受け取った経路情報は拒否する」といった使い方ができます。
●設定前の確認
ここではRouterDに対して,AS50を経由する経路情報を受信しないようにしてみましょう。
上に示したRouteDのコンフィグで,太字のコマンドがASパス属性を使ったフィルタ設定です。
そこで,このフィルタ設定のコマンドを入れていない状態から見ていきましょう。
●ASパス・フィルタ設定前の状態
最初に,ASパス・フィルタの設定を何もしていない状態を確認しましょう。
RouterDのBGPテーブルを見ると,以下のようになっています。
10.10.10.0/24の経路情報を,「AS100→AS60」と「AS100→AS50」という二つのルートで受け取っています。
RouterD#show ip bgp
BGP table version is 2, local
router ID is
192.168.4.2
Status codes: s suppressed, d
damped, h history,
* valid, > best, i - internal,
r RIB-failure,
S Stale
Origin codes: i - IGP, e - EGP,
? - incomplete
Network Next Hop Metric
LocPrf Weight Path
*> 10.10.10.0/24 192.168.4.1 0
60 100 i
* 192.168.3.1 0
50 100 i
●正規表現とは?
ここでの目標は,RouterDに「AS50を経由する経路情報を拒否する」と設定することです。
そこで,こうした「AS50を経由する」などということを表現するために,正規表現と呼ばれる方法を使います。
ちょっととっつきにくいですが,典型的な例を覚えてしまえば大丈夫です。
【正規表現の例】
. (ピリオド):任意の1文字(スペース記号も含む)
例:.*…すべて(任意の一文字が連続)
_(アンダーバー):任意のもの (最初,最後,空白,カンマなど。つまり通過AS)
例:_12_…12を含むもの
^(カレット):文字列の先頭 (AS PATHの先頭。つまり隣接AS)
例:^12_…12 34 56など
$(ダラー):文字列の終わり (AS PATHの最後。つまり経路情報の発生元AS)
例:^12$…12だけのもの
*(アスタリスク):直前の文字がないか1つ以上連続
例:12*3…13,123,1223など
?(クエスチョン):直前の文字がないか1つだけ存在
例):12?3…13,123
+(プラス):直前の文字が1つ以上存在
例:12+3…123,1223など
[ ](大カッコ):カッコ中であてはまるもの
例:[abc]…a,b,c
●ASパス・フィルタの設定
いきなり正規表現を使って設定してもいいのですが,BGPでは正規表現を使ったときにどの経路情報が当てはまるかを調べるshow
ip bgp regexpコマンドがあります。
「AS50を経由する」を正規表現で表すと「_50_」です。
これをshow ip bgp regexpコマンドで調べてみましょう。
RouterD#show ip bgp regexp _50_
BGP table version is 2, local
router ID is
192.168.3.2
Status codes: s suppressed, d
damped, h history,
* valid, > best, i - internal,
r RIB-failure,
S Stale
Origin codes: i - IGP, e - EGP,
? - incomplete
Network Next Hop Metric
LocPrf Weight Path
* 10.10.10.0/24 192.168.3.1 0
50 100 i
10.10.10.0/24の経路情報が一つ該当することがわかりました。
では,この経路情報を受け取らないようにRouterDに設定しましょう。
まず,ASパス・アクセスリスト1番に,正規表現を使った許可・拒否の条件文を作ります。
「.*」という正規表現は,「すべて当てはまる」という意味です。
そして,ここで作ったASパス・アクセスリストを,192.168.3.1(RouterC)から受け取る(in)経路情報に対して適用します。
RouterD(config)#ip as-path access-list 1 deny _50_
RouterD(config)#ip as-path access-list 1 permit .*
RouterD(config)#router bgp 200
RouterD(config-router)#neighbor 192.168.3.1 filter-list 1 in
設定したら,RouterDが確立しているすべてのBGPピアをいったんリセットして再確立します。
RouterD#clear ip bgp *
RouterD#
*Mar 1 01:31:51.215: %BGP-5-ADJCHANGE:
neighbor
192.168.3.1 Down User reset
*Mar 1 01:31:51.219: %BGP-5-ADJCHANGE:
neighbor
192.168.4.1 Down User reset
*Mar 1 01:32:26.775: %BGP-5-ADJCHANGE:
neighbor
192.168.4.1 Up
*Mar 1 01:32:32.475: %BGP-5-ADJCHANGE:
neighbor
192.168.3.1 Up
●ASパス・フィルタ設定後の動作の確認
RouterDが受信している経路情報がどうなったか確認しましょう。
RouterDのBGPテーブルを表示してみます。
RouterD#show ip bgp
BGP table version is 2, local
router ID is
192.168.4.2
Status codes: s suppressed, d
damped, h history,
* valid, > best, i - internal,
r RIB-failure,
S Stale
Origin codes: i - IGP, e - EGP,
? - incomplete
Network Next Hop Metric
LocPrf Weight Path
*> 10.10.10.0/24 192.168.4.1 0
60 100 i
192.168.3.1(RouterC)から受け取っていた,AS50を含む経路情報がなくなっています。
RouterDが,AS50を経由する経路情報を受信しなくなったことが確認できました。
ちなみに,show ip as-path-access-listコマンドを使うと,ASパス・アクセスリストを確認することができます。
RouterD#show ip as-path-access-list
AS path access list 1
deny _50_
permit .*
●おまけ(RouterCでAS100を発生元とする経路情報を通知しないようにする)
おまけで,今度はRouterCにASパス・アクセスリストを設定してみましょう。
RouterCに,「AS100から始まる経路情報を拒否する」と設定してみます。
「_100$」という正規表現は「100が最後」という意味で,AS PATH表示の最後が100,つまり「経路情報の発生元がAS100」という意味です。
設定は,以下です。
RouterC(config)#ip as-path access-list 1 deny _100$
RouterC(config)#ip as-path access-list 1 permit .*
RouterC(config)#router bgp 60
RouterC(config-router)#neighbor 192.168.4.2 filter-list 1 out
設定したら,BGPピアを再確立します。
RouterC#clear ip bgp *
RouterC#
01:52:35: %BGP-5-ADJCHANGE: neighbor
192.168.2.1
Down User reset
01:52:35: %BGP-5-ADJCHANGE: neighbor
192.168.4.2
Down User reset
01:53:16: %BGP-5-ADJCHANGE: neighbor
192.168.4.2
Up
01:53:16: %BGP-5-ADJCHANGE: neighbor
192.168.2.1
Up
RouterCのBGPテーブルを見てみましょう。
経路情報の受信自体を拒否しているわけではないので,BGPテーブルに経路情報はありますね。
RouterC#show ip bgp
BGP table version is 2, local
router ID is
192.168.4.1
Status codes: s suppressed, d
damped, h history,
* valid, > best, i - internal,
r RIB-failure,
S Stale
Origin codes: i - IGP, e - EGP,
? - incomplete
Network Next Hop Metric
LocPrf Weight Path
*> 10.10.10.0/24 192.168.2.1 0
0 100 i
では,RouterDのBGPテーブルを見てみましょう。
RouterD#show ip bgp
何も表示されません。
RouterCで経路情報がフィルタされて,結果的にRouterDに流さなくなったことが確認できました。
正規表現については,以下のWebページが参考になります。
●BGPケーススタディ ASの正規表現(日本語)
http://www.cisco.com/japanese/warp/public/3/jp/service/tac/459/15-j.html#A20.2.1
●Regular Expressions(英語)
http://www.cisco.com/univercd/cc/td/doc/product/atm/c8540/12_0/13_19/cmd_ref/appc.htm |
|