プレフィクスリストによるルートフィルタの設定手順

プレフィクスリストでルート情報をフィルタするための設定手順は次の2つです。

  1. プレフィクスリストでpermitまたはdenyするルート情報を指定する
  2. プレフィクスリストを適用する

ディストリビュートリストでのルート情報のフィルタを設定する手順とよく似ています。以降で2つの手順について詳しく解説します。

プレフィクスリストでpermitまたはdenyするルート情報を指定する

プレフィクスリストとは、ネットワークアドレスのビットパターンおよびサブネットマスクの範囲によってルートを特定し、特定したルートに対するpermitまたはdenyの動作をまとめたリストです。

プレフィクスリストを設定するには、グローバルコンフィグレーションモードで以下のコマンドを利用します。

プレフィクスリストの設定

(config)#ip prefix-list <list-name> [<seq num>] {permit | deny} <address/length> [ge <ge-length>] [le <le-length>]

<list-name> : プレフィクスリスト名
<seq-num> : シーケンス番号。デフォルトで5単位
<address/length> : ネットワークアドレスのビットパターン
<ge-length> : サブネットマスクの長さ
<le-length> : サブネットマスクの長さ

プレフィクスリストを設定するときには、任意の<list-name>を決めます。内容を反映した名前を決めてください。あまり長くなりすぎないようにしたほうがよいです。

<seq num>で条件の順序を表します。省略すると自動的に5単位で<seq-num>が振られます。<seq-num>を明示的に設定すると、あとから条件を挿入することができます。

特定したルートに対する動作としてpermitまたはdenyのいずれかを決めます。permitはルート情報を許可します。denyはルート情報を拒否します。許可や拒否の動作はプレフィクスリストの適用によって少し意味が異なります。インタフェースに適用した場合は、permitでルートを送受信します。denyならルートを送受信しません。再配送時に適用した場合は、permitでルートを再配送します。denyならルートを再配送しません。

<address/length>でネットワークアドレスがどのようなビットパターンになっているかを決めます。そして、[ge <ge-length>] [le <le-length>]でサブネットマスクの範囲を表しています。これらで対象となるルート情報を特定します。

geはgreater than equalでleはless than equalです。サブネットマスクの長さがどんな範囲になるかを決めます。[ge <ge-length>] [le <le-length>]を省略している場合は、<address/length>でネットワークアドレス/サブネットマスクそのものを表します。

プレフィクスリストの条件と動作の組み合わせを必要な数だけ設定します。複数行のプレフィクスリストは、<seq-num>の順に処理が行われます。

暗黙のdenyに注意

プレフィクスリストでもACLと同様に暗黙のdenyがあります。denyの条件だけしか設定していないと、最終的に暗黙のdenyですべてのルート情報がdenyされてしまいます。プレフィクスリストには、少なくとも1つのpermitの条件が必要です。

プレフィクスリストの例

次の「test」という名前のプレフィクスリストの例を考えます。

(config)#ip prefix-list test seq 5 permit 192.168.1.0/24
(config)#ip prefix-list test seq 10 permit 172.16.0.0/16 ge 25 le 30

seq 5の条件は、geとleが省略されています。すると、「192.168.1.0/24」の部分はネットワークアドレス/サブネットマスクそのもので、192.168.1.0/24のルート情報をpermitするという意味です。

seq 10の条件には、geとleがあります。すると、「172.16.0.0/16」の部分はネットワークアドレスのビットパターンです。「ネットワークアドレスの先頭16ビットが172.16」という意味です。そして、「ge 25 le 30」より、サブネットマスクの範囲が/25~/30です。seq 10の条件でpermitされるルート情報は「172.16.1.128/25」、「172.16.10.32/27」、「172.16.255.192/26」、「172.16.0.0/30」などさまざまあります。

ルート情報の例と「test」のプレフィクスリストによるpermitまたはdenyの動作を以下の表にまとめています。

ルート情報動作seq
192.168.1.0/24permit5
192.168.1.128/25deny暗黙
172.16.1.128/25permit10
172.16.10.32/27permit10
172.17.0.192/26deny暗黙
表 プレフィクスリストの例
図 プレフィクスリストでルート指定の例
図 プレフィクスリストでルート指定の例

プレフィクスリストのpermit any

プレフィクスリストですべてのルート情報をpermitするpermit anyの条件にも注意が必要です。プレフィクスリストのpermit anyの条件は次のように設定します。

(config)#ip prefix-list <list-name> [<seq num>] permit 0.0.0.0/0 le 32

「0.0.0.0/0」はネットワークアドレスの0ビット分を見て「0.0.0.0」ということはすべてのネットワークアドレスを意味します。そして、「le 32」はサブネットマスクが/32以下なので、すべてのサブネットマスクを意味します。注意が必要なのは、以下のように最後の「le 32」を忘れてしまうと、まったく意味が異なってしまうことです。

(config)#ip prefix-list <list-name> [<seq num>] permit 0.0.0.0/0

最後の「le 32」を忘れてしまうと、「デフォルトルート0.0.0.0/0のみpermit」という意味になってしまいます。permit anyの設定について、「192.168.1.0/24だけdenyする」というプレフィクスリストを考えます。正しいプレフィクスリストの設定は次のようになります。

(config)#ip prefix-list test seq 5 deny 192.168.1.0/24
(config)#ip prefix-list test seq 10 permit 0.0.0.0/0 le 32

seq 5で「192.168.1.0/24のルート情報をdeny」にしています。そして、seq 10でpermit anyすなわち「残りのすべてのルート情報をpermit」です。ところが、seq 10のle 32を忘れてしまうと、すべてのルート情報がdenyされるようになってしまう間違ったプレフィクスリストの設定です。

(config)#ip prefix-list test seq 5 deny 192.168.1.0/24
(config)#ip prefix-list test seq 10 permit 0.0.0.0/0

seq 10の「le 32」を忘れると、この条件は「0.0.0.0/0のルート情報をpermit」という意味です。デフォルトルートだけがpermitされ、デフォルトルート以外のルート情報は暗黙のdenyによって最終的にdenyされてしまうことになります。結局、この間違った設定では、すべてのルート情報がdenyです。プレフィクスリストのpermit anyの条件を設定するときには、「le 32」を忘れないように気をつけてください。

図 permit anyの条件の注意
図 permit anyの条件の注意

プレフィクスリストを適用する

プレフィクスリストの適用は、ディストリビュートと同じように考えればいいだけです。適用するタイミングとして、以下があります。

  • インタフェースでルート情報を送受信するとき
  • ルーティングプロセス間で再配送するとき
  • BGPネイバーとの間でルート情報を送受信するとき

インタフェースにプレフィクスリストを適用

ルーティングプロセスはインタフェースと関連付けられます。ルーティングプロセスに関連付けられたインタフェースでルート情報を送受信するタイミングでプレフィクスリストのフィルタをかけることができます。設定するには、ルーティングプロセスのコンフィグレーションモードでdistribute-list prefixコマンドを利用します。

プレフィクスリストの適用 インタフェース

(config-router)#distribute-list prefix <prefix-list-name> {in|out} [<interface-name>]

<prefix-list-name> : 適用するプレフィクスリストの名前
<interface-name> : インタフェース名

<interface-name>を省略すると、ルーティングプロセスに関連付けられているすべてのインタフェースが対象です。

図 インタフェースにプレフィクスリストを適用
図 インタフェースにプレフィクスリストを適用

なお、OSPFではインタフェースから送信するルート情報のフィルタは機能しません。

再配送時にプレフィクスリストを適用

1台のルータで複数のルーティングプロトコル(ルーティングプロセス)を有効にしていて、ルーティングプロセス間で再配送するときにプレフィクスリストを適用できます。これにより、特定のルート情報のみ再配送するといった再配送するルート情報を細かく制御できます。再配送時のプレフィクスリストの適用は、再配送先のルーティングプロセスのコンフィグレーションモードで設定します。

プレフィクスリストの適用 再配送

(config)#router <protocol1>
(config-router)#redistribute <protocol2> …
(config-router)#distribute-list prefix <prefix-list-name> out <protocol2>

<protocol1> : 再配送先のルーティングプロセス
<protocol2> : 再配送元のルーティングプロセス
<prefix-list-name> : 適用するプレフィクスリストの名前

図 再配送時にプレフィクスリストを適用
図 再配送時にプレフィクスリストを適用

BGPネイバーにプレフィクスリストを適用

特定のBGPネイバーと送受信するBGPルートをフィルタするためにプレフィクスリストを適用できます。次のコマンドで、BGPネイバーに対してプレフィクスリストを適用します。

プレフィクスリストの適用 BGPネイバー

(config)#router bgp <AS>
(config-router)#neighbor <ip-address> prefix-list <prefix-list-name> {in|out}

<AS> : AS番号
<ip-address> : ネイバーのIPアドレス

プレフィクスリストによるルートフィルタの確認

プレフィクスリストによるルートフィルタの確認を行うには、以下のようなshowコマンドを利用します。最終的には、ルーティングテーブルに意図したようにルート情報が登録されればよいのですが、各ルーティングプロセスのデータベースの内容も確認したほうがよいです。

確認コマンド概要

#show ip prtocols

プレフィクスリストが適用されているインタフェースを確認します。

#show ip eigrp topology

EIGRPトポロジテーブルに意図したようにルート情報が登録されていることを確認します。

#show ip rip database

RIPデータベースに意図したようにルート情報が登録されていることを確認します。

#show ip ospf database

OSPFへ再配送時にプレフィクスリストを適用している場合、OSPF LSDBに意図したようにルート情報(LSAタイプ5)が登録されていることを確認します。

#show ip bgpBGPテーブルに意図したようにルート情報が登録されていることを確認します。BGPテーブルには数多くのルート情報が存在することが多いので、適切な表示のフィルタをかけてください。

#show ip prefix-list

permit/denyするルート情報を指定するためのプレフィクスリストの内容を確認します。

#show ip route

ルーティングテーブルに意図したようにルート情報が登録されていることを確認します。

関連記事

プレフィクスリストによるルートフィルタの詳細な設定例は以下の記事をご覧ください。

プレフィクスリストによるBGPルートのフィルタについて、以下の記事で詳しく解説しています。



IPルーティング応用