【Fortigate】WAN回線分散(ECMP)FortiOS6.4.2

FortiGate では、複数の WAN 回線(インターネット回線)を使って、冗長化や通信の負荷分散ができます。この記事では、インターネット回線2本に対して、ECMP(Equal Cost Multi-Path)で負荷分散される動きを確認します。検証時の FortiOS は 6.4.2 です。

この記事でわかること
  1. 2本の WAN 回線を ECMP で使うための初期設定
  2. 既定(送信元 IP ベース)の負荷分散の動き
  3. 送信元・宛先 IP ベースに変えたときの動き

検証の構成

FortiGate の port3 を WAN Primary(10.0.2.0/24、ゲートウェイ 10.0.2.1)、port1 を WAN Secondary(10.0.0.0/24、ゲートウェイ 10.0.0.1)につなぎます。LAN 側(port2)には端末 10.0.1.10 があります。2本の回線それぞれにデフォルトルートを設定し、ECMP で負荷分散します。

Internet10.0.1.10port2FortiGateport3port110.0.2.110.0.0.1WAN Primary10.0.2.0/24WAN Secondary10.0.0.0/24ECMPデフォルトルート×2
図1 検証の構成(2本のデフォルトルートで ECMP)

ECMP は、宛先とコストが同じルートが複数あるときに、それらのゲートウェイに通信を分散するしくみです。スタティックルートの場合、コストとは管理距離(distance)と優先度(priority)のことで、どちらも同じにする必要があります。

WAN 回線の分散は、SD-WAN 機能でも実現できます。次の記事もあわせて参考にしてください。

>> 参考記事:【Fortigate】SD-WAN機能(WAN回線分散)の動作確認

初期設定

FortiGate にインターネット回線2本(プライマリ回線、セカンダリ回線)をつないだあと、基本の設定をします。

エイリアスを設定する

わかりやすいように、各ポートにエイリアス(別名)を付けます。ネットワーク ›› インターフェース でインターネット回線のポートを開き、port3 に WAN-Primary、port1 に WAN-Secondary を設定します。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

FortiGate 管理画面画面イメージ
ネットワーク ›› インターフェース ›› インターフェースの編集
プライマリ回線(port3)
名前WAN-Primary (port3)
1エイリアスWAN-Primary
タイプ物理インターフェース
セカンダリ回線(port1)
名前WAN-Secondary (port1)
2エイリアスWAN-Secondary
タイプ物理インターフェース
図2 WAN 回線のポートにエイリアスを付ける(実際の画面ではなく、設定する項目を示したイメージです)

ルーティングを確認する

それぞれのインターネット回線に向けて、デフォルトルートを設定しています。ルーティングテーブルは CLI で確認できます。

FortiGate

# get router info routing-table all
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
       O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
       * - candidate default

Routing table for VRF=0
S*      0.0.0.0/0 [5/0] via 10.0.0.1, port1
                         [5/0] via 10.0.2.1, port3
C       10.0.0.0/24 is directly connected, port1
C       10.0.1.0/24 is directly connected, port2
C       10.0.2.0/24 is directly connected, port3

デフォルトルート(0.0.0.0/0)が、10.0.0.1(port1)と 10.0.2.1(port3)の2つのゲートウェイに向けて、同じ管理距離(5)で入っています。この2本のルートの間で ECMP の負荷分散が行われます。

ファイアウォールポリシーを設定する

LAN から WAN-Primary、LAN から WAN-Secondary へのそれぞれに、すべての通信を許可するポリシーを設定します。どちらの回線を通ったかをログで見分けられるよう、ポリシーは回線ごとに分けます。

アプリケーションを識別できるように、SSL インスペクション(deep-inspection)とアプリケーションコントロールを有効にし、ログはすべてのセッションを記録するようにします。SSL インスペクションとアプリケーションコントロールは、次の記事を参考にしてください。

>> 参考記事:【Fortigate】SSLインスペクション(deep-inspection)設定と動作確認 FortiOS6.2.4
>> 参考記事:【Fortigate】アプリケーションコントロールの設定と動作確認 FortiOS6.2.4

ポリシーの一覧は次のようになります。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› ファイアウォールポリシー
名前送信元宛先サービスアクションNATセキュリティプロファイルログ
⊟ LAN (port2) → WAN-Primary (port3)
1WAN-PrimaryallallALL✓ 許可 有効化済みAPP default
SSL deep-inspection
すべて
⊟ LAN (port2) → WAN-Secondary (port1)
WAN-SecondaryallallALL✓ 許可 有効化済みAPP default
SSL deep-inspection
すべて
図3 回線ごとのファイアウォールポリシー(実際の画面ではなく、表示のポイントを示したイメージです)

動作確認

送信元 IP ベース(既定)での動き

端末から Google や Yahoo! など複数のサイトにアクセスし、ログ&レポート ›› 転送トラフィック を確認します。

FortiGate 管理画面画面イメージ
ログ&レポート ›› 転送トラフィック
送信元宛先アプリケーション名ポリシーID
10.0.1.10(伏せています)Microsoft.Portal1WAN-Primary (5)
10.0.1.10pr-bh-ing.pbp.vip.sg3.yahoo.comYahoo.ServicesWAN-Primary (5)
10.0.1.10(伏せています)LinkedInWAN-Primary (5)
10.0.1.10(伏せています)Microsoft.PortalWAN-Primary (5)
10.0.1.10(伏せています)HTTP.BROWSER_IEWAN-Primary (5)
10.0.1.10nrt20s01-in-f2.1e100.netHTTPS.BROWSERWAN-Primary (5)
10.0.1.10nrt20s01-in-f2.1e100.netGoogle.ServicesWAN-Primary (5)
10.0.1.10nrt20s02-in-f4.1e100.netGoogle.SearchWAN-Primary (5)
図4 送信元 IP ベースでのログ(実際の画面ではなく、表示のポイントを示したイメージです。宛先はホスト名だけを示しています)

すべてのサイトへの通信が、プライマリ回線(WAN-Primary)を使っています。FortiGate の ECMP は、既定では送信元 IP アドレスで経路を選びます(source-ip-based)。そのため、同じ送信元からの通信は同じ経路(今回はプライマリ回線)を使います。

送信元・宛先 IP ベースに変える

プロキシサーバを経由する構成などでは、Web の通信の送信元 IP アドレスがすべて同じになるため、送信元 IP ベースでは1本の回線に偏ってしまいます。このような場合は、送信元 IP アドレスと宛先 IP アドレスの組み合わせで経路を選ぶ source-dest-ip-based にできます。設定は CLI で行います。

FortiGate

# config system settings
(settings) # set v4-ecmp-mode
source-ip-based         Select next hop based on source IP.
weight-based            Select next hop based on weight.
usage-based             Select next hop based on usage.
source-dest-ip-based    Select next hop based on both source and destination IPs.
(settings) # set v4-ecmp-mode source-dest-ip-based
(settings) # end
v4-ecmp-mode経路の選び方
source-ip-based同じ送信元 IP アドレスのセッションは同じ経路を使います(既定)。
weight-basedインターフェースに設定した重みに応じて、セッションを振り分けます。
usage-based設定したしきい値を超えるまで1つのインターフェースを使い、超えた分を次のインターフェースに流します。
source-dest-ip-based送信元 IP アドレスと宛先 IP アドレスが同じセッションは、同じ経路を使います。
source-ip-based(送信元 IP ベース・既定)送信元10.0.1.10宛先 APrimary宛先 BPrimary宛先 CPrimarysource-dest-ip-based(送信元・宛先 IP ベース)送信元10.0.1.10宛先 APrimary宛先 BSecondary宛先 CPrimary
図5 送信元 IP ベースと送信元・宛先 IP ベースの違い(宛先ごとの振り分けは例です)

送信元・宛先 IP ベースでの動き

端末から、もう一度 Google や Yahoo! など複数のサイトにアクセスし、ログ&レポート ›› 転送トラフィック を確認します。

FortiGate 管理画面画面イメージ
ログ&レポート ›› 転送トラフィック
送信元宛先アプリケーション名ポリシーID
10.0.1.10(伏せています)Yahoo.ServicesWAN-Primary (5)
10.0.1.10(伏せています)Yahoo.ServicesWAN-Primary (5)
10.0.1.10nrt20s08-in-f4.1e100.netGoogle.Services1WAN-Secondary (2)
10.0.1.10nrt20s08-in-f4.1e100.netGoogle.ServicesWAN-Secondary (2)
10.0.1.10syd09s06-in-f2.1e100.netGoogle.ServicesWAN-Primary (5)
10.0.1.10nrt20s08-in-f4.1e100.netGoogle.ServicesWAN-Secondary (2)
10.0.1.10(伏せています)Yahoo.ServicesWAN-Primary (5)
10.0.1.10(伏せています)Yahoo.ServicesWAN-Primary (5)
図6 送信元・宛先 IP ベースでのログ(実際の画面ではなく、表示のポイントを示したイメージです。宛先はホスト名だけを示しています)

送信元 IP アドレスは同じですが、宛先 IP アドレスがばらばらなので、プライマリ回線とセカンダリ回線の両方が使われています。同じ宛先(nrt20s08-in-f4.1e100.net)への通信は、毎回同じセカンダリ回線を通っています。

まとめ

項目内容
ECMP の条件宛先とコスト(スタティックルートでは管理距離と優先度)が同じルートが複数あること
既定の方式source-ip-based。同じ送信元の通信は同じ回線を使う
宛先でも分散config system settings で set v4-ecmp-mode source-dest-ip-based
確認回線ごとにポリシーを分け、転送トラフィックのポリシー ID で使われた回線を見る

コメント