経路情報のフィルタ(AS Path)
・RouterDで,AS50を経由する経路情報を受信しないようにする
・ASパス属性を使って経路情報をフィルタしていることを確認する
ネットワーク構成(画像を別ウインドウで表示)
RouterAのコンフィグ
!
version 12.3
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname RouterA
!
interface Loopback0
ip address 10.10.10.10 255.255.255.0
!
interface Serial0
ip address 192.168.1.1 255.255.255.0
clockrate 64000
!
interface Serial1
ip address 192.168.2.1 255.255.255.0
clockrate 64000
!
router bgp 100
no synchronization
bgp log-neighbor-changes
network 10.10.10.0 mask 255.255.255.0
neighbor 192.168.1.2 remote-as 50
neighbor 192.168.2.2 remote-as 60
no auto-summary
!
line con 0
line aux 0
line vty 0 4
login
!
end
RouterBのコンフィグ
!
version 12.3
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterB
!
interface Serial0
ip address 192.168.1.2 255.255.255.0
!
interface Serial1
ip address 192.168.3.1 255.255.255.0
!
router bgp 50
no synchronization
bgp log-neighbor-changes
neighbor 192.168.1.1 remote-as 100
neighbor 192.168.3.2 remote-as 200
no auto-summary
!
line con 0
line aux 0
line vty 0 4
login
!
end
RouterCのコンフィグ
!
hostname RouterC
!
interface Serial0
ip address 192.168.2.2 255.255.255.0
no fair-queue
!
interface Serial1
ip address 192.168.4.1 255.255.255.0
!
router bgp 60
no synchronization
bgp log-neighbor-changes
neighbor 192.168.2.1 remote-as 100
neighbor 192.168.4.2 remote-as 200
no auto-summary
!
line con 0
line aux 0
line vty 0 4
login
!
end
RouterDのコンフィグ
!
version 12.3
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname RouterD
!
interface Serial0
ip address 192.168.3.2 255.255.255.0
clockrate 64000
!
interface Serial1
ip address 192.168.4.2 255.255.255.0
clockrate 64000
!
router bgp 200
no synchronization
bgp log-neighbor-changes
neighbor 192.168.3.1 remote-as 50
neighbor 192.168.3.1 filter-list 1 in ←192.168.3.1(RouterB)から受信した経路情報に対してASパス・アクセスリスト1番を適用する
neighbor 192.168.4.1 remote-as 60
no auto-summary
!
ip as-path access-list 1 deny _50_ ←ASパス・アクセスリスト(1番)を定義する
ip as-path access-list 1 permit .*   (AS50を経由する経路情報は拒否する)

!
line con 0
line aux 0
line vty 0 4
login
!
end
確認
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

BGPラボ
BGPの基本設定
BGP同期
BGPの経路集約
ルート・リフレクタ

経路選択(Local Preference)
経路選択(MED)

経路選択(AS Path)
経路情報のフィルタ(ネットワーク番号)
経路情報のフィルタ(AS Path)
BGPコンフェデレーション

バックドア・リンク

BGPコミュニティ