【Fortigate】IPSec + SD-WAN機能の動作確認 FortiOS 7.0.3

前回は、FortiGate の SD-WAN 機能で WAN 回線を負荷分散する設定と動作を確認しました。実際の構成では、拠点からデータセンタへ IPsec で接続し、その IPsec トンネルを SD-WAN のメンバーにする使い方もよくあります。今回は、FortiGate から Azure へ2本の IPsec トンネルを張り、両方を SD-WAN のメンバーにして、性能の良い(レイテンシの低い)トンネルへ通信を振り分ける手順と動作を確認します。

前回の記事

SD-WAN 機能の基本は 【Fortigate】SD-WAN機能(WAN回線分散)の動作確認 を参照してください。

この記事でわかること
  1. Azure(アクティブ/アクティブ)と FortiGate の間に、ISP ごとの IPsec トンネルを2本張る
  2. 2本のトンネルを SD-WAN ゾーンにまとめ、パフォーマンス SLA で監視する
  3. SD-WAN ルールでレイテンシの低いトンネルを選び、回線断で切り替わることを確かめる

検証構成

FortiGate は2本の ISP 回線(wan1 = port3、wan2 = port4)を持ち、それぞれから Azure の仮想ネットワークゲートウェイへ IPsec トンネル(VPN_ISP1、VPN_ISP2)を張ります。LAN 側(port2)の端末 10.0.200.100 から、Azure 上の仮想マシン 172.16.1.4 へ通信します。

AzureVPN_ISP1VPN_ISP2ISP1ISP2FortiGate仮想ネットワークゲートウェイ172.16.1.4172.16.1.0/2410.0.200.100port210.0.200.0/24wan1 / port3wan2 / port4
図1 検証構成(グローバル IP アドレスは省略しています)
機器・セグメント値
FortiGate の LANport2(lan)、10.0.200.0/24。端末は 10.0.200.100
FortiGate の WANwan1(port3)が ISP1、wan2(port4)が ISP2。グローバル IP は(伏せています)
Azure 側仮想ネットワークゲートウェイ(アクティブ/アクティブ)、サブネット 172.16.1.0/24、仮想マシン 172.16.1.4
FortiOS7.0.3

事前設定

対向の VPN 接続先には Azure を使います。Azure との IPsec 接続の基本は、AzureとのVPN(IPSec)接続と動作確認 を参考にしてください。そちらの記事はトンネル1本でしたが、今回は2本張るので、Azure 側の構成をいくつか変えます。

Azure 仮想ネットワークゲートウェイの設定

仮想ネットワークゲートウェイは、アクティブ/アクティブ モードで作ります。アクティブ/アクティブでは、ゲートウェイの2つのインスタンスがそれぞれパブリック IP アドレスを持ち、両方が同時にトンネルを受けます。

画面イメージについて

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

Azure portal(仮想ネットワーク ゲートウェイの作成)画面イメージ
⋮ (中略)
世代Generation1
SKUVpnGw1
1アクティブ/アクティブ モード◉ 有効○ 無効
ゲートウェイ プライベート IP○ 有効◉ 無効
BGP の構成☐
図2 仮想ネットワークゲートウェイの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1アクティブ/アクティブ モード有効。インスタンスごとにパブリック IP アドレスが付き、FortiGate からそれぞれへトンネルを張れる
現在の状況

検証時は SKU に VpnGw1 を使いました。Azure では、可用性ゾーンに対応しない VpnGw1〜5 の SKU は 2025年11月1日以降は新規作成できなくなり、2026年9月以降に廃止される予定と案内されています。これから作る場合は、VpnGw1AZ などの可用性ゾーン対応 SKU を選びます。

あとは、1つ目のトンネルを作ったときと同じ手順で、ローカルネットワークゲートウェイと接続を作ります。ローカルネットワークゲートウェイは、FortiGate の2つの WAN(トンネルの接続元)に合わせて2つ作ります。

Azure portal(ローカル ネットワーク ゲートウェイ ›› 概要)画面イメージ
名前リソース グループ場所IP アドレスアドレス空間
1ISP1RG-IPSec西日本(伏せています)210.0.200.0/24
ISP2RG-IPSec西日本(伏せています)10.0.200.0/24
図3 2つのローカルネットワークゲートウェイ(実際の画面ではなく、2つの概要画面の値をまとめたイメージです)
No.表示意味
1IP アドレスFortiGate 側のトンネルの接続元。ISP1 は wan1、ISP2 は wan2 のグローバル IP アドレス
2アドレス空間FortiGate のローカルサブネット(10.0.200.0/24)。Azure はこの宛先の通信をトンネルへ送る

仮想ネットワークゲートウェイ ›› 接続 にも、ISP1 経由と ISP2 経由の2つの接続を登録します。この時点では、まだ FortiGate 側の設定がないので状態は「不明」です。

Azure portal(仮想ネットワーク ゲートウェイ ›› 接続)画面イメージ
名前状態接続の種類ピア
Fortigate-ISP1不明サイト対サイト (IPsec)ISP1
Fortigate-ISP2不明サイト対サイト (IPsec)ISP2
図4 2つの接続(実際の画面ではなく、表示のポイントを示したイメージです)
補足

アクティブ/アクティブでは、Azure は両方のトンネルを同時に使います。1つのフローの戻り(Azure → FortiGate)がどちらのトンネルを通るかは Azure 側が決めるので、行きと帰りで別のトンネルを通ることがあります。この記事の検証では、ISP1 を Azure のインスタンスの一方、ISP2 をもう一方へつないでいます。

FortiGate の IPsec 設定

参考記事と同じ手順で、VPN ›› IPsec トンネル から2つのトンネル(VPN_ISP1、VPN_ISP2)を作ります。VPN_ISP1 は wan1(port3)、VPN_ISP2 は wan2(port4)にバインドし、それぞれの接続先を Azure ゲートウェイの2つのパブリック IP アドレスにします。この時点では、トンネルはまだダウンのままです。

FortiGate 管理画面画面イメージ
VPN ›› IPsec トンネル
トンネルインターフェースバインディングステータス
VPN_ISP1wan1 (port3) 非アクティブ
VPN_ISP2wan2 (port4) 非アクティブ
図5 IPsec トンネルの一覧(実際の画面ではなく、表示のポイントを示したイメージです)

赤のアイコンと「非アクティブ」は、トンネルがまだ確立していないことを表します。

IPsec 用の SD-WAN ゾーンを作る

2本のトンネルをメンバーにする SD-WAN ゾーンを作ります。ネットワーク ›› SD-WAN ›› SD-WANゾーン で 新規作成 ›› SD-WANゾーン をクリックし、virtual-wan-link-IPSec という名前で作ります。メンバーはあとで追加するので、ここでは空のままにします。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› SD-WANゾーン ›› 新規SD-WANゾーン
1名前virtual-wan-link-IPSec
インターフェースメンバー 
2OKキャンセル
図6 SD-WAN ゾーンの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)

次に、新規作成 ›› SD-WANメンバー をクリックし、トンネルインタフェースをこのゾーンのメンバーにします。VPN_ISP1 を追加したら、VPN_ISP2 も同じように追加します。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› SD-WANゾーン ›› SD-WANメンバーの編集
1インターフェースVPN_ISP1
2SD-WANゾーンvirtual-wan-link-IPSec
ゲートウエイ0.0.0.0
コスト0
プライオリティ0
ステータス◉ 有効化済み○ 無効化済み
3OKキャンセル
図7 SD-WAN メンバーの追加(VPN_ISP1)(実際の画面ではなく、設定項目のポイントを示したイメージです)

しばらくすると、2本のトンネルがアップします。SD-WAN ゾーンの一覧で、virtual-wan-link-IPSec の下にトンネルインタフェースが登録されていることを確認できます。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› SD-WANゾーン
インターフェース
⊞ virtual-wan-link
  SASE
1⊟ virtual-wan-link-IPSec
  └ VPN_ISP1
  └ VPN_ISP2
図8 SD-WAN ゾーンとメンバー(実際の画面ではなく、表示のポイントを示したイメージです)

緑のアイコンは、ゾーンとトンネルインタフェースがアップしていることを表します。virtual-wan-link と SASE は既定で用意されているゾーンで、今回は使いません。

スタティックルートを作る

VPN の対向先のサブネット 172.16.1.0/24 へのスタティックルートを作ります。出力インタフェースには、個々のトンネルではなく SD-WAN ゾーン virtual-wan-link-IPSec を指定します。

FortiGate 管理画面画面イメージ
ネットワーク ›› スタティックルート ›› 新規スタティックルート
自動ゲートウェイ検索○ オフ
1宛先◉ サブネット○ インターネットサービス
172.16.1.0/24
2インターフェースvirtual-wan-link-IPSec
ステータス◉ 有効化済み○ 無効化済み
図9 スタティックルートの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)

ファイアウォールポリシーを作る

LAN から SD-WAN ゾーン(virtual-wan-link-IPSec)へのファイアウォールポリシーを作ります。宛先の Azure_172.16 は、172.16.1.0/24 を登録したアドレスオブジェクトです。端末のアドレスのまま Azure へ届けるため、NAT は無効にします。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› ファイアウォールポリシー ›› 新規ポリシー
名前To_IPSec
1着信インターフェースlan (port2)
発信インターフェースvirtual-wan-link-IPSec
送信元all
2宛先Azure_172.16
スケジュールalways
サービスALL
アクション◉ 許可○ 拒否
インスペクションモード◉ フローベース○ プロキシベース
3NAT○ オフ
図10 ファイアウォールポリシーの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)

端末(10.0.200.100)から Azure 上の仮想マシン(172.16.1.4)へ ping を打ち、疎通を確認します。

端末(10.0.200.100)のコマンドプロンプト画面イメージ
C:\Users\(伏せています)>ping 172.16.1.4 Pinging 172.16.1.4 with 32 bytes of data:1Reply from 172.16.1.4: bytes=32 time=13ms TTL=127Reply from 172.16.1.4: bytes=32 time=13ms TTL=127Reply from 172.16.1.4: bytes=32 time=12ms TTL=127Reply from 172.16.1.4: bytes=32 time=13ms TTL=127 Ping statistics for 172.16.1.4:    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:    Minimum = 12ms, Maximum = 13ms, Average = 12ms
図11 端末から Azure の仮想マシンへの ping(実際の画面ではなく、表示内容のポイントを示したイメージです)

4回とも応答があり、IPsec 経由で端末と仮想マシンの間が通信できています。

SD-WAN ルール

ここまでで、SD-WAN ゾーンとポリシーを作り、IPsec 経由で端末と仮想マシンの間が疎通できるところまで確認できました。ここからは、パフォーマンス SLA で2本のトンネルの状態を監視し、性能の良いトンネルへ振り分ける SD-WAN ルールを作ります。

パフォーマンス SLA を作る

ヘルスチェックの宛先は、Azure 上の仮想マシン 172.16.1.4 にします。ネットワーク ›› SD-WAN ›› パフォーマンスSLA で 新規作成 をクリックします。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› パフォーマンスSLA ›› 新規パフォーマンスSLA
1名前IPSec
2プローブモード◉ アクティブ○ パッシブ○ 優先パッシブ
3プロトコル◉ Ping○ HTTP○ DNS
4サーバ172.16.1.4
5参加インターフェース○ すべてのSD-WANメンバー◉ 指定
VPN_ISP1、VPN_ISP2
SLAターゲット○ オフ
リンクステータス
チェック間隔500 ms
非アクティブまでの失敗回数5
リンク回復までの回数5 check(s)
6OKキャンセル
図12 パフォーマンス SLA の作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前任意。今回は IPSec
2プローブモードアクティブ(FortiGate が自分でプローブを送る)
3プロトコルPing
4サーバヘルスチェックの宛先。172.16.1.4
5参加インターフェース指定を選び、VPN_ISP1 と VPN_ISP2 を選ぶ

リンクステータスは既定値のままです。500ms ごとにチェックし、5回続けて失敗するとそのインタフェースを非アクティブと判断します。

登録はできましたが、172.16.1.4 へのヘルスチェックに応答がなく、どちらのトンネルもダウンのままです。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› パフォーマンスSLA
名前サーバ検知パケットロスレイテンシジッター
IPSec172.16.1.4 VPN_ISP1:
VPN_ISP2:
VPN_ISP1:
VPN_ISP2:
VPN_ISP1:
VPN_ISP2:
図13 パフォーマンス SLA がダウンしている(実際の画面ではなく、表示のポイントを示したイメージです)

赤のアイコンは、ヘルスチェックが失敗していることを表します。端末からの ping は通るのに、ヘルスチェックが通らないのは、送信元のアドレスが違うためです。

パフォーマンス SLA のプローブは、FortiGate 自身が送信元になって送ります。トンネルインタフェースに IP アドレスを付けていない場合、プローブの送信元は LAN 側(10.0.200.0/24)のアドレスになりません。Azure 側は、ローカルネットワークゲートウェイのアドレス空間(10.0.200.0/24)宛ての通信だけをトンネルに戻すので、プローブへの応答が FortiGate に返ってきません。この事象と対処は、Fortinet のナレッジ Technical Tip: SD-WAN performance SLA for IPsec interface shows down にまとめられています。

対処として、SD-WAN メンバーごとにプローブの送信元アドレスを指定します。今回はトンネルが2本あるので、ループバックインタフェースを2つ作り、それぞれのトンネルの送信元にします。Azure 側では、その送信元への応答をトンネルに戻せるよう、ローカルネットワークゲートウェイのアドレス空間にループバックのアドレスを追加します。

AzureVPN_ISP1VPN_ISP2ISP1ISP2FortiGate仮想ネットワークゲートウェイ172.16.1.4172.16.1.0/2410.0.200.100port210.0.200.0/24wan1 / port3wan2 / port41.1.1.12.2.2.2ISP1_LoopbackISP2_Loopback
図14 トンネルごとに、ループバックを送信元にしてヘルスチェックを送る

ループバックインタフェースを作る

ISP1 用に 1.1.1.1/24、ISP2 用に 2.2.2.2/24 のループバックインタフェースを作ります。ネットワーク ›› インターフェース で 新規作成 ›› インターフェース をクリックします。

FortiGate 管理画面画面イメージ
ネットワーク ›› インターフェース ›› 新規インターフェース
1名前ISP1_Loopback
エイリアス 
2タイプループバックインターフェース
VRF ID0
ロールLAN
アドレス
3IP/ネットマスク1.1.1.1/24
図15 ループバックインタフェースの作成(ISP1_Loopback)(実際の画面ではなく、設定項目のポイントを示したイメージです)
名前タイプIP/ネットマスク使うトンネル
ISP1_Loopbackループバックインターフェース1.1.1.1/24VPN_ISP1
ISP2_Loopbackループバックインターフェース2.2.2.2/24VPN_ISP2
注意

1.1.1.1 や 2.2.2.2 は、インターネット上で実際に使われているグローバルアドレスです。Azure のアドレス空間にこれらを入れると、Azure 側からそのアドレス宛ての通信もトンネルへ向かいます。本番では、社内で使っていないプライベートアドレスなど、ほかと重ならないアドレスを選んでください。

SD-WAN メンバーの送信元アドレスを指定する

CLI で、SD-WAN メンバーに送信元アドレスを指定します。show の結果から、edit 3 と edit 4 がトンネルインタフェースのメンバーだとわかります。

FG1

FG1 # config system sdwan
FG1 (sdwan) # config members 
FG1 (members) # show
config members
    edit 1
        set interface "port3"
    next
    edit 2
        set interface "port4"
    next
    edit 3
        set interface "VPN_ISP1"
        set zone "virtual-wan-link-IPSec"
    next
    edit 4
        set interface "VPN_ISP2"
        set zone "virtual-wan-link-IPSec"
    next
end
FG1 (members) # edit 3
FG1 (3) # set source 1.1.1.1
FG1 (3) # next
FG1 (members) # edit 4
FG1 (4) # set source 2.2.2.2
FG1 (4) # end
FG1 (sdwan) # end
FG1 #
設定意味
edit 3 / set source 1.1.1.1メンバー3(VPN_ISP1)から送るヘルスチェックの送信元を 1.1.1.1 にする
edit 4 / set source 2.2.2.2メンバー4(VPN_ISP2)から送るヘルスチェックの送信元を 2.2.2.2 にする
補足

Fortinet のナレッジは、その後、FortiOS 6.4 以降ではトンネルインタフェース自体に IP アドレスを付けてプローブの送信元にする方法を案内しています。メンバーに set source を指定する方法は、6.4 より前のバージョン向けとして書かれています。この記事の検証(FortiOS 7.0.3)では、set source の方法でヘルスチェックがアップしました。

Azure のローカルネットワークゲートウェイにアドレスを追加する

ヘルスチェックは、ISP1 側は 1.1.1.1、ISP2 側は 2.2.2.2 から届きます。Azure がこれらへの応答をトンネルに戻せるよう、ローカルネットワークゲートウェイの 構成 で、アドレス空間に 1.1.1.1/32 と 2.2.2.2/32 を追加して保存します。

Azure portal(ローカル ネットワーク ゲートウェイ ISP1 ›› 構成)画面イメージ
IP アドレス(伏せています)
アドレス空間10.0.200.0/24
11.1.1.1/32
BGP 設定の構成☐
2保存破棄
図16 ローカルネットワークゲートウェイ ISP1 のアドレス空間(実際の画面ではなく、設定項目のポイントを示したイメージです)
ローカルネットワークゲートウェイアドレス空間
ISP110.0.200.0/24、1.1.1.1/32
ISP210.0.200.0/24、2.2.2.2/32

パフォーマンス SLA の状態を確認する

ネットワーク ›› SD-WAN ›› パフォーマンスSLA で IPSec の状態を見ると、ヘルスチェックがアップしています。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› パフォーマンスSLA
名前サーバ検知パケットロスレイテンシジッター
IPSec172.16.1.4 VPN_ISP1: 0.00%
VPN_ISP2: 0.00%
1VPN_ISP1: 11.47ms
VPN_ISP2: 13.71ms
VPN_ISP1: 0.92ms
VPN_ISP2: 1.92ms
図17 パフォーマンス SLA がアップした(実際の画面ではなく、表示のポイントを示したイメージです)

緑のアイコンは、ヘルスチェックが成功していることを表します。このときのレイテンシは、VPN_ISP1 が 11.47ms、VPN_ISP2 が 13.71ms でした。

パケットをトレースすると、VPN_ISP1 と VPN_ISP2 のそれぞれから、ループバックのアドレスを送信元にして ICMP を送受信していることがわかります。

FG1

FG1 # dia sniffer packet any "host 172.16.1.4 and icmp" 4
Using Original Sniffing Mode
interfaces=[any]
filters=[host 172.16.1.4 and icmp]
0.599226 VPN_ISP1 out 1.1.1.1 -> 172.16.1.4: icmp: echo request
0.599266 VPN_ISP2 out 2.2.2.2 -> 172.16.1.4: icmp: echo request
0.610109 VPN_ISP1 in 172.16.1.4 -> 1.1.1.1: icmp: echo reply
0.612036 VPN_ISP2 in 172.16.1.4 -> 2.2.2.2: icmp: echo reply

SD-WAN ルールを作る

パフォーマンス SLA IPSec の結果から、最も性能の良いインタフェースを選ぶ SD-WAN ルールを作ります。ネットワーク ›› SD-WAN ›› SD-WANルール で 新規作成 をクリックします。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› SD-WANルール ›› 新規作成
1名前IPSec
送信元
2送信元アドレスall
ユーザグループ 
宛先
3アドレスAzure_172.16
プロトコル番号○ TCP○ UDP◉ ANY○ 指定する
発信インターフェース
4戦略○ マニュアル
◉ ベストクオリティ
○ 最小コスト(SLA)
○ 帯域幅の最大化(SLA)
5優先するインターフェースVPN_ISP1、VPN_ISP2
Zone preference 
6計測されたSLAIPSec
7クオリティ基準レイテンシ
ステータス◉ 有効○ 無効
図18 SD-WAN ルールの作成(実際の画面ではなく、2つに分かれた画面の設定項目をまとめたイメージです)
No.項目設定内容
1名前任意。今回は IPSec
2送信元アドレスall
3宛先アドレス・プロトコル番号Azure_172.16(172.16.1.0/24 のアドレスオブジェクト)、ANY
4発信インターフェースベストクオリティ。計測したパフォーマンスが最も良いインタフェースを選ぶ
5優先するインターフェースVPN_ISP1 と VPN_ISP2
6計測されたSLASTEP 6 で作った IPSec
7クオリティ基準レイテンシ。レイテンシの低いインタフェースを選ぶ

作ったルールを一覧で見ると、メンバーのうち VPN_ISP1 に選択中の印が付いています。レイテンシが低い VPN_ISP1 が、発信インタフェースとして選ばれています。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› SD-WANルール
ID名前送信元宛先基準メンバー
1IPSecallAzure_172.16レイテンシ1VPN_ISP1 ✔
VPN_ISP2
図19 SD-WAN ルールの一覧(実際の画面ではなく、表示のポイントを示したイメージです)

動作確認

端末(10.0.200.100)から Azure 上の仮想マシン(172.16.1.4)へ連続して ping を打ち、パケットをトレースします。

FG1

FG1 # dia sniffer packet any "host 172.16.1.4 and icmp and host 10.0.200.100" 4
Using Original Sniffing Mode
interfaces=[any]
filters=[host 172.16.1.4 and icmp and host 10.0.200.100]
1.394440 port2 in 10.0.200.100 -> 172.16.1.4: icmp: echo request
1.394464 VPN_ISP1 out 10.0.200.100 -> 172.16.1.4: icmp: echo request
1.406401 VPN_ISP2 in 172.16.1.4 -> 10.0.200.100: icmp: echo reply
1.406415 port2 out 172.16.1.4 -> 10.0.200.100: icmp: echo reply
2.450010 port2 in 10.0.200.100 -> 172.16.1.4: icmp: echo request
2.450032 VPN_ISP1 out 10.0.200.100 -> 172.16.1.4: icmp: echo request
2.462930 VPN_ISP2 in 172.16.1.4 -> 10.0.200.100: icmp: echo reply
2.462945 port2 out 172.16.1.4 -> 10.0.200.100: icmp: echo reply

ICMP echo request は、SD-WAN ルールで選ばれた VPN_ISP1(ISP1 側)から送られています。戻りの echo reply は VPN_ISP2(ISP2 側)から届いています。アクティブ/アクティブの Azure は、戻りの通信にどちらのトンネルを使うかを自分で決めるためです。今回は戻りの経路は制御していません。

では、ISP1 側の回線をダウンさせます。

AzureVPN_ISP1VPN_ISP2ISP1ISP2FortiGate仮想ネットワークゲートウェイ172.16.1.4172.16.1.0/2410.0.200.100port210.0.200.0/24wan1 / port3wan2 / port4
図20 ISP1 側の回線をダウンさせる

FG1

FG1 # dia sniffer packet any "host 172.16.1.4 and icmp and host 10.0.200.100" 4
Using Original Sniffing Mode
interfaces=[any]
filters=[host 172.16.1.4 and icmp and host 10.0.200.100]
1.051686 port2 in 10.0.200.100 -> 172.16.1.4: icmp: echo request
1.051709 VPN_ISP1 out 10.0.200.100 -> 172.16.1.4: icmp: echo request
1.063551 VPN_ISP2 in 172.16.1.4 -> 10.0.200.100: icmp: echo reply
1.063563 port2 out 172.16.1.4 -> 10.0.200.100: icmp: echo reply
2.072118 port2 in 10.0.200.100 -> 172.16.1.4: icmp: echo request
2.072144 VPN_ISP1 out 10.0.200.100 -> 172.16.1.4: icmp: echo request
2.084252 VPN_ISP2 in 172.16.1.4 -> 10.0.200.100: icmp: echo reply
2.084267 port2 out 172.16.1.4 -> 10.0.200.100: icmp: echo reply
3.085930 port2 in 10.0.200.100 -> 172.16.1.4: icmp: echo request
3.085958 VPN_ISP1 out 10.0.200.100 -> 172.16.1.4: icmp: echo request
3.097661 VPN_ISP2 in 172.16.1.4 -> 10.0.200.100: icmp: echo reply
3.097675 port2 out 172.16.1.4 -> 10.0.200.100: icmp: echo reply
4.101497 port2 in 10.0.200.100 -> 172.16.1.4: icmp: echo request
4.101522 VPN_ISP1 out 10.0.200.100 -> 172.16.1.4: icmp: echo request
4.113638 VPN_ISP2 in 172.16.1.4 -> 10.0.200.100: icmp: echo reply
4.113652 port2 out 172.16.1.4 -> 10.0.200.100: icmp: echo reply
5.117265 port2 in 10.0.200.100 -> 172.16.1.4: icmp: echo request
5.117289 VPN_ISP1 out 10.0.200.100 -> 172.16.1.4: icmp: echo request
10.132916 port2 in 10.0.200.100 -> 172.16.1.4: icmp: echo request
10.132947 VPN_ISP2 out 10.0.200.100 -> 172.16.1.4: icmp: echo request
10.145373 VPN_ISP2 in 172.16.1.4 -> 10.0.200.100: icmp: echo reply
10.145390 port2 out 172.16.1.4 -> 10.0.200.100: icmp: echo reply
11.148546 port2 in 10.0.200.100 -> 172.16.1.4: icmp: echo request
11.148565 VPN_ISP2 out 10.0.200.100 -> 172.16.1.4: icmp: echo request
11.161286 VPN_ISP2 in 172.16.1.4 -> 10.0.200.100: icmp: echo reply
11.161296 port2 out 172.16.1.4 -> 10.0.200.100: icmp: echo reply

強調した2行が、VPN_ISP1 から VPN_ISP2 への切り替わりのポイントです。5.117 秒に VPN_ISP1 から送った echo request には応答がなく、次の request は 10.132 秒に VPN_ISP2 から送られ、応答も返っています。

この間、端末からの request そのものが出ていません。Windows の ping は、応答を既定で4秒待ってから次を送るので、端末は応答待ちをしていたと考えられます。失われた ping は1回分で、切り替えはこの約5秒の間に終わっています。SLA の設定は 500ms 間隔で5回失敗するとダウンと判断するので、検知にはおよそ2.5秒かかる計算です。

ネットワーク ›› SD-WAN ›› パフォーマンスSLA で IPSec の状態を見ると、VPN_ISP1 がダウンしています。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› パフォーマンスSLA
名前サーバ検知パケットロスレイテンシジッター
IPSec172.16.1.4 1VPN_ISP1:
VPN_ISP2: 0.00%
VPN_ISP1:
VPN_ISP2: 13.16ms
VPN_ISP1:
VPN_ISP2: 1.01ms
図21 ISP1 断のときのパフォーマンス SLA(実際の画面ではなく、表示のポイントを示したイメージです)

赤のアイコンの VPN_ISP1 はヘルスチェックが失敗し、緑の VPN_ISP2 だけが成功しています。ネットワーク ›› SD-WAN ›› SD-WANルール を見ると、発信インタフェースが VPN_ISP2 に変わっています。

FortiGate 管理画面画面イメージ
ネットワーク ›› SD-WAN ›› SD-WANルール
ID名前送信元宛先基準メンバー
1IPSecallAzure_172.16レイテンシVPN_ISP1
1VPN_ISP2 ✔
図22 ISP1 断のときの SD-WAN ルール(実際の画面ではなく、表示のポイントを示したイメージです)

うまくいかないとき

状態よくある原因確認すること
トンネルが非アクティブのままAzure の接続とローカルネットワークゲートウェイの IP アドレス、事前共有鍵、IKE/IPsec の設定が合っていないAzure の接続の状態と、FortiGate の IPsec トンネルの設定を見比べる
端末からは通るのに、SLA がダウンのままプローブの送信元が Azure のアドレス空間に入っていないSD-WAN メンバーの set source と、ローカルネットワークゲートウェイのアドレス空間を確かめる
SLA はアップするが、通信がルールどおりに振り分けられない宛先アドレスや計測する SLA の指定違い、ルールより前に別のルールに一致しているSD-WAN ルールの一覧で、ルールの順番と選ばれているメンバーを見る
端末から Azure に届かないスタティックルートやポリシーの出力先が SD-WAN ゾーンになっていない、NAT が有効ルートとポリシーのインタフェースが virtual-wan-link-IPSec か、NAT が無効かを確かめる

まとめ

2本の IPsec トンネルを SD-WAN ゾーンにまとめ、パフォーマンス SLA とベストクオリティのルールで、レイテンシの低いトンネルを選べました。ISP1 側を落とすと、失われた ping は1回で、通信は VPN_ISP2 に切り替わりました。設定した項目をまとめます。

場所設定今回の値
Azure仮想ネットワークゲートウェイアクティブ/アクティブ モード
AzureローカルネットワークゲートウェイISP1・ISP2 の2つ。アドレス空間は 10.0.200.0/24 と、それぞれのループバック(1.1.1.1/32、2.2.2.2/32)
FortiGateIPsec トンネルVPN_ISP1(wan1)、VPN_ISP2(wan2)
FortiGateSD-WAN ゾーン・メンバーvirtual-wan-link-IPSec に VPN_ISP1、VPN_ISP2
FortiGateスタティックルート・ポリシー172.16.1.0/24 → virtual-wan-link-IPSec、NAT 無効
FortiGateパフォーマンス SLAIPSec(Ping、172.16.1.4、VPN_ISP1・VPN_ISP2)
FortiGateメンバーの送信元VPN_ISP1 は 1.1.1.1、VPN_ISP2 は 2.2.2.2(ループバック)
FortiGateSD-WAN ルール宛先 Azure_172.16、ベストクオリティ、基準はレイテンシ
現在の状況

この記事は FortiOS 7.0.3 で検証しました。FortiOS 7.0 系はすでにサポートが終了しています。新しいバージョンでは、画面の項目名や配置、SD-WAN の設定の一部が変わっています。

コメント