# トラフィック制御 / SD-WANロードバランス

SD-WANロードバランスは、複数の回線（インターフェース）を利用してトラフィック負荷を分散させる機能です。
本機能は、VPNをはじめとする各種回線（インターフェース）のジッター、レイテンシー、パケットロスを監視して回線状況を評価するリンク監視機能と、既存のポリシーベースルーティング（PBR）機能を組み合わせることで実現します。PBRの基本機能により、始点・終点アドレスだけでなく、アプリケーションごとの制御も可能です。
本機能はPBRとリンク監視機能を組み合わせて実現しますので、以下では「SD-WANロードバランス」を、「PBRルール」のネクストホップに「リンク監視グループ」と「リンク性能プロファイル」を指定している場合という意味で使用します。
本解説編ではおもにリンク監視機能の設定について述べます。PBRの詳細については「トラフィック制御」/「ポリシーベースルーティング」をご参照ください。
SD-WANロードバランス機能の基本仕様は次のとおりです。

- SD-WANロードバランスでは、複数回線（インターフェース）間でトラフィックを分散させることが可能です。
- IPsecで暗号化されたトンネルにおいても、アプリケーションコントロール（DPI）を利用してトラフィックを分類することが可能です。
- ロードバランスはフロー単位で行われます。1つのフローが同時に複数の回線を使用して送信されることはありません。
- 各フローの送出回線を決定する方式には次の2種類があります。これはリンク監視グループモードのload-balancingコマンドで選択できます。
  - リンクアグリゲーション（load-balancing）無効 - リンク監視グループ内でもっとも状況のよい回線1本だけを使用
  - リンクアグリゲーション（load-balancing）有効 - リンク監視グループ内でgood（良）と判定されている回線間で各フローを分散
  Note

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

- ロードバランス対象回線（トンネルインターフェースなど）の下位層（PPP、Ethernetなど）は別途冗長化してください（例：複数の異なるISPに接続する、VRRPを使う、など）。

## 基本設定

SD-WANロードバランスの設定は、リンク監視機能、PBRルールの順に行います。
以下、それぞれの手順について説明します。

### リンク監視機能

リンク監視機能は、Ping（ICMP Echo）パケットを使って各回線の状況を継続的に監視し、ジッター、レイテンシー、パケットロス等の情報を収集する機能です。
SD-WANロードバランスでは、この情報をポリシーベースルーティング（PBR）のネクストホップ選択時に使用することで、回線の状況に応じたトラフィック分散を実現します。
リンク監視機能の設定は次の流れで行います。

1. 使用する回線（インターフェース）ごとに、調査パケットの送信先を「リンク監視プローブ」として定義します。
   これには、linkmon probeコマンドでプローブの名前を指定し、destinationコマンドで調査パケットの送信先を指定します。
   また、作成直後のプローブは無効状態なため、enableコマンドで有効化します。

       awplus(config)# linkmon probe name TUNNEL1 type icmp-ping
       awplus(config-linkmon-probe)# destination 172.16.0.1
       awplus(config-linkmon-probe)# enable
       awplus(config-linkmon-probe)# exit
       awplus(config)# linkmon probe name TUNNEL2 type icmp-ping
       awplus(config-linkmon-probe)# destination 172.17.0.1
       awplus(config-linkmon-probe)# enable
       awplus(config-linkmon-probe)# exit

   Note

   調査パケットの始点アドレスを明示的に設定するには、sourceコマンドを使います。

       awplus(config-linkmon-probe)# source 172.16.0.2

   また、調査パケットの送出インターフェースを明示的に設定するには、egress interfaceコマンドを使います。

       awplus(config-linkmon-probe)# egress interface tunnel0

   Note

   監視対象がIPv6アドレスのときは、次のようにip-versionコマンドでIPバージョン6を指定する必要があります。

       awplus(config)# linkmon probe name V6TUNNEL1 type icmp-ping
       awplus(config-linkmon-probe)# ip-version 6
       awplus(config-linkmon-probe)# destination 2001:db8::1
       awplus(config-linkmon-probe)# enable
       awplus(config-linkmon-probe)# exit

2. 各回線の状況を評価するための基準を「リンク性能プロファイル」として定義します。
   これには、linkmon profileコマンドでプロファイルを作成し、latency bad-above、jitter bad-above、pktloss bad-aboveコマンドでしきい値を設定します。また、preferenceコマンドで優先的に使う情報を指定することもできます。

       awplus(config)# linkmon profile tunnelquality
       awplus(config-linkmon-profile)# latency bad-above 100
       awplus(config-linkmon-profile)# jitter bad-above 30
       awplus(config-linkmon-profile)# pktloss bad-above 1.0
       awplus(config-linkmon-profile)# preference pktloss
       awplus(config-linkmon-profile)# exit

3. ロードバランス対象の回線を「リンク監視グループ」として束ねます。これには、linkmon groupコマンドでグループを作成し、memberコマンドで各回線に対応するネクストホップアドレスとリンク監視プローブを指定します。
   load-balancingコマンドの有無により、グループ内の回線をどのように使うかが異なります。
   - load-balancing無効 - もっとも状況のよい回線1本だけを使用する

         awplus(config)# linkmon group GROUP1
         awplus(config-linkmon-group)# member 10 destination 172.16.0.1 probe TUNNEL1
         awplus(config-linkmon-group)# member 20 destination 172.17.0.1 probe TUNNEL2
         awplus(config-linkmon-group)# exit

   - load-balancing有効 - good（良）と判定されている回線間で各フローを分散する

         awplus(config)# linkmon group GROUP1
         awplus(config-linkmon-group)# member 10 destination 172.16.0.1 probe TUNNEL1
         awplus(config-linkmon-group)# member 20 destination 172.17.0.1 probe TUNNEL2
         awplus(config-linkmon-group)# load-balancing
         awplus(config-linkmon-group)# exit

   Note

   ネクストホップアドレスとして特殊なインターフェース名 null を指定することもできます。null を指定した場合、リンク監視プローブは指定できません。
   ネクストホップとして null をした回線は、常に利用可能だが常に bad（不良）な回線として扱われます。
   リンク監視グループ内の最後のネクストホップとして null を指定することで、他の回線が利用できない場合に該当パケットを破棄させる設定が可能です。

       awplus(config-linkmon-group)# member 30 destination null

以上でリンク監視機能の設定は完了です。
あとは、PBRルールのネクストホップとして、通常のネクストホップアドレスではなく、「リンク監視グループ」と「リンク性能プロファイル」を指定することで、プロファイルに応じた各回線の評価が行われ、PBRルールにマッチするトラフィックが下記のとおり送信されるようになります。

- リンクアグリゲーション（load-balancing）無効時 - もっとも状況のよい回線1本だけを使用します。
- リンクアグリゲーション（load-balancing）有効時 - good（良）判定の回線間で各フローを分散します。

リンク監視機能の設定は、show linkmon probeコマンドで確認できます。

    awplus# show linkmon probe

回線状況が変化したときにスクリプトを自動実行させるには、リンク監視プローブトリガーを作成します。
type linkmon-probeコマンドでは、該当回線の監視に使用しているリンク監視プローブとリンク性能プロファイルを指定し、さらに回線状況が「good」、「bad」、「unreachable」のどれに遷移したときにスクリプトを実行するかを指定します（「any」を指定すれば、遷移先に関わらず回線状況が変化したときはつねにスクリプトを実行させることが可能です）。

    awplus(config)# trigger 15
    awplus(config-trigger)# type linkmon-probe PROBE1 PROF1 good
    awplus(config-trigger)# script 1 flash:/good.scp

リンク監視プローブトリガーに関する情報は、show linkmon triggerコマンドで確認できます。

    awplus# show linkmon trigger

リンク監視機能が収集した回線状況の履歴を一定数保持し、あとで確認することもできます。

1. linkmon probe-historyコマンドで履歴収集インスタンスを作成し、保存対象のリンク監視プローブ、保存間隔、情報の保持数を指定します。
   たとえば、リンク監視プローブ「TUNNEL1」の履歴情報を60秒に1回、1440回分（1日分）保持する履歴収集インスタンスを定義するには、次のようにします。

       awplus(config)# linkmon probe-history 10 probe TUNNEL1 interval 60 buckets 1440

2. 履歴情報を確認するには、show linkmon probe-historyコマンドを使います。

       awplus# show linkmon probe-history

### PBRルール

リンク監視機能を利用したPBRルールを作成するには、ip policy-routeコマンド、ipv6 policy-routeコマンドのlinkmon-groupパラメーターとlinkmon-profileパラメーターを使います。
たとえば、ゾーン「branch」から「center」へのトラフィックを、リンク監視グループ「GROUP1」所属の回線間で、リンク性能プロファイル「tunnelquality」にもとづく回線状況に応じて負荷分散するには、次のようなPBRルールを作成します。

    awplus(config)# policy-based-routing
    awplus(config-pbr)# policy-based-routing enable
    awplus(config-pbr)# ip policy-route 10 from branch to center linkmon-group GROUP1 linkmon-profile tunnelquality

本PBRルールにおいて、リンク監視グループ「GROUP1」に所属する各回線は、リンク性能プロファイル「tunnelquality」で指定されたしきい値にもとづき、good（良）、bad（不良）の2段階でリアルタイムに評価されます。
そして、このPBRルールにマッチするトラフィックは、リンク監視グループにおけるリンクアグリゲーション（load-balancing）の設定によって、下記のとおり送信されるようになります。

- リンクアグリゲーション（load-balancing）無効時
  その時点でgood（良）と判定されている回線のうち、パケットロス率がもっとも低い回線（ネクストホップ）経由で送信されます（リンク性能プロファイルのpreferenceコマンドでpktlossを指定しているため）。もし2つの回線のパケットロス率が等しい場合は、リンク監視グループにおけるメンバーID（memberコマンドの<1-128>パラメーター）の小さいほうが選択されます。
- リンクアグリゲーション（load-balancing）有効時
  その時点でgood（良）と判定されている回線間で各フローを分散します。good判定の回線が存在する場合preferenceコマンドの設定は使用されません。
  good判定の回線が存在しないときは、bad（不良）判定の中から最善の回線1本だけ選択して使用します。もしそれがnullインターフェースだった場合は該当フローを破棄します。
  good、badを問わず、使用可能な回線が存在しないときは、PBRルールではなく通常の経路表にしたがって転送動作を行います。

リンク監視機能を利用したPBRの設定は、show pbr rulesコマンドで確認できます。

    awplus> show pbr rules
    awplus> show pbr rules 10
    awplus> show pbr rules group GROUP1
    awplus> show pbr rules profile tunnelquality

ポリシーベースルーティングの詳細は「トラフィック制御」/「ポリシーベースルーティング」を、ゾーンなどのエンティティー定義については「UTM」/「エンティティー定義」をご参照ください。