ルートマップの設定手順

ルートマップ(route-map)の設定手順は、以下の2つです。

ルートマップを作成
ルートマップの用途を明確にして、処理の対象と処理内容を定義する
ルートマップの適用
用途に応じて、作成したルートマップを適用する

ルートマップは作成しただけではまったく意味がありません。作成したルートマップを用途に応じて適用しなければいけないことに注意してください。ルートマップの用途に応じて、設定する内容も変わってきます。ルートマップの用途を明確にしてから、ルートマップの設定をしてください。

ルートマップの作成

ルートマップを作成するには、グローバルコンフィグレーションモードでroute-mapコマンドを利用します。

ルートマップの作成

(config)#route-map <mat-tag> {permit | deny} [<seq-num>]
(config-route-map)#match <condition>
(config-route-map)#set <action>

<map-tag> : 任意のルートマップ名
permit | deny : permitまたはdenyを指定。ルートマップの用途によって意味が異なる
<seq-num> : シーケンス番号。省略すると「10」
<condition> : 条件
<action> : 追加の処理

<map-tag>でルートマップの名前を指定します。ルートマップの内容をわかりやすく反映している名前をつけるのが望ましいです。そのあとにpermitまたはdenyを指定します。

permit | deny

permitとdenyの意味は、ルートマップの用途によって変わってくるので注意してください。たとえば、PBRで利用するときには、permitは「ポリシーベースルーティングする」、denyは「ポリシーベースルーティングではなく通常のルーティングをする」という意味です。BGPネイバーに対してルートマップを適用しているときには、permitはBGPルートを許可する、denyはBGPルートを拒否するという意味です。

設定するときにpermitまたはdenyを省略してもOKです。省略すると自動的にpermitになります。

matchの設定

処理する対象を特定するためにmatchのあとに条件<condition>を指定します。設定できる<condition>はさまざまです。ルートマップの用途に応じた適切な<condition>を指定しなければいけません。たとえば、PBRで利用するルートマップのmatch条件にプレフィクスリストを関連付けても意味がありません。

match条件には、標準/拡張ACLやプレフィクスリストを関連付けることが多くなっています。標準/拡張ACLを関連付けるには、次のように設定します。

match条件 ACLの関連付け

(config-route-map)#match ip address <ACL-num> | <ACL-name>

<ACL-num> : ACL番号
<ACL-name> : ACL名

プレフィクスリストを関連付けるには、次のように設定します。

match条件 プレフィクスリストの関連付け

(config-route-map)#match ip address prefix-list <prefix-list-name>

<prefix-list-name> : プレフィクスリスト名

match条件を複数設定することもできます。matchのあとに横に並べて条件を指定すると、ORの条件です。matchを複数行で縦に並べて設定するとAND条件になります。

図 複数のmatch条件
図 複数のmatch条件

matchの設定を省略すると、「すべて」が処理対象です。ただ、用途によって「すべて」が意味するものも違ってきます。たとえば、PBRでルートマップを利用しているときは、「ルータが受信するすべてのIPパケット」です。BGPネイバーに対してルートマップを適用しているときは、「すべてのBGPルート」です。

setの設定

matchの条件を満たした処理対象に対して、<map-tag>のあとのpermitまたはdenyの処理を行います。permitされた処理対象に対して、追加の処理を行うのがsetコマンドの設定です。setコマンドで設定できる内容もとてもたくさんありますが、用途に応じて適切な設定をしないと意味がありません。PBRで利用するルートマップのsetコマンドで、BGPルートのLOCAL_PREFをセットする設定をしてもまったく意味がありません。

図 permitされた処理対象にsetで追加の処理を行う
図 permitされた処理対象にsetで追加の処理を行う

複数の処理の設定

コマンドフォーマットの3行でルートマップの1つの処理です。matchで処理対象を決めて、permitまたはdenyとsetで処理内容を決めています。複数の処理の設定は<seq-num>を変えて、同様に設定をすればOKです。<seq-num>が小さい順に処理が行われていきます。

そして、ACLやプレフィクスリストと同様にルートマップにも暗黙のdenyが存在していることにも気をつけてください。少なくとも1つはpermitとなるシーケンスの処理が必要です。

図 ルートマップの処理の順序
図 ルートマップの処理の順序

ルートマップのpermit/denyとmatchで関連付けるACLなどのpermit/deny

ルートマップの<map-tag>の後ろのpermit/denyとmatchのあとに関連付けるACLなどのpermit/denyもルートマップのややこしいところです。

matchのあとに関連付けるACLやプレフィクスリストのpermit/denyは、match条件を満足している(permit)かしていない(deny)かという意味です。そして、match条件を満足した対象は、<map-tag>の後ろのルートマップのpermit/denyによって処理されます。match条件を満足してない対象は、そのシーケンスの処理は行わず、次のシーケンスを見ます。

ルートマップの処理の対象をルート情報として簡単なルートマップの例「test」を考えます。標準ACLでネットワークアドレスをチェックしてルート情報を特定するものとします。

route-map test deny 10
 match ip address 1
route-map test permit 20
 match ip address 2
!
access-list 1 permit 192.168.1.0
access-list 2 deny 172.16.1.0
access-list 2 permit 172.16.2.0

そして、以下の5つのルート情報を例として考えます。

  • 192.168.1.0/24
  • 192.168.2.0/24
  • 172.16.1.0/24
  • 172.16.2.0/24
  • 10.1.1.0/24

「192.168.1.0/24」は、シーケンス10のACL1でpermitされるのでmatch条件を満足します。そして、シーケンス10はdenyなので、192.168.1.0/24はdenyの処理です。

「192.168.2.0/24」はシーケンス10のACL1でもシーケンス20のACL2でもpermitされません。暗黙のdenyでdenyされます。

「172.16.1.0/24」はシーケンス20のACL2の1行目でdenyされます。match条件を満足しません。結局は暗黙のdenyでdenyされます。

「172.16.2.0/24」は、シーケンス20のACL2の2行目でpermitされるのでmatch条件を満足します。シーケンス20はpermitなのでpermitの処理です。

「10.1.1.0/24」はシーケンス10のACL1でもシーケンス20のACL2でもpermitされないので、暗黙のdenyによってdenyされます。

図 ルートマップのpermit/denyとACLのpermit/denyの例
図 ルートマップのpermit/denyとACLのpermit/denyの例

ルートマップの適用

冒頭でも触れていますが、ルートマップは作成しただけではまったく意味がありません。用途に応じて、適切に適用しなければいけません。以下で主なルートマップの適用コマンドについて解説します。

ルートマップの適用 PBR(Policy Based Routing)

ルートマップをPBRで利用するときには、ルータのインタフェースコンフィグレーションモードで次のコマンドを入力します。

ルートマップの適用 PBR

(config)#interface <interface-name>
(config-if)#ip policy route-map <map-tag>

<interface-name> : インタフェース名
<map-tag> : 適用するルートマップ名

図 ルートマップの適用 PBR
図 ルートマップの適用 PBR

ルータ自身が生成するIPパケットに対してPBRを行うためにルートマップを適用するときにはグローバルコンフィグレーションモードで次のコマンドを入力します。

ルータ自身が生成するパケット PBR

(config)#ip policy route-map <map-tag>

<map-tag> : 適用するルートマップ名

ルートマップの適用 NAT

NAT変換対象パケットを指定するためにルートマップを利用するときには、ip nat inside sourceコマンドでルートマップを適用します。

ルートマップの適用 NAT

(config)#ip nat inside source route-map <map-tag> …

<map-tag> : 適用するルートマップ名

図 ルートマップの適用 NAT
図 ルートマップの適用 NAT

ルートマップの適用 BGPネイバー

特定のBGPネイバーと送受信するBGPルートに対してフィルタしたりアトリビュートを付加するためには、以下のコマンドでルートマップを適用します。

ルートマップの適用 BGPネイバー

(config)#router bgp <AS>
(config-router)#neighbor <ip-address> route-map <map-tag> {in|out}

<AS> : AS番号
<ip-address> : BGPネイバーのIPアドレス
<map-tag> : 適用するルートマップ名
in | out : inはBGPルート受信時。outはBGPルート送信時

図 ルートマップの適用 BGPネイバー
図 ルートマップの適用 BGPネイバー

ルートマップの適用 再配送

ルーティングプロセス間で再配送するときにルートマップを利用するには、redistributeコマンドの中でルートマップを適用します。

ルートマップの適用 再配送

(config)#router <protocol1>
(config-router)#redistribute <protocol2> route-map <map-tag>

<protocol1> : 再配送先のルーティングプロセス
<protocol2> : 再配送元のルーティングプロセス
<map-tag> : 適用するルートマップ名

図 ルートマップの適用 再配送
図 ルートマップの適用 再配送

IPルーティング応用