目次
プレフィクスリストによるルートフィルタの設定手順
プレフィクスリストでルート情報をフィルタするための設定手順は次の2つです。
- プレフィクスリストでpermitまたはdenyするルート情報を指定する
- プレフィクスリストを適用する
ディストリビュートリストでのルート情報のフィルタを設定する手順とよく似ています。以降で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」を忘れないように気をつけてください。

プレフィクスリストを適用する
プレフィクスリストの適用は、ディストリビュートと同じように考えればいいだけです。適用するタイミングとして、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ルーティング応用
- DNSラウンドロビン方式の負荷分散
- 負荷分散装置(ロードバランサ)の仕組み
- ルーティングプロセス ~ルーティングプロトコルのプログラムの実体~
- 複数のルーティングプロトコルの利用
- 再配送(再配布) ~ルーティングドメイン境界で必須の設定~
- Cisco再配送(再配布)の設定 ~redistributeコマンド~
- Cisco 再配送の設定例 ~OSPFとRIPの双方向再配送~
- 再配送 設定ミスの切り分けと修正 Part1
- 再配送 設定ミスの切り分けと修正 Part2
- 再配送 設定ミスの切り分けと修正 Part3
- 再配送 設定ミスの切り分けと修正 Part4
- 再配送 設定ミスの切り分けと修正 Part5
- オフセットリスト(offset-list) ~ルート情報のメトリックを加算~
- オフセットリストの設定例 RIP
- オフセットリストの設定例 EIGRP
- ルートフィルタの概要
- ルートフィルタのポイント
- ディストリビュートリストによるルートフィルタの設定
- Ciscoディストリビュートリストによるルートフィルタの設定例
- プレフィクスリスト(prefix-list)によるルートフィルタの設定
- Ciscoプレフィクスリストによるルートフィルタの設定例
- Ciscoルートマップ(route-map)の概要 ~何をどう処理するか~
- Ciscoルートマップの設定
- Ciscoルートマップによる再配送時のルート制御の設定例
- ポリシーベースルーティングの設定例
- GREトンネルインタフェース ~仮想的なポイントツーポイント接続~
- GREトンネルインタフェースの設定例
- GREトンネルの注意点 ~フラッピングしないように~
- ルート制御 ケーススタディ Part1
- ルート制御 ケーススタディ Part2
- ルート制御 ケーススタディ Part3
- VRF/VRF-Liteの概要 ~仮想的にルータを分割する~
- VRFの設定と確認コマンド [Cisco]
- VRF-Liteによるレイヤ3VPNの設定例 [Cisco]
- tunnel vrfコマンド
- tunnel vrfコマンドの設定例