Cisco IOS 11.0で導入されたポリシーベースルーティングをしようするとパケットを異なるパスに選択的に通過させるポリシーを実装できます。ポリシーベースルーティングはそれ単体で使うことはあまりないといえど、ルーティングの経路制御やQoS関連などで頻繁に使うものでありしっかりと理解しておきたい部分です。
■route-mapコマンド
同じルートマップ名を持つ一連のroute mapステートメントは1つのルートマップとみなされます。ルートマップ内では個々のroute mapステートメントに番号がつけられてるので個別に編集できます。コマンドの詳細を以下に示します。
(config)# route-map map-name [permit | deny] [sequence-number] |
ルートマップは複数のroute mapステートメントで構成できます。ステートメントはアクセスリストと同様、上から下へ処理されます。つまりルートに対して最初に見つかった合致エントリが適用されます。シーケンス番号はルートマップ内の特定の位置にroute mapステートメントを挿入、またはその位置からステートメントを削除するためにしようされます。チェックされる条件を定義するにはルートマップコンフィグレーションモードのmatchコマンドを使います。合致エントリが見つかった場合に実施される措置を定義するにはルートマップコンフィグレーションモードのsetコマンドを使います。
route-map PBR permit 10 match match-A set set-A route-map PBR permit 20 match match-B set set-B = match-Aに合致するものはset-Aを処理 match-Aに合致しなかったものでmatch-Bに合致したものはset-Bを処理 match-Aとmatch-Bに合致しなかったものは何もしない(経路制御ではフィルタされる) |
ステートメントに[deny]を使用すると合致基準を満たすパケットは通常の転送チャネル経由で送信されます。(あて先に基づくルーティング)。ステートメントに[permit]指定されていて全ての合致基準を満たしている場合のみsetコマンドが適用されます。またpermitに当てはまらなかったパケットについてもアクセスリストの最後には暗黙のdenyがあるのであて先ベースのルーティングが行われます。
■matchコマンド
(config-route-map)# match {condition} |
1つのmatchステートメントに複数の条件が含まれることがあります。matchステートメントが合致されたとみなされるためにはそのmatchステートメント内の少なくとも1つの条件が満たされなければなりません。またroute mapステートメントに複数のmatchステートメントが含まれることもあります。route mapステートメントが合致したとみなされるためにはroute mapステートメント内の全てのmatchステートメントが真にならなければなりません。以下、実際のmatchコマンドを論理演算で表してみます。
route-map PBR permit 10 match A B C = A || B || C |
route-map PBR permit 10 match A match B match C = A && B && C |
route-map PBR permit 10 match A B C match D match E = (A || B || C) && D && E |
実際にmatchコマンドで指定できるものについては以下のものがあります。(ヘルプですけど)
(config-route-map)# match ? as-path Match BGP AS path list clns CLNS information community Match BGP community list extcommunity Match BGP/VPN extended community list interface Match first hop interface of route ip IP specific information ipv6 IPv6 specific information length Packet length local-preference Local preference for route mdt-group Match routes corresponding to MDT group metric Match metric of route mpls-label Match routes which have MPLS labels nlri BGP NLRI type policy-list Match IP policy list route-type Match route-type of route source-protocol Match source-protocol of route tag Match tag of route |
良く使うのはmatch ip address [ACL] またはmatch ip address prefix-listあたりでしょうか。またmatchコマンドは省略することも可能であり、その場合はすべてのパケットが対象となります。
■setコマンド
setコマンドで対象のものについて指定した動作を指示できます。これで指定する動作は用途別で様々で一概にこれが多いというのも言うことができません。ヘルプには以下のコマンドがあります。
(config-route-map)# set ? as-path Prepend string for a BGP AS-path attribute automatic-tag Automatically compute TAG value clns OSI summary address comm-list set BGP community list (for deletion) community BGP community attribute dampening Set BGP route flap dampening parameters default Set default information extcomm-list Set BGP/VPN extended community list (for deletion) extcommunity BGP extended community attribute interface Output interface ip IP specific information ipv6 IPv6 specific information level Where to import route local-preference BGP local preference path attribute metric Metric value for destination routing protocol metric-type Type of metric for destination routing protocol mpls-label Set MPLS label for prefix nlri BGP NLRI type origin BGP origin code tag Tag value for destination routing protocol traffic-index BGP traffic classification number for accounting vrf Define VRF name weight BGP weight for routing table |
インターフェース上のポリシーベースルーティングに使用するルートマップを特定するには以下のip policy route-mapコマンドを使用します。
(config-if)# ip policy route-map map-name |
■設定例
下記の例では192.168.2.0/24からのアクセスは172.17.1.2をnext hopに指定しています。ポリシーベースルーティングはパケットが送信されるインターフェースではなく受信するインターフェース上に設定します。
(config)# access-list 1 permit 192.168.2.0 0.0.0.255 (config)# route-map PBR permit 10 (config-route-map)# match ip address 1 (config-route-map)# set ip next-hop 172.17.1.2 (config)# int fa0/0 (config-if)# ip policy route-map PBR |
アクセスリストは1は192.168.2.0/24という送信元アドレスを持つパケットをポリシールーティングの対象としています。アクセスリスト1に合致するパケット(送信元IPが192.168.2.0/24)は宛先に関わらずはネクストホップ172.17.1.2に転送されます。その他のパケットはあて先アドレスに応じて通常どおり転送されます。(アクセスリストの最後には暗黙のdenyがあるのでその他のパケットはアクセスリスト1によって拒否されます)