# ポリシーベースルーティング

## 1. 機能概要

本製品は、ポリシーベースルーティング機能を提供します。

ポリシーベースルーティングとは、通常の IP ルーティングのように宛先 IP アドレスだけを元に転送先を決定するのではなく、それ以外のさまざまな情報を用いてパケット（ユニキャスト）のルーティングを制御する機能です。
ポリシーベースルーティングは、複数の通信が発生する場合に有効な技術です。通常のルーティングでは、同一ネットワークアドレス宛のパケットは同じ経路へ転送するため、回線が混雑しやすくパケットのロスや遅延の可能性が高くなります。ポリシーベースルーティングでは、トラフィックの種類（宛先ポート番号）に応じて最適な経路へ転送することで重要なパケットのロスや遅延を防ぐことができます。

本製品では、次のような情報を用いてパケットのルーティングを行うことができます。

- 送信元/宛先 IPv4 アドレス

- IP プロトコル種別

- 送信元/宛先 TCP/UDP ポート番号

- 送信元/宛先 MAC アドレス

- 送信元 IPv6 アドレス

## 2. 用語の定義

PBR

Policy Based Routing の略。

アクセスリスト（ACL）

通信アクセスを制御する（フレームの許可・拒否を決める）ためのリスト。

ルートマップ

アクセスリストによる条件指定と、条件に合致した際に実行する処理の組み合わせを要素（エントリー）としたリスト。

- ルートマップとエントリーの概念

## 3. 機能詳細

PBR の設定はルートマップをインターフェースへ適用することで行います。

PBR の設定手順を以下に示します。

1. ルートマップを生成

2. ルートマップへ適用条件と処理内容を登録

3. インターフェースへルートマップを適用

以下、各機能の詳細を説明します。

### 3.1. ルートマップの生成

ルートマップ（およびエントリー）は route-map コマンドで生成します。また、 route-map コマンドでは生成と同時にルートマップモードへの遷移も行います。
ルートマップモードではエントリーに対し、適用条件、および処理内容を設定できます。
本製品ではルートマップを最大 4094 個まで生成できます。また、一つのルートマップに対しエントリーを最大 64 個まで持つことができます。

### 3.2. 適用条件と処理内容の設定

エントリーへの適用条件の設定は match コマンドで、処理内容の設定は set コマンドで行います。
それぞれのコマンドで指定可能なパラメータを以下に示します。

適用パケット種別 | match | set
--- | --- | ---
IPv4 パケット | IPv4 アクセスリスト MAC アクセスリスト | IPv4 ネクストホップ（転送先） ドロップ（破棄）
IPv6 パケット | IPv6 アクセスリスト | IPv6 ネクストホップ（転送先） ドロップ（破棄）

- アクセスリストによる条件判定
  パケットを受信した際アクセスリストに複数のエントリー（条件）が存在する場合、deny エントリーを除くすべてのエントリーについて判定を行います（deny のエントリーは無視します）。
  いずれかのエントリーに合致した場合は set の処理を実行します。いずれのエントリーにも合致しなかった場合は set の処理を実行しません。

### 3.3. インターフェースへの適用

本製品では、VLAN インターフェースに対してのみルートマップを適用できます。また、一つのインターフェースに対しては IPv4 パケット用と IPv6 パケット用の 2 つのルートマップを適用可能です。IPv4 パケット用は ip policy route-map コマンドで、IPv6 パケット用は ipv6 policy route-map コマンドで適用できます。

インターフェースに適用できるルートマップの数には、ハードウェアリソースの都合上、下記 2 つの制限があります。

1. アクセスリストの制御条件数による制限

2. ネクストホップ数による制限

以下、各制限の詳細について説明します。

- アクセスリストの制御条件数による制限
  インターフェースにルートマップを適用すると "アクセスリストに登録されている制御条件の数だけ" リソースを消費します。
  本製品では、全インターフェースの合計で制御条件を 最大で6112個 まで登録できます。
  このリソースは ACL や VLAN Access Map、Dynamic VLAN、QoS と共有しているため、これらが設定されている場合、適用可能数がその分だけ減少します。

- ネクストホップ数による制限
  ネクストホップが指定されているルートマップをインターフェースに適用すると上記とは別のリソースを消費します。
  本製品では、 最大 512 個 までのネクストホップを登録できます。
  このリソースは新しいネクストホップを登録するたびに消費するため、他のインターフェースで既に同じネクストホップが適用されている場合やドロップが指定された場合にはリソースを消費しません。

#### 3.3.1. リソース消費タイミング

ルートマップがリソースを消費するタイミングは、コマンドによるインターフェースへ適用時ではなく、適用したインターフェースおよびネクストホップがリンクアップした際（適用時にリンクアップ済みの場合はコマンドの直後）になります。
コマンド実行時にはリソースを消費しないためリソース不足でもコマンド自体は成功し、実際にリソースを消費するタイミングで内部的にエラーとします（エラーログを残します）。
保守者はこのエラーが発生することがないようリソース消費量を計算して運用する必要があります。

### 3.4. 受信パケットのルーティング

ルートマップが適用されたインターフェースでパケットを受信した場合、ルートマップの設定に従ってパケットを転送します。
IPv4 パケットを受信した場合は ip policy route-map コマンドで適用したルートマップに、
IPv6 パケットを受信した場合は ipv6 policy route-map コマンドで適用したルートマップに従います。

ルートマップに複数のエントリーが存在する場合は、シーケンス番号順に処理します。
適用条件に合致した時点で処理を実行し、シーケンス処理を終了します（以降のシーケンスは無視します）。

例として、以下のルートマップの処理を説明します。

    route-map 1 permit 10
      match A
      set ip next-hop A.B.C.D

    route-map 1 permit 20
      match B

    route-map 1 permit 30
      set ip next-hop E.F.G.H

    route-map 1 deny 40
      match C
      set ip next-hop I.J.K.L

    route-map 1 permit 50
      match D
      set interface null

1. シーケンス番号 10

   - 条件 A に合致した場合、ネクストホップ A.B.C.D に転送

     - ネクストホップが ARP テーブルに存在しない場合は通常のルーティング機能を介して転送

2. シーケンス番号 20

   - set がないため無効なエントリーとみなし設定を無視（何もしない）

3. シーケンス番号 30

   - match がないため無効なエントリーとみなし設定を無視（何もしない）

4. シーケンス番号 40

   - 条件 C に合致した場合、deny エントリーでは通常のルーティング機能を介して転送

     - deny エントリーに set が存在しても無視

5. シーケンス番号 50

   - 条件 D に合致した場合、パケットを破棄

6. 暗黙の deny

   - ルートマップには暗黙の deny エントリーが存在するため、すべてのパケットを通常のルーティング機能を介して転送

なお、IPv4 パケットを対象として適用したルートマップに IPv6 用のエントリーが含まれている場合は無効なエントリーとみなして無視します。その逆（IPv6 パケットを対象とした場合の IPv4 用エントリー）も同様です。

### 3.5. PBR 機能の有効化・無効化

PBR 機能は pbr enable コマンドで有効化、 pbr disable コマンドで無効化できます。
工場出荷時、PBR 機能は 有効 となっています。 no pbr コマンドでは初期状態である 有効 に戻します。

PBR 機能を無効化した場合でも PBR 関連の設定は消えないため、再度有効化することで無効化前の状態に復元することができます。

## 4. 関連コマンド

関連コマンドについて、以下に示します。
コマンドの詳細は、コマンドリファレンスを参照願います。

操作項目 | 操作コマンド
--- | ---
ルートマップの生成 | route-map
ルートマップの説明文の設定 | description
ルートマップエントリーへの適用条件設定 | match access-list
ルートマップエントリーへの処理内容 (IPv4 転送先) 設定 | set ip next-hop
ルートマップエントリーへの処理内容 (IPv6 転送先) 設定 | set ipv6 next-hop
ルートマップエントリーへの処理内容 (パケット破棄) 設定 | set interface null
インターフェースへのルートマップの適用 (IPv4 用) | ip policy route-map
インターフェースへのルートマップの適用 (IPv6 用) | ipv6 policy route-map
PBR 機能の有効化/無効化 | pbr
ルートマップ情報の表示 | show route-map
IPv4 PBR 情報の表示 | show ip route pbr
IPv6 PBR 情報の表示 | show ipv6 route pbr

## 5. コマンド実行例

### 5.1. VLAN インターフェースへのルートマップ適用

#### 5.1.1. IPv4 ネクストホップ設定

VLAN #10 に対して、 宛先ポート番号 80 のパケットを ネクストホップ 192.168.20.2 へ転送するよう設定します。
（それ以外の受信パケットは暗黙の deny エントリーにより通常のルーティング機能を介して転送します。)
使用するアクセスリストの ID は #1、ルートマップの ID は #1000、ルートマップの名前は IPV4_NEXTHOP とします。

1. 通常のルーティングを設定します。

       Yamaha(config)# ip route 0.0.0.0/0 192.168.20.1 (1)
       Yamaha(config)#

   1 | スタティックルートの設定

2. アクセスリスト #1 を生成します。

       Yamaha(config)#access-list 1 permit tcp any any eq 80 (1)
       Yamaha(config)#

   1 | アクセスリストの生成

3. ルートマップ #1000、 シーケンス番号 #10 のエントリーを生成し、 アクセスリスト #1 と ネクストホップ 192.168.20.2 を設定します。

       Yamaha(config)#route-map 1000 permit 10 (1)
       Yamaha(config-route-map)#description IPV4_NEXTHOP (2)
       Yamaha(config-route-map)#match access-list 1 (3)
       Yamaha(config-route-map)#set ip next-hop 192.168.20.2 (4)
       Yamaha(config-route-map)#exit
       Yamaha(config)#

   1 | ルートマップとエントリーの生成
   2 | ルートマップに名前を設定
   3 | 適用条件の設定
   4 | ネクストホップの設定

4. ルートマップ #1000 を VLAN #10 へ適用します。

       Yamaha(config)#interface vlan10
       Yamaha(config-if)#ip policy route-map 1000 (1)
       Yamaha(config-if)#end
       Yamaha#

   1 | ルートマップの適用

5. 適用状態を確認します。

       Yamaha#show ip route pbr
       Policy Routing
       vlan10
         Route Map: 1000, IPV4_NEXTNOP
           10 permit
             match access-list 1
             set ip next-hop 192.168.20.2

#### 5.1.2. IPv6 ネクストホップ設定

VLAN #10 に対して、 送信元 IPv6 アドレス 2000:0:0:10::4/128 のパケットを ネクストホップ 2000:0:0:20::2 へ転送するよう設定します。
（それ以外の受信パケットは暗黙の deny エントリーにより通常のルーティング機能を介して転送します。)
使用するアクセスリストの ID は #3001、ルートマップの ID は #2000、ルートマップの名前は IPV6_NEXTHOP とします。

1. 通常のルーティングを設定します。

       Yamaha(config)# ipv6 route ::/0 2000:0:0:20::1 (1)
       Yamaha(config)#

   1 | スタティックルートの設定

2. アクセスリスト #3001 を生成します。

       Yamaha(config)#access-list 3001 permit 2000:0:0:10::4/128 (1)
       Yamaha(config)#

   1 | アクセスリストの生成

3. ルートマップ #2000、 シーケンス番号 #10 のエントリーを生成し、 アクセスリスト #3001 と ネクストホップ 2000:0:0:20::2 を設定します。

       Yamaha(config)#route-map 2000 permit 10 (1)
       Yamaha(config-route-map)#description IPV6_NEXTHOP (2)
       Yamaha(config-route-map)#match access-list 3001 (3)
       Yamaha(config-route-map)#set ipv6 next-hop 2000:0:0:20::2 (4)
       Yamaha(config-route-map)#exit
       Yamaha(config)#

   1 | ルートマップとエントリーの生成
   2 | ルートマップに名前を設定
   3 | 適用条件の設定
   4 | ネクストホップの設定

4. ルートマップ #2000 を VLAN #10 へ適用します。

       Yamaha(config)#interface vlan10
       Yamaha(config-if)#ipv6 policy route-map 2000 (1)
       Yamaha(config-if)#end
       Yamaha#

   1 | ルートマップの適用

5. 適用状態を確認します。

       Yamaha#show ipv6 route pbr
       Policy Routing
       vlan10
         Route Map: 2000, IPV6_NEXTHOP
           10 permit
             match access-list 3001
             set ipv6 next-hop 2000:0:0:20::2

#### 5.1.3. ドロップ設定

VLAN #10 に対して、 宛先ポート番号 80 の TCP パケットを ネクストホップ 192.168.20.2 へ転送し、 宛先ポート番号 80 以外 の TCP パケットを 破棄 するよう設定します。
（それ以外の受信パケットは暗黙の deny エントリーにより通常のルーティング機能を介して転送します。)
使用するアクセスリストの ID は #2、#3、ルートマップの ID は #3000、ルートマップの名前は DROP とします。

1. 通常のルーティングを設定します。

       Yamaha(config)# ip route 0.0.0.0/0 192.168.20.1 (1)
       Yamaha(config)#

   1 | スタティックルートの設定

2. アクセスリスト #2 を生成します。

       Yamaha(config)#access-list 2 permit tcp any any eq 80 (1)
       Yamaha(config)#

   1 | アクセスリストの生成

3. アクセスリスト #3 を生成します。

       Yamaha(config)#access-list 3 permit tcp any any (1)
       Yamaha(config)#

   1 | アクセスリストの生成

4. ルートマップ #3000、 シーケンス番号 #10 のエントリーを生成し、 アクセスリスト #2 と ネクストホップ 192.168.20.2 を設定します。

       Yamaha(config)#route-map 3000 permit 10 (1)
       Yamaha(config-route-map)#description DROP (2)
       Yamaha(config-route-map)#match access-list 2 (3)
       Yamaha(config-route-map)#set next-hop 192.168.20.2 (4)
       Yamaha(config-route-map)#exit
       Yamaha(config)#

   1 | ルートマップとエントリーの生成
   2 | ルートマップに名前を設定
   3 | 適用条件の設定
   4 | ネクストホップの設定

5. シーケンス番号 #20 のエントリーを生成し、 アクセスリスト #3 と 破棄 を設定します。

       Yamaha(config)#route-map 3000 permit 20 (1)
       Yamaha(config-route-map)#match access-list 3 (2)
       Yamaha(config-route-map)#set interface null (3)
       Yamaha(config-route-map)#exit
       Yamaha(config)#

   1 | エントリーの生成
   2 | 適用条件の設定
   3 | 破棄の設定

6. ルートマップ #3000 を VLAN #10 へ適用します。

       Yamaha(config)#interface vlan10
       Yamaha(config-if)#ip policy route-map 3000 (1)
       Yamaha(config-if)#end
       Yamaha#

   1 | ルートマップの適用

7. 適用状態を確認します。

       Yamaha#show ip route pbr
       Policy Routing
       vlan10
         Route Map: 3000, DROP
           10 permit
             match access-list 2
             set ip next-hop 192.168.20.2
           20 permit
             match access-list 3
             set interface null

## 6. 注意事項

- PBR はユニキャストパケットのみを対象とします。マルチキャストパケット、ブロードキャストパケットは通常のルーティングにしたがって転送します。

- プライベート VLAN、およびボイス VLAN には PBR を適用できません。

- PBR 機能はリソースの都合上、ダイナミック VLAN と同時に適用することができません。同じポートに対してダイナミック VLAN と PBR が同時に設定された場合、ダイナミック VLAN の処理を優先するため PBR は機能しません。

- フラグメントパケットは正しく条件判定できない場合があります。具体的には、条件にレイヤー 4 の情報（送信元ポート番号、宛先ポート番号、TCP の各種フラグ）が含まれる場合、2 番目以降のフラグメントパケットにそれらの情報が含まれないため正しい判定ができません。フラグメントパケットを処理する可能性がある場合には条件にレイヤー 4 の情報を含めないようにしてください。

- PBR 機能では自身宛ての受信パケットでも条件に一致すればネクストホップへ転送します。自身宛てのすべての受信パケットを転送したくない（自身で処理したい）場合は、ルートマップのシーケンス番号 1 に自身宛ての受信パケットを通常のルーティングとするエントリー（deny エントリー）を追加してください。

## 7. 関連文書

- トラフィック制御機能: ACL

Search result
No more search results.
There are no topics that match your search query.