23.1.2 フィルタ方法
フィルタは,条件を列挙したものです。経路フィルタリング設定にフィルタの識別子を指定することで,学習経路フィルタリングや広告経路フィルタリングにフィルタが適用されます。
本装置で経路フィルタリングに使用できるフィルタには,大きく分けて2種類あります。宛先ネットワークだけを条件にするフィルタと,主要な経路属性ほとんどを条件にフィルタして,経路属性も変更できるroute-mapです。フィルタ方法の概要を次の表に示します。
バージョン |
フィルタ条件 |
フィルタの種類 |
---|---|---|
IPv4 |
宛先ネットワーク |
|
経路属性 |
|
|
BGP4経路属性 |
|
|
IPv6 |
宛先ネットワーク |
|
IPv6アドレス |
|
|
経路属性 |
|
|
BGP4+経路属性 |
|
フィルタの設定では,フィルタの識別子,フィルタ条件,フィルタ条件と一致したときの動作を指定します。動作には,permit(許可)とdeny(拒否)のどちらかを選択できます。
一つの識別子に対して,フィルタを複数設定できます。フィルタを評価するときには,指定した識別子のフィルタ設定を設定表示順に評価して,最初に経路とフィルタ条件が一致した設定の動作を採用します。設定表示順は,シーケンス番号を指定できるフィルタではシーケンス番号順,シーケンス番号を指定できないフィルタでは設定順になります。
指定した識別子について経路と動作条件が一致するフィルタ設定がない場合,denyと見なします。これを暗黙のdenyといいます。暗黙のdenyは,フィルタ条件を設定してあるフィルタの最後にあります。
フィルタ条件の設定が一つもない識別子のフィルタはpermitの動作をします。
(1) 宛先ネットワークによるフィルタ
(a) ip prefix-list,ipv6 prefix-list
ip prefix-listおよびipv6 prefix-listは,フィルタ条件としてプレフィックスを指定するフィルタです。これらを経路フィルタリングに使用した場合,経路の宛先ネットワークとプレフィックス条件を比較します。
フィルタ条件として,プレフィックスのほかにマスク長の最大値・最小値を指定できます。経路の宛先ネットワークと比較して,包含し,かつ宛先ネットワークのマスク長が条件に指定したマスク長の範囲内に収まる場合に,一致と見なします。マスク長の範囲を指定しなかった場合,プレフィックス条件のマスク長と完全に一致した場合だけ,一致と見なします。ip prefix-listの比較例およびipv6 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 |
× |
× |
× |
比較対象 プレフィックス |
ipv6 prefix-listの条件 |
||
---|---|---|---|
2001:db8:f000::/40 マスク長40だけ一致 |
2001:db8:f000::/40 ge 40 le 48 マスク長40以上 48以下と一致 |
2001:db8:f000::/40 ge 32 le 48 マスク長32以上 48以下と一致 |
|
::/0 |
× |
× |
× |
2001:db8::/32 |
× |
× |
○ |
2001:db8:f000::/36 |
× |
× |
○ |
2001:db8:8000::/36 |
× |
× |
× |
2001:db8:f000::/40 |
○ |
○ |
○ |
2001:db8:8000::/48 |
× |
× |
× |
2001:db8:f000::/48 |
× |
○ |
○ |
2001:db8:f000::/64 |
× |
× |
× |
ip prefix-listをroute-mapのmatch ip addressから,ipv6 prefix-listをroute-mapのmatch ipv6 addressから,経路宛先条件として引用した場合,単体で経路フィルタとして使用した場合と同じ方法で比較します。
ip prefix-listをroute-mapのmatch ip route-sourceから経路学習元ルータ条件として引用した場合,経路学習元ルータのIPv4アドレスにマスク長32のマスクを付けたものと条件を比較します。
ipv6 prefix-listをroute-mapのmatch ipv6 route-sourceから経路学習元ルータ条件として引用した場合,経路学習元ルータのIPv6アドレスにマスク長128のマスクを付けたプレフィックスとプレフィックス宛先を比較します。
(b) ip access-list standard
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のアクセスリスト名は,主にパケットをフィルタするためのフィルタ設定ですが,経路フィルタリングにも使用できます。経路フィルタリングに使用した場合,経路の宛先ネットワークのアドレスと宛先アドレス条件を比較し,経路の宛先ネットワークのマスクと送信元アドレス条件を比較します。上位プロトコル種別やポート番号などのアドレス以外の条件は,すべて無視します。
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と送信元アドレス条件を比較します。
(d) ipv6 access-list
ipv6 access-listのアクセスリスト名は,主にパケットをフィルタするためのフィルタ設定ですが,経路フィルタリングにも使用できます。
ipv6 access-listをroute-mapのmatch ipv6 addressから経路宛先条件として引用した場合,経路宛先ネットワークのアドレスと宛先アドレス条件を比較します。送信元アドレス条件,上位プロトコル種別,ポート番号などの宛先アドレス以外の条件は,すべて無視します。
ipv6 access-listをroute-mapのmatch ipv6 route-sourceから経路学習元ルータ条件として引用した場合,経路学習元ルータIPv6アドレスと宛先アドレス条件を比較します。送信元アドレス条件,上位プロトコル種別,ポート番号などの宛先アドレス以外の条件は,すべて無視します。
(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を適用するときには変更後のタグ値と比較することになります。
条件となる経路属性 |
説明 |
コンフィグレーションコマンド |
---|---|---|
宛先ネットワーク |
ip prefix-list,ipv6 prefix-list,ip access-listまたはipv6 access-listの識別子を条件として指定して,指定したフィルタで経路の宛先ネットワークをフィルタします。フィルタの動作がpermitの場合,一致したと見なします。denyの場合,一致しないと見なします。 |
ip access-list ipv6 access-list ip prefix-list ipv6 prefix-list match ip address match ipv6 address |
プロトコル種別 |
ルーティングプロトコル名を条件として指定して,経路の学習元プロトコル種別と比較します。 |
match protocol |
隣接ルータ |
ip prefix-list,ipv6 prefix-list,ip access-listまたはipv6 access-listの識別子を条件として指定して,指定したフィルタで経路の学習元ルータのアドレスをフィルタします。指定したフィルタの動作がpermitの場合,一致したと見なします。denyの場合,一致しないと見なします。 学習元隣接ルータのアドレスがあるのは,RIP経路,BGP4経路,RIPng経路およびBGP4+経路だけです。そのほかの経路は,隣接ルータ条件と一致しません。 |
ip access-list ipv6 access-list ip prefix-list ipv6 prefix-list match ip route-source match ipv6 route-source |
インタフェース |
インタフェースを条件として指定して,経路ネクストホップのインタフェースと比較します。 ネクストホップのない経路は一致しません。 BGP4および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と見なします。 |
ip as-path access-list match as-path |
COMMUNITIES属性 |
ip community-listの識別子を条件に指定して,経路のCOMMUNITIES属性を指定したip community-listでフィルタします。動作がpermitの場合,一致したと見なします。denyの場合,一致しないと見なします。 COMMUNITIES属性のない経路では,コミュニティなしと見なします。 |
ip community-list match community |
ORIGIN属性 |
値IGP・EGP・INCOMPLETEを条件に指定して,経路のORIGIN属性と比較します。 ORIGIN属性のない経路では,値IGPと見なします。 |
match origin |
経路種別 |
OSPFおよびOSPFv3の経路種別やlocal(network(BGP4)およびnetwork(BGP4+)の設定による経路であることを示す)をフィルタ条件に指定して,経路のプロトコル依存経路種別と比較します。 |
match route-type |
VRF ID |
VRF IDを条件に指定して,経路のVRF IDと比較します。 |
match vrf |
変更できる属性 |
説明 |
コンフィグレーションコマンド |
---|---|---|
ディスタンス値 |
ルーティングテーブル内での経路優先度,ディスタンス値を変更します。学習経路フィルタリングだけで有効です。 |
set distance |
メトリック値 |
メトリック値やMED属性を変更します。値の置き換えのほかに,加算と減算ができます。 BGP4およびBGP4+での経路フィルタリングに限り,BGP NEXT_HOP属性への経路のメトリックを引き継ぐこともできます。 |
set metric set metric-type internal(NEXT_HOP属性宛ての経路のメトリック引き継ぎ) |
MED属性 |
||
タグ値 |
経路のタグ値を変更します。 |
set tag |
LOCAL_PREF属性 |
経路のLOCAL_PREF属性を変更します。値の置き換えのほかに,加算と減算ができます。 BGP4およびBGP4+の経路フィルタリングで使用します。 |
set local-preference |
AS_PATH属性 |
経路のAS_PATH属性を変更します。AS番号の追加だけできます。ピアの送信側AS番号を追加します。 BGP4およびBGP4+の外部ピアで学習・広告した経路の経路フィルタリングで使用します。 |
set as-path prepend count |
COMMUNITIES属性 |
経路のCOMMUNITIES属性を変更します。コミュニティの置き換え・追加・削除ができます。 BGP4およびBGP4+の経路フィルタリングで使用します。 |
set community set community-delete |
ORIGIN属性 |
経路のORIGIN属性を変更します。 BGP4およびBGP4+の経路フィルタリングで使用します。 |
set origin |
OSPFメトリック種別 |
メトリック種別を変更します。 OSPFおよびOSPFv3の広告経路フィルタリングで使用します。 |
set metric-type |
(3) そのほかのフィルタ【OP-BGP】
上記で説明したフィルタのほかに,BGP経路属性を条件とするフィルタを使用できます。ここで説明するフィルタは,route-mapからフィルタ条件として呼び出して使用します。
(a) ip as-path access-list
AS_PATH属性専用のフィルタです。正規表現をフィルタ条件として,AS_PATH属性の文字列表現と比較します。route-mapのmatch as-pathから呼び出して使用します。
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から呼び出して使用します。
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_"