# トラフィック制御 / ポリシーベースルーティング

ポリシーベースルーティング（PBR）は、始点・終点IPv4/IPv6アドレス、TCP/UDPポートなどのさまざまな条件に基づいて、ルーティング対象パケットの転送先（ネクストホップ）を決定する仕組みです。
経路表を用いる通常のIPv4/IPv6ルーティングでは転送先の判断に終点IPアドレスしか使いませんが、ポリシーベースルーティングではエンティティー定義とアプリケーション定義で指定可能なすべての条件を使用できるため、より細やかな経路制御が可能です。
本製品では、「PBRルール」を登録し、ポリシーベースルーティング機能を有効化することで、ポリシーベースルーティングを実現します。
ポリシーベースルーティングの基本的な仕様は次のとおりです。

- PBRルールはIPv4/IPv6あわせて500個まで登録可能
- 各ルールでは対象となるパケットの条件をアプリケーション定義（パケット種別）とエンティティー定義（送信元、宛先）で指定する。
  アプリケーション定義ではDSCP値も条件に指定できる（DSCP値はPBRとQoSでのみサポート）。
- 各ルールではネクストホップを8つまで指定できる。
  使用するネクストホップを決定する方式には次の2種類があります。これは各PBRルールのload-balanceオプションで選択できます。
  - リンクアグリゲーション（load-balance）無効 - 使用可能なネクストホップ1つだけを使用。
    通常時は最初に指定したネクストホップが使われるが、同ネクストホップが使用できなくなった場合は次に指定したネクストホップが使われる。
    また、ネクストホップとして特殊なインターフェース名 null を指定することで、該当パケットを破棄する設定も可能。
  - リンクアグリゲーション（load-balance）有効 - 使用可能なネクストホップ間で各フローを分散。
  Note

  本ページで述べるリンクアグリゲーションはPBRルール内の複数ネクストホップ間で負荷分散を行う機能であり、複数のスイッチポートを束ねるリンクアグリゲーション（IEEE 802.3ad）（ポートトランキング）とは異なります。

- IPv4/IPv6パケットの転送判断は以下の通り。
  1. 通常のIPv4/IPv6経路エントリーにしたがって転送先を決定する。
  2. PBRルールをID順（1～500）に検索し、最初にマッチしたルールで指定されたネクストホップに転送先を変更する。
  3. どのPBRルールにもマッチしなかったパケットは、通常のIPv4/IPv6経路エントリーにしたがって転送する。

Note

ワイヤレスWAN（wwan0）インターフェース上の経路をポリシーベースルーティングで制御することはできません。

なお、PBRルールは、回線状況に応じて複数回線間でトラフィックを分散させるSD-WANロードバランスでも使用します。これについては、「トラフィック制御」/「SD-WANロードバランス」をご参照ください。
Note

ポリシーベースルーティングとNATを併用した場合、NATの種類やパケットの方向（行き・戻り）によってPBRルールの動作するタイミングがそれぞれ以下のように異なります。

- portfwd の行きのパケット - 宛先IPアドレス変更前
- portfwd の戻りのパケット - 送信元IPアドレス変更前
- masq の行きのパケット - 送信元IPアドレス変更前
- masq の戻りのパケット - 宛先IPアドレス変更前
- portfwd + masq の行きのパケット - 送信元IPアドレスが変更され、宛先IPアドレスが変更される前
- portfwd + masq の戻りのパケット - 宛先IPアドレスが変更され、送信元IPアドレスが変更される前

Note

netmapでNAT後のアドレスに対してPBRを実行することはできません。

## 基本設定

ポリシーベースルーティングの基本的な設定手順を説明します。
ここでは、ネットワーク「172.16.0.0/16」宛ての経路が2つスタティックに登録されているものとします。

    awplus(config)# ip route 172.16.0.0/16 tunnel0
    awplus(config)# ip route 172.16.0.0/16 tunnel1

本製品の初期設定では4経路までのECMP（等コストマルチパス）ルーティングが有効なため、172.16.0.0/16宛てのパケットは前記の2経路にロードバランスされます。ただしこの場合、どのパケットがどちらの経路を通るかは制御できません。
そこで、ポリシーベースルーティング機能を利用して、192.168.10.0/24から172.16.0.0/16に宛てたパケットはtunnel0側の経路を、192.168.20.0/24から172.16.0.0/16に宛てたパケットはtunnel1側の経路を使うよう設定してみます。

1. PBRルールはアプリケーションとエンティティーを使って定義するため、最初にこれらを定義します。
   ここでは、送信元「192.168.10.0/24」、「192.168.20.0/24」と宛先「172.16.0.0/16」を識別するためのエンティティーを定義します。

       awplus(config)# zone local
       awplus(config-zone)# network net10
       awplus(config-network)# ip subnet 192.168.10.0/24
       awplus(config-network)# exit
       awplus(config-zone)# network net20
       awplus(config-network)# ip subnet 192.168.20.0/24
       awplus(config-network)# exit
       awplus(config-zone)# exit
       awplus(config)# zone remote
       awplus(config-zone)# network net
       awplus(config-network)# ip subnet 172.16.0.0/16
       awplus(config-network)# exit
       awplus(config-zone)# exit

   Note

   エンティティー定義、アプリケーション定義の詳細については、「UTM」/「エンティティー定義」、「UTM」/「アプリケーション定義」をご覧ください。

2. ポリシーベースルーティングの設定を行うため、policy-based-routingコマンドでポリシーベースルーティングモードに移動します。

       awplus(config)# policy-based-routing

3. PBRルールを登録します。
   IPv4の場合はip policy-routeコマンドを、IPv6の場合はipv6 policy-routeコマンドを使います。
   ここではIPv4用のip policy-routeコマンドを使っていますが、パケットの種類（アプリケーション）には関知せず、すべてのIPv4パケットを対象とするため、matchパラメーターは省略しています（明示的に「match any」と指定しても同じです）。

       awplus(config-pbr)# ip policy-route from local.net10 to remote.net nexthop tunnel0
       awplus(config-pbr)# ip policy-route from local.net20 to remote.net nexthop tunnel1

4. ポリシーベースルーティングを有効にします。これには、policy-based-routing enableコマンドを使います。

       awplus(config-pbr)# policy-based-routing enable

設定は以上です。
ポリシーベースルーティングの有効・無効とPBRルールの一覧はshow pbr rules briefコマンドで確認できます。

    awplus# show pbr rules brief

PBRルールの詳細はshow pbr rulesコマンドで確認できます。

    awplus# show pbr rules

IPv4のPBR設定を通常のIP経路とともに確認するには、show ip pbr routeコマンドを使います。

    awplus# show ip pbr route

IPv6のPBR設定を通常のIPv6経路とともに確認するには、show ipv6 pbr routeコマンドを使います。

    awplus# show ipv6 pbr route

## アプリケーションコントロール（DPI）を併用する

PBRルールの条件としてDPIアプリケーションを使用する場合は、以下の点にご注意ください。
アプリケーションコントロール（DPI）では、各アプリケーション固有の通信パターンを検出するために一定量のパケットを検査する必要があることから、特定トラフィックに対する判定が「undecided」（未判別）→「HTTP一般」→「特定アプリケーション」のように段階的に行われる場合があります。その場合、該当トラフィックがマッチするPBRルールも変化し、結果的に同一フローに属するパケットの転送経路が途中で変動する可能性があります。
PBR・DPI併用時の意図せぬ経路変動を防ぐには、以下の設定を追加してください。

- ポリシーベースルーティングにおいて、個々のトラフィックフローのアプリケーション判定をフローごとに一回だけ行うよう設定する。これには、ポリシーベースルーティングモードのapplication-decisionコマンドでonce-onlyを指定します。

      awplus(config)# policy-based-routing
      awplus(config-pbr)# application-decision once-only

- DPI学習機能を有効にする。これには、DPIモードのlearningコマンドを使います。

      awplus(config)# dpi
      awplus(config-dpi)# learning

単にapplication-decisionの設定をonce-onlyに変更しただけでは多くのフローが「未判別（undecided）」扱いとなり、DPIによるアプリケーション判定がほとんど利用されなくなってしまいますが、あわせて DPI学習機能（learningコマンド）を有効にすれば、学習済みのアプリケーションについては1パケット目から判別が可能になるため、該当アプリケーション用のPBRルールにしたがった転送が可能になります。