コンフィグレーションガイド Vol.3


30.1.2 フィルタ方法

フィルタは,条件を列挙したものです。経路フィルタリング設定にフィルタの識別子を指定することにより,学習経路フィルタリングや広告経路フィルタリングにフィルタが適用されます。

本装置で経路フィルタリングに使用できるフィルタには,大きく分けて2種類あります。宛先ネットワークだけを条件にフィルタするprefix-listと,主要な経路属性ほとんどを条件にフィルタし,経路属性も変更できるroute-mapです。そのほかに,IPv6アドレスを条件とするipv6 access-list,BGP経路属性を条件とするip as-path access-listとip community-listがあります。ipv6 access-list,ip as-path access-list,ip community-listは,route-mapから呼び出して使います。

フィルタの設定では,フィルタの識別子,フィルタ条件,フィルタ条件と一致したときの動作を指定します。動作には,permit(許可)とdeny(拒否)のどちらかを選択できます。

一つの識別子に対して,フィルタを多数設定することができます。フィルタを評価するときには,指定した識別子のフィルタ設定を設定表示順に評価し,最初に経路とフィルタ条件が一致した設定の動作を採用します。設定表示順は,シーケンス番号を指定することができるフィルタではシーケンス番号順,シーケンス番号を指定できないフィルタでは設定順になります。

指定した識別子について経路と動作条件が一致するフィルタ設定がない場合,denyとみなします。これを暗黙のdenyといいます。暗黙のdenyは,フィルタ条件を設定してあるフィルタの最後にあります。

フィルタ条件の設定が一つもない識別子のフィルタはpermitの動作をします。

〈この項の構成〉

(1) 宛先ネットワークによるフィルタ

(a) ipv6 prefix-list

ipv6 prefix-listは,フィルタ条件としてプレフィックスを指定するフィルタです。ipv6 prefix-listを経路フィルタリングに使用した場合,経路の宛先ネットワークとプレフィックス条件を比較します。

フィルタ条件として,プレフィックスのほかにマスク長の最大値・最小値を指定できます。経路の宛先ネットワークと比較して,包含しかつ宛先ネットワークのマスク長が条件に指定したマスク長の範囲内に収まる場合に,一致したものとみなします。マスク長の範囲を指定しなかった場合,プレフィックス条件のマスク長と完全に一致した場合だけ,一致したものとみなします。ipv6 prefix-listの比較例を次の表に示します。

表30‒1 ipv6 prefix-listとプレフィックスの比較例

比較対象プレフィックス

ipv6 prefix-listの条件

3ffe:5555::/32

マスク長32だけ一致

3ffe:5555::/32 ge 32 le 48

マスク長32以上48以下と一致

3ffe:5555::/32 ge 16 le 48

マスク長16以上48以下と一致

::/0

×

×

×

3ffe::/16

×

×

3fff::/16

×

×

×

3ffe:5555::/32

3ffe:5556::/32

×

×

×

3ffe:5555:feed::/48

×

3ffe:5555:feed:beef::/64

×

×

×

(凡例) ○:一致する ×:一致しない

ipv6 prefix-listは,route-mapのmatch ipv6 addressから経路宛先条件として引用することもできます。比較方法は単体で経路フィルタとして使用した場合と同じです。

ipv6 prefix-listは,route-mapのmatch ipv6 route-sourceから経路学習元ルータ条件として引用することもできます。この場合,経路学習元ルータのIPv6アドレスにマスク長128のマスクを付けたプレフィックスとプレフィックス宛先を比較します。

(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(RIPng)でタグ値を変更するroute-mapを適用し,distribute-list out(RIPng)でタグ値を条件とするroute-mapを適用した場合,まず,redistributeでタグ値を変更し,次にdistribute-list outのroute-mapを適用するときには変更後のタグ値と比較することになります。

表30‒2 route-mapのフィルタ条件

条件となる経路属性

説明

コンフィグレーションコマンド

宛先ネットワーク

prefix-listやaccess-listの識別子を条件として指定し,指定したフィルタで経路の宛先ネットワークをフィルタします。フィルタの動作がpermitの場合,一致したとみなします。denyの場合,一致しないとみなします。

match ipv6 address

ipv6 prefix-list

ipv6 access-list

プロトコル種別

ルーティングプロトコル名を条件として指定し,経路の学習元プロトコル種別と比較します。

match protocol

隣接ルータ

prefix-listやaccess-listの識別子を条件として指定し,指定したフィルタで経路の学習元ルータのアドレスをフィルタします。指定したフィルタの動作がpermitの場合,一致したとみなします。denyの場合,一致しないとみなします。

学習元隣接ルータのアドレスがあるのは,RIPng経路とBGP4+経路だけです。そのほかの経路は,隣接ルータ条件と一致することはありません。

match ipv6 route-source

ipv6 access-list

ipv6 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

経路種別

OSPFv3の経路種別やlocal(network(BGP)の設定による経路であることを示す)をフィルタ条件に指定し,経路のプロトコル依存経路種別と比較します。

match route-type

VRF ID

VRF IDを条件に指定し,経路のVRF IDと比較します。

match vrf

注 インタフェース条件設定に指定した条件がIPv4にもIPv6にも使用しないインタフェースだけである場合,そのインタフェース条件設定はどの経路とも一致するとみなします。

表30‒3 route-mapで変更できる経路属性

変更できる属性

説明

コンフィグレーションコマンド

ディスタンス値

ルーティングテーブル内での経路優先度,ディスタンス値を変更します。学習経路フィルタリングでだけ有効です。

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メトリック種別

メトリック種別を変更します。

OSPFv3の広告経路フィルタリングで使用します。

set metric-type

(3) そのほかのフィルタ

上記で説明したもののほかに,以下のフィルタを経路フィルタリングに使用できます。ここで説明するフィルタは,route-mapからフィルタ条件として呼び出して使います。

(a) ipv6 access-list

ipv6 access-listは主にパケットをフィルタするためのフィルタ設定ですが,経路をフィルタするのに使うこともできます。

ipv6 access-listをroute-mapのmatch ipv6 addressから経路宛先条件として引用した場合,経路宛先ネットワークのアドレスと宛先アドレス条件を比較します。送信元アドレス条件,上位プロトコル種別,ポート番号などの宛先アドレス以外の条件は,すべて無視します。

ipv6 access-listをroute-mapのmatch ipv6 route-sourceから経路学習元ルータ条件として引用した場合,経路学習元ルータIPv6アドレスと宛先アドレス条件を比較します。送信元アドレス条件,上位プロトコル種別,ポート番号などの宛先アドレス以外の条件は,すべて無視します。

(b) ip as-path access-list

AS_PATH属性専用のフィルタです。正規表現をフィルタ条件とし,AS_PATH属性の文字列表現と比較します。route-mapのmatch as-pathから呼び出して使用します。正規表現については,「(e) 正規表現」を参照してください。

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+経路受信時に昇順にソートするため,ソートした結果がフィルタの評価対象となります。

(c) ip community-list standard

COMMUNITIES属性専用のフィルタです。複数のコミュニティをフィルタ条件とし,経路のCOMMUNITIES属性に条件コミュニティがすべて含まれている場合,一致したとみなします。route-mapのmatch communityから呼び出して使用します。

(d) ip community-list expanded

COMMUNITIES属性専用のフィルタです。正規表現をフィルタ条件とし,COMMUNITIES属性の文字列表現と比較します。route-mapのmatch communityから呼び出して使用します。正規表現については,「(e) 正規表現」を参照してください。

COMMUNITIES属性の文字列表現は,コミュニティ値を文字列に変換し,値の小さいものから順に空白文字で接続したものたものです。コミュニティ値の文字列表現を次の表に示します。

表30‒4 COMMUNITIES属性の文字列表現

コミュニティ値

文字列

0xFFFFFF01 (16進)

no-export

0xFFFFFF02 (16進)

no-advertise

0xFFFFFF03 (16進)

local-AS

上記以外

<AS番号>:<下位2オクテット値>

<AS番号>と<下位2オクテット値>はともに10進表記

(e) 正規表現

正規表現は文字列のパターンを記述する方法です。正規表現を使うことで,繰り返しなどのパターンを書くことができます。正規表現は,AS_PATH属性やCOMMUNITIES属性のフィルタ条件指定に使用します。

正規表現で使える文字は,数字・小文字アルファベット・大文字アルファベット・記号(ただし,ダブルクォーテーション「”」は除く)などの通常文字と,特殊文字です。通常文字,「\」と組み合わせた特殊文字は,文字列中の同じ文字と一致します。特殊文字はそれぞれパターンを示します。特殊文字とそのパターンを次の表に示します。

表30‒5 特殊文字とそのパターン

特殊文字

パターン

.

空白を含むすべての単一文字を意味します。

*

前に置いた文字や文字集合の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. ( )

  2. * + ?

  3. 通常文字 . [ ] ^ $

  4. |

コンフィグレーションコマンドや運用コマンドで正規表現を指定する際には,正規表現の前後をダブルクォーテーション(")で囲んで指定してください。

例1
> show ipv6 bgp aspath-regexp "^$"
例2
(config)# ip as-path access-list 10 permit "_100_"