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

プレフィクスリストでルート情報をフィルタするための設定手順は次の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> : サブネットマスクの長さ

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

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

プレフィクスリストの例

次の「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」などさまざまあります。

図 プレフィクスリストでルート指定の例
図 プレフィクスリストでルート指定の例

暗黙のdenyに注意

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

プレフィクスリストの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の条件の注意

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

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

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

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

ルーティングプロセスはインタフェースと関連付けられます。ルーティングプロセスに関連付けられたインタフェースでルート情報を送受信するタイミングでプレフィクスリストのフィルタをかけることができます。設定するには、ルーティングプロセスのコンフィグレーションモードで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> : 適用するプレフィクスリストの名前

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

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

プレフィクスリストによるルートフィルタの確認を行うには、以下のような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 prefix-list

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

#show ip route

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


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


関連記事

「ネットワークのおべんきょしませんか?」内の記事を検索

IPルーティング応用