13.1.2 フィルタ方法
フィルタは,条件を列挙したものです。経路フィルタリング設定にフィルタの識別子を指定することで,学習経路フィルタリングや広告経路フィルタリングにフィルタが適用されます。
本装置で経路フィルタリングに使用できるフィルタには,大きく分けて2種類あります。宛先ネットワークだけを条件にフィルタするprefix-list・access-listと,主要な経路属性ほとんどを条件にフィルタして,経路属性も変更できるroute-mapです。そのほかに,BGP4経路属性を条件とするip as-path access-listとip community-listがあります。ip as-path access-listとip community-listは,route-mapから呼び出して使います。
フィルタの設定では,フィルタの識別子,フィルタ条件,フィルタ条件と一致したときの動作を指定します。動作には,permit(許可)とdeny(拒否)のどちらかを選択できます。
一つの識別子に対して,フィルタを多数設定できます。フィルタを評価するときには,指定した識別子のフィルタ設定を設定表示順に評価して,最初に経路とフィルタ条件が一致した設定の動作を採用します。設定表示順は,シーケンス番号を指定することができるフィルタではシーケンス番号順,シーケンス番号を指定できないフィルタでは設定順になります。
指定した識別子について経路と動作条件が一致するフィルタ設定がない場合,denyとみなします。これを暗黙のdenyといいます。暗黙のdenyは,フィルタ条件を設定してあるフィルタの最後にあります。
フィルタ条件の設定が一つもない識別子のフィルタはpermitの動作をします。
(1) 宛先ネットワークによるフィルタ
(a) ip prefix-list
ip prefix-listは,フィルタ条件としてプレフィックスを指定するフィルタです。ip prefix-listを経路フィルタリングに使用した場合,経路の宛先ネットワークとプレフィックス条件を比較します。
フィルタ条件として,プレフィックスのほかにマスク長の最大値・最小値を指定できます。経路の宛先ネットワークと比較して,包含し,かつ宛先ネットワークのマスク長が条件に指定したマスク長の範囲内に収まる場合に,一致したものとみなします。マスク長の範囲を指定しなかった場合,プレフィックス条件のマスク長と完全に一致した場合だけ,一致したものとみなします。ip prefix-listの比較例を次の表に示します。
比較対象 プレフィックス |
ip prefix-listの条件 |
||
---|---|---|---|
192.168.0.0/16 マスク長16だけ一致 |
192.168.0.0/16 ge 16 le 24 マスク長16以上 24以下と一致 |
192.168.0.0/16 ge 8 le 24 マスク長8以上 24以下と一致 |
|
0.0.0.0/0 |
× |
× |
× |
192.0.0.0/8 |
× |
× |
○ |
193.0.0.0/8 |
× |
× |
× |
192.168.0.0/16 |
○ |
○ |
○ |
192.169.0.0/16 |
× |
× |
× |
192.168.43.0/24 |
× |
○ |
○ |
192.168.42.3/32 |
× |
× |
× |
ip prefix-listは,route-mapのmatch ip addressから経路宛先条件として引用することもできます。比較方法は単体で経路フィルタとして使用した場合と同じです。
ip prefix-listは,route-mapのmatch ip route-sourceから経路学習元ルータ条件として引用することもできます。この場合,経路学習元ルータのIPv4アドレスにマスク長32のマスクを付けたものと条件を比較します。
(b) ip access-list standard
ip access-list standardとaccess-listの名前1〜99または1300〜1999は,主にパケットやログインアクセスなどをフィルタするためのフィルタ設定ですが,経路フィルタリングに使うこともできます。
ip access-list standardを経路フィルタリングに使用した場合,経路の宛先ネットワークのアドレス部分とアドレス条件を比較します。
ip access-list standardは,route-mapのmatch ip addressから経路宛先条件として引用することもできます。比較方法は単体で経路フィルタとして使用した場合と同じです。
ip access-list standardは,route-mapのmatch ip route-sourceから経路学習元ルータ条件として引用することもできます。この場合,経路学習元ルータのIPv4アドレスと条件を比較します。
(c) ip access-list extended
ip access-list extendedとaccess-listの名前100〜199または2000〜2699は主にパケットをフィルタするためのフィルタ設定ですが,経路フィルタリングに使うこともできます。
ip access-list extendedを経路フィルタリングに使用した場合,経路の宛先ネットワークのアドレスと宛先アドレス条件を比較し,経路の宛先ネットワークのマスクと送信元アドレス条件を比較します。上位プロトコル種別やポート番号などのアドレス以外の条件は,すべて無視します。
ip access-list extendedは,route-mapのmatch ip addressから経路宛先条件として引用することもできます。比較方法は単体で経路フィルタとして使用した場合と同じです。
ip access-list extendedは,route-mapのmatch ip route-sourceから経路学習元ルータ条件として引用することもできます。この場合,経路学習元ルータのIPv4アドレスと宛先アドレス条件を比較し,マスク長32のマスク255.255.255.255と送信元アドレス条件を比較します。
(2) route-map
route-mapは,いろいろな種類のフィルタ条件を複数同時に指定できるフィルタです。さらに,条件を満たしたときに経路属性を変更することもできます。
route-mapにはシーケンス番号が付いています。一つのシーケンス番号にフィルタ条件の種類ごとに1行ずつフィルタ条件を設定できます。1行の設定の中には,フィルタ条件を複数指定できます。1行の中に指定した複数の条件はOR条件として取り扱われます。シーケンス番号の中に設定した複数の行はAND条件として取り扱われます。
指定してあるフィルタ条件が,全種類について一つずつ一致すれば,そのシーケンス番号の条件を満たしたことになります。条件を満たした時点で,そのシーケンス番号の動作を採用し,そのroute-mapによってフィルタを終了します。
指定したフィルタ条件のどれもが一致しないようなフィルタ条件の種類が一つでもある場合,そのシーケンス番号の条件は満たさなかったことになります。この場合,次のシーケンス番号を評価します。
route-mapのフィルタ条件の種類とroute-mapで変更できる属性を次の表に示します。
- 注意
-
経路に複数のroute-mapを連続して適用した場合,先に適用したroute-mapで変更した経路属性が,あとで適用するroute-mapの経路フィルタリングに影響します。
例えば,redistribute(RIP)でタグ値を変更するroute-mapを適用し,distribute-list out(RIP)でタグ値を条件とするroute-mapを適用した場合,まずredistributeでタグ値を変更し,次にdistribute-list outのroute-mapを適用するときには変更後のタグ値と比較することになります。
条件となる経路属性 |
説明 |
コンフィグレーションコマンド |
---|---|---|
宛先ネットワーク |
prefix-listやaccess-listの識別子を条件として指定し,指定したフィルタで経路の宛先ネットワークをフィルタします。フィルタの動作がpermitの場合,一致したとみなします。denyの場合,一致しないとみなします。 |
match ip address ip prefix-list ip access-list |
プロトコル種別 |
ルーティングプロトコル名を条件として指定し,経路の学習元プロトコル種別と比較します。 |
match protocol |
隣接ルータ |
prefix-listやaccess-listの識別子を条件として指定し,指定したフィルタで経路の学習元ルータのアドレスをフィルタします。指定したフィルタの動作がpermitの場合,一致したとみなします。denyの場合,一致しないとみなします。 学習元隣接ルータのアドレスがあるのは,RIP経路とBGP4経路だけです。そのほかの経路は,隣接ルータ条件と一致することはありません。 |
match ip route-source ip access-list ip prefix-list |
インタフェース |
インタフェースを条件として指定し,経路ネクストホップのインタフェースと比較します。 ネクストホップのない経路は一致しません。 BGP4学習経路フィルタリングでは,経路はどのインタフェースとも一致しません。 |
match interface |
タグ値 |
タグ値を条件に指定し,経路のタグ値と比較します。 タグのない経路ではタグ値0とみなします。 |
match tag |
AS_PATH属性 |
ip as-path access-listの識別子を条件に指定し,経路のAS_PATH属性を指定したip as-path access-listでフィルタします。動作がpermitの場合,一致したとみなします。denyの場合,一致しないとみなします。 AS_PATH属性のない経路では,長さ0のAS PATHとみなします。 |
match as-path ip as-path access-list |
COMMUNITIES属性 |
ip community-listの識別子を条件に指定し,経路のCOMMUNITIES属性を指定したip community-listでフィルタします。動作がpermitの場合,一致したとみなします。denyの場合,一致しないとみなします。 COMMUNITIES属性のない経路では,コミュニティなしとみなします。 |
match community ip community-list |
ORIGIN属性 |
値IGP・EGP・INCOMPLETEを条件に指定し,経路のORIGIN属性と比較します。 ORIGIN属性のない経路では,値IGPとみなします。 |
match origin |
経路種別 |
OSPFの経路種別やlocal (network (BGP) の設定による経路であることを示す) をフィルタ条件に指定し,経路のプロトコル依存経路種別と比較します。 |
match route-type |
変更できる属性 |
説明 |
コンフィグレーションコマンド |
---|---|---|
ディスタンス値 |
ルーティングテーブル内での経路優先度,ディスタンス値を変更します。学習経路フィルタリングだけで有効です。 |
set distance |
メトリック値 |
メトリック値やMED属性を変更します。値の置き換えのほかに,加算と減算ができます。 BGP4での経路フィルタリングに限り,BGP NEXT_HOP属性への経路のメトリックを引き継ぐこともできます。 |
set metric set metric-type internal(NEXT_HOP属性宛の経路のメトリック引き継ぎ) |
MED属性 |
||
タグ値 |
経路のタグ値を変更します。 |
set tag |
LOCAL_PREF属性 |
経路のLOCAL_PREF属性を変更します。値の置き換えのほかに,加算と減算ができます。 BGP4の経路フィルタリングで使用します。 |
set local-preference |
AS_PATH属性 |
経路のAS_PATH属性を変更します。AS番号を追加することだけ可能です。ピアの送信側AS番号を追加します。 BGP4の外部ピアで学習・広告した経路の経路フィルタリングで使用します。 |
set as-path prepend count |
COMMUNITIES属性 |
経路のCOMMUNITIES属性を変更します。コミュニティの置き換え・追加・削除ができます。 BGP4の経路フィルタリングで使用します。 |
set community set community-delete |
ORIGIN属性 |
経路のORIGIN属性を変更します。 BGP4の経路フィルタリングで使用します。 |
set origin |
OSPFメトリック種別 |
メトリック種別を変更します。 OSPFの広告経路フィルタリングで使用します。 |
set metric-type |
(3) そのほかのフィルタ
上記で説明したフィルタのほかに,BGP4経路属性を条件とするフィルタを使用できます。ここで説明するフィルタは,route-mapからフィルタ条件として呼び出して使います。
(a) ip as-path access-list
AS_PATH属性専用のフィルタです。正規表現をフィルタ条件とし,AS_PATH属性の文字列表現と比較します。route-mapのmatch as-pathから呼び出して使用します。正規表現については,「(d) 正規表現」を参照してください。
AS_PATH属性の文字列表現は,10進数表記したAS番号を空白文字で接続したものです。
なお,フィルタ条件としてAS_PATH属性のパスタイプを指定できません。フィルタ条件として指定するAS番号は,AS_PATH属性に含まれるすべてのパスタイプがフィルタの評価対象となります。次に示すAS_PATH属性を持つ経路をフィルタする場合を例として説明します。
- [AS_PATH属性の内容]
AS_SEQ: 100 200 300, AS_SET: 1000 2000 3000, AS_CONFED_SEQUENCE: 65001 65002
- [運用コマンドでのAS_PATH属性の表示形式]
100 200 300 {1000 2000 3000} (65001 65002)
このようなAS_PATH属性の場合,次に示すどのAS番号を指定してもフィルタに一致します。
-
“100 200 300”
-
“1000 2000 3000”
-
“65001 65002”
-
“300 1000”
運用コマンドのパスタイプ表記である{}や()は,正規表現の特殊文字のため,パスタイプを表すための文字としては指定できないことに注意してください。
また,AS_SETについてはBGP4経路受信時に昇順にソートするため,ソートした結果がフィルタの評価対象となります。
(b) ip community-list standard
COMMUNITIES属性専用のフィルタです。複数のコミュニティをフィルタ条件とし,経路のCOMMUNITIES属性に条件コミュニティがすべて含まれている場合,一致したとみなします。route-mapのmatch communityから呼び出して使用します。
(c) ip community-list expanded
COMMUNITIES属性専用のフィルタです。正規表現をフィルタ条件とし,COMMUNITIES属性の文字列表現と比較します。route-mapのmatch communityから呼び出して使用します。正規表現については,「(d) 正規表現」を参照してください。
COMMUNITIES属性の文字列表現は,コミュニティ値を文字列に変換し,値の小さいものから順に空白文字で接続したものです。コミュニティ値の文字列表現を次の表に示します。
コミュニティ値 |
文字列 |
---|---|
0xFFFFFF01 (16進) |
no-export |
0xFFFFFF02 (16進) |
no-advertise |
0xFFFFFF03 (16進) |
local-AS |
上記以外 |
<AS番号>:<下位2オクテット値> <AS番号>と<下位2オクテット値>はともに10進表記。 |
(d) 正規表現
正規表現は文字列のパターンを記述する方法です。正規表現を使うことで,繰り返しなどのパターンを書くことができます。正規表現は,AS_PATH属性やCOMMUNITIES属性のフィルタ条件に使用します。
正規表現で使える文字は,数字・小文字アルファベット・大文字アルファベット・記号(ただし,ダブルクォーテーション「"」は除く)などの通常文字と,特殊文字です。通常文字,「\」と組み合わせた特殊文字は,文字列中の同じ文字と一致します。特殊文字はそれぞれパターンを示します。特殊文字とそのパターンを次の表に示します。
特殊文字 |
パターン |
---|---|
. |
空白を含むすべての単一文字を意味します。 |
* |
前に置いた文字や文字集合の0回以上の繰り返しを意味します。 |
+ |
前に置いた文字や文字集合の1回以上の繰り返しを意味します。 |
? |
前に置いた文字や文字集合の0回または1回を意味します(コマンド入力時には[Ctrl]+[V]を入力後[?]を入力してください)。 |
^ |
文字列の先頭を意味します。 |
$ |
文字列の末尾を意味します。 |
_ |
文字列の先頭,文字列の末尾,「 」(空白),「_」,「,」,「(」(通常文字),「)」(通常文字),「{」,「}」,「<」,「>」のどれかを意味します。 |
[ ] |
[ ]内の文字範囲のうち単一文字を意味します。[ ]内では,次に示す文字以外は通常文字として扱います(特殊文字としても意味は持ちません)。 ^:文字範囲を示す[ ]の中の先頭に置いた場合,パターンの否定を意味します。 -:[ ]の中で範囲のうち開始と終了を示すために使用します。-の前の文字は-の後の文字よりも文字コードが小さくなるように指定してください。文字コードについては「コンフィグレーションコマンドレファレンス Vol.1」 「表1‒3 文字コード一覧」を参照してください。 例:[6-8]は6,7,8のどれか1文字を意味します。[^6-8]は6,7,8以外のどれか1文字を意味します。 |
( ) |
複数文字の集合を意味します。最大で9集合までネスト可能です。 |
| |
OR条件を意味します。 |
\ |
上記の特殊文字の前に置いた場合,その特殊文字を通常文字として扱います。 |
正規表現で使用する文字を,結合優先順位が高い順に次に示します。
-
( )
-
* + ?
-
通常文字 . [ ] ^ $
-
|
コンフィグレーションコマンドや運用コマンドで正規表現を指定する際には,正規表現の前後をダブルクォーテーション(")で囲んで指定してください。
- 例1
> show ip bgp aspath-regexp "^$"
- 例2
(config)# ip as-path access-list 10 permit "_100_"