UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Cisco - Cisco BGP経路フィルタリング




■経路フィルタリング


以下のようなマルチホーミング構成である場合、BGPの経路フィルタリングは必須となります。



例えばAS100からの1.1.1.1/32の経路をAS200が受信した場合、何もフィルタリングされていなければそれをAS300に送信してしまいAS200はトランジットASになってしまうためです。このためマルチホーム構成では自経路のみアドバタイズというフィルタが必要となります。


経路をフィルタする際に使用される主な手法が以下のものです。


  1. as-pathフィルタ
  2. prefix-listフィルタ
  3. distribute-listフィルタ


どれを使用するかはその人の好みになると思います。ちなみに私はprefix-listが一番使いやすいと思っています。上の3つは同一のネイバーに対して併用することはできません。また、distribute-listとprefix-listを併用することもできません。


■as-pathフィルタリング


as-pathフィルタの最大の特徴は正規表現を用いるところです。書式は以下のようになります。


router bgp 100
 neighbor 1.1.1.1 filter-list <AS-ACL> { in|out } 

ip as-path access-list <AS-ACL> permit <regexp>


PerlプログラマーやUNIX Userなら正規表現が得意な方が多いのではないでしょうか。ちなみに私は得意ではありません。正規表現とは一つの形式で複数の表現をするための表現方法で通常は抽出したい文字列と特殊文字を組み合わせて使用します。特殊文字として主に以下のものがあります。


特殊文字  説明 
 .   任意の一文字 
 ^   文字列の先頭 
 $   文字列の終了 
 *  直前の文字がないか1つ以上連続 
 ?   直前の文字がないか1つだけ存在 
 +   直前の文字が1つ以上存在 
 [ABD]   A,B,Dのいずれか 
 [A-D]   A,B,C,Dのいずれか 
  [1235]  1,2,3,5のいずれか 
 [1-5]   1,2,3,4,5のいずれか 


これらを踏まえて正規表現を使った例が以下です。


使用例  説明 
 _100_  AS100を経由 
 ^100_  AS100がネイバー
 _100$   AS100がOriginate-As 
 ^100$  AS100がネイバーでかつOriginate-AS
 ^100_.  AS100がネイバーでかつ先に他のASが存在する 
 ^[0-9]+$  あるASがネイバーでかつOriginate-AS 
 ^$   自分のASがOriginate-AS 
 .*   すべて 


上のマルチホームの構成でR2で自経路のみアドバタイズするためにAS-PATHを使ったフィルタの設定例が以下です。下記の設定によりAS300からの経路はフィルタされ、AS100に対して自経路のみアドバタイズするようになります。


[ R2 ]
ip as-path access-list 1 permit ^$
ip as-path access-list 1 deny .*

router bgp 200
 neighbor 10.10.10.1 filter-list 1 out


確認コマンドは以下のようになります。


# 正規表現にマッチしたBGPルートを表示
R2# show ip bgp regexp ^$
BGP table version is 16, local router ID is 2.2.2.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
*> 2.2.2.2/32       0.0.0.0                  0         32768 ?
*> 3.3.3.3/32       192.168.0.2             11         32768 ?
* i4.4.4.4/32       4.4.4.4                  0    100      0 ?
*>                  192.168.0.2             21         32768 ?
*> 192.168.0.0      0.0.0.0                  0         32768 ?
* i192.168.1.0      4.4.4.4                  0    100      0 ?
*>                  192.168.0.2             20         32768 ?

# AS-PATHにマッチしたBGPルートの表示
R2# show ip bgp filter-list 1
BGP table version is 16, local router ID is 2.2.2.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
*> 2.2.2.2/32       0.0.0.0                  0         32768 ?
*> 3.3.3.3/32       192.168.0.2             11         32768 ?
* i4.4.4.4/32       4.4.4.4                  0    100      0 ?
*>                  192.168.0.2             21         32768 ?
*> 192.168.0.0      0.0.0.0                  0         32768 ?
* i192.168.1.0      4.4.4.4                  0    100      0 ?
*>                  192.168.0.2             20         32768 ?


■prefix-listフィルタ


私が最もよく使うフィルタです。私だけでなく一般的にprefix-listを好む方は非常に多いのではとおもいます。他社が設定したBGPルータでもprefix-listを使っているケースが非常に多く見受けられます。書式は以下のようになります。


router bgp 100
 neighbor 1.1.1.1 prefix-list <AS-ACL> { in|out } 

ip prefix-list <list-name> seq <seq> {permit|deny} <network/len> \
[ge <ge-value>] [le <le-value>]


各項目の意味は以下のようになります。


項目  説明 
 list-name  プレフィックスリストに使う名前 
 seq-value  シーケンスの数値
 network   ネットワークアドレス
 len  サブネットマスク長
 ge-value.  範囲の始まりの値 
 le-value  範囲の終わりの値


prefix-list特有なのがge-valueとle-valueです。これらは入力されるネットワークアドレスに対して許可または拒絶のアドレスの範囲を指定することができます。


len < ge-value < le-value <= 32


また、これらの値はお互いに関係なく使うことができます。以下、使用例です。


設定例  説明 
 ip prefix-list name permit 192.168.0.0/24  192.168.0.0/24に完全一致する経路のみ。
 192.168.0.0/25や192.168.0.0/26にはマッチしない 
 ip prefix-list name permit 192.168.0.0/24 ge 28  192.168.0.0の24ビット目まで合致した上で
 prefixが/28以上、例えば192.168.0.0/28や29などにマッチ
 192.168.0.0/27などにはマッチしない
 ip prefix-list name permit 192.168.0.0/24 le 28   192.168.0.0の24ビット目まで合致した上で
 prefixが/28までの経路、例えば192.168.0.0/25などにマッチ
 192.168.0.0/29などにはマッチしない
 ip prefix-list name permit 192.168.0.0/24 le 32  192.168.0.0の24ビット目まで合致した上で
 prefixが/32までの経路。つまり192.168.0.0/24の全ての範囲。
 ip prefix-list name permit 0.0.0.0/0 le 32   全ての経路にマッチ


上のマルチホームの構成でR2で自経路のみアドバタイズするためにprefix-listを使ったフィルタの設定例が以下です。


[ R2 ]
ip prefix-list name seq 5 permit 2.2.2.2/32
ip prefix-list name seq 10 permit 3.3.3.3/32
ip prefix-list name seq 15 permit 4.4.4.4/32
ip prefix-list name seq 20 permit 192.168.0.0/24
ip prefix-list name seq 25 permit 192.168.1.0/24

router bgp 200
 neighbor 10.10.10.1 prefix-list name out


■distribute-listフィルタ


あまり使われることはないのですが、distribute-listでも経路フィルタリングを行うことは可能です。sこれはアクセスリストを使用してフィルタリングを行いますのでprefix-listのようにprefixの値まで厳密に指定することはできません。以下、設定例です。


[ R2 ]
access-list 1 permit 2.2.2.2 0.0.0.0
access-list 1 permit 3.3.3.3 0.0.0.0
access-list 1 permit 4.4.4.4 0.0.0.0
access-list 1 permit 192.168.0.0 0.0.0.255
access-list 1 permit 192.168.1.0 0.0.0.255

router bgp 200
 neighbor 10.10.10.1 distribute-list 1 out


■経路集約


BGPでネイバーに経路を広報するとき、経路を集約することができます。例えば上記の構成でいうと192.168.0.0/24と192.168.1.0/24を一括りに192.168.0.0/16とすることが可能です。経路を集約したルータ上ではNull0ルートが自動的に生成されます。


[ R2 ]
router bgp 200
 aggregate-address 192.168.0.0 255.255.0.0

R2# show ip route | i Null0
B    192.168.0.0/16 [200/0] via 0.0.0.0, 00:00:50, Null0


Null0経路が追加されるのは例えば192.168.100.1宛の経路がAS100からきた場合、実際のそのような経路は使っていないのでR1とR2との間でピンポンルーティングになるのを防ぐためです。


R1のルーティングテーブル上では次のように表示されます。個々の経路と集約経路の両方がアドバタイズされているのわかります。


[ R1 ]
R1# show ip route | i 192.168
B    192.168.0.0/24 [20/0] via 10.10.10.2, 00:09:14
B    192.168.1.0/24 [200/0] via 5.5.5.5, 00:09:17
B    192.168.0.0/16 [20/0] via 10.10.10.2, 00:00:36


aggregateコマンドには主に以下のオプションがあり必要に応じて使い分けることが可能です。


summary-only 集約経路のみ広報され、個々の経路は広報されない 
suppress-map route-map route-mapでマッチしたアドレスは広報しない
attribute-map route-map 集約経路に対してroute-mapで指定した属性をセットできる


コマンドのヘルプには以下のものが表示され、他にもあるようですが使うことが多いのは上の3つです。


(config-router)# aggregate-address 192.168.0.0 255.255.0.0 ?
  advertise-map  Set condition to advertise attribute
  as-set         Generate AS set path information
  attribute-map  Set attributes of aggregate
  nlri           Nlri aggregate applies to
  route-map      Set parameters of aggregate
  summary-only   Filter more specific routes from updates
  suppress-map   Conditionally filter more specific routes from updates



 
 関連記事
 BGPの基本設定
 BGPの経路フィルタリング
 BGP (GlobalAS)の設定
 BGP (PrivateAS)の設定
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.