はじめに
FortiGate を使用して拠点間 VPN(IPsec VPN)を構築する場合、拠点のネットワーク環境によって設定内容は大きく異なります。 お互いが固定 IP を持っているシンプルな構成なら簡単ですが、実務では「片方の拠点が動的 IP(PPPoE)である」場合や、合併などで「拠点間の LAN IP アドレスが重複している」といった複雑なケースに遭遇することも少なくありません。
本記事では、実務でよく遭遇するこれら2つのシナリオに対応した IPsec VPN の設定手順を、具体的な CLI 設定例とともに解説します。
なお、IPsec VPN の基本的な仕組みや用語(IKE フェーズ、暗号化など)については、以下の記事で詳しく解説しています。基礎から復習したい方は、あわせてご参照ください。

- 基本設定: 片側が動的 IP(PPPoE等)の場合の Hub-and-Spoke 接続設定
- 応用設定: 拠点間で IP アドレスが重複する場合の NAT 利用型 VPN 設定
- トラブルシューティング: IKE ステータスの確認やデバッグコマンド
IPsec VPN の構築パターンと選び方
設定コマンドを入力する前に、今回の要件が以下のどちらのパターンに当てはまるかを確認しましょう。 本記事では、実務でよくある以下の 2 つのシナリオについて解説します。
Hub-and-Spoke 構成(動的 IP 対応)
本社(Hub)と支店(Spoke)を接続する、最も一般的な構成です。 支店側のインターネット回線が安価な動的 IP(PPPoE など)であっても、固定 IP を持つ本社側で待ち受けることで VPN を確立します。
- 一般的な拠点間 VPN を構築したい。
- 支店側のグローバル IP アドレスが固定ではない(変わる可能性がある)
- 拠点間で LAN 側の IP アドレス(サブネット)は重複していない。
NAT 利用型 VPN 構成(IP 重複対応)
VPN トンネルを通る通信の送信元・宛先 IP アドレスを、NAT(アドレス変換)によって書き換える構成です。 通常、IPsec VPN は拠点間で IP アドレス(サブネット)が重複していると通信できませんが、NAT を挟むことでこれを回避します。
- 企業合併などで、接続先と自社の IP アドレス体系(例:
192.168.1.0/24同士など)が被っている。 - セキュリティ上の理由で、実際の内部 IP アドレスを相手に見せたくない。
IP アドレスが被っていない
IP アドレスが被っている
基本設定: Hub-and-Spoke(動的 IP 対応)
まずは、最も利用頻度の高い基本構成です。 本社側(Hub)は「固定 IP」を持っていますが、支店側(Spoke)は PPPoE などの「動的(不定)IP」を使用している環境を想定します。

IPsec トンネルの確率を行うための基本設定です。
【Hub 側(FG01):受け入れ設定】
相手(Spoke)の IP アドレスが決まっていないため、set type dynamic を使用して「合言葉(PSK)さえ合っていればどの IP からでも接続を受け入れる」設定にします。
config vpn ipsec phase1-interface
edit "VPN-to-Spoke"
set interface "wan1" <-- WAN側インターフェース
set mode aggressive <-- 動的IPの場合、Aggressiveモードが一般的
set type dynamic <-- 【重要】相手のIPを指定せず待ち受ける設定
set psksecret "パスワード" <-- 事前共有鍵(Pre-Shared Key)
next
end【Spoke 側(FG02):接続設定】
自分は動的 IP ですが、接続先(Hub)は固定 IP なので、宛先 (remote-gw) を明記します。
config vpn ipsec phase1-interface
edit "VPN-to-Hub"
set interface "wan1"
set mode aggressive
set remote-gw 1.1.1.1 <-- Hub側の固定IPを指定
set psksecret "パスワード"
next
endトンネル内で「どのネットワーク帯の通信を通すか」を定義します。
【Hub 側(FG01)】
config vpn ipsec phase2-interface
edit "VPN-to-Spoke"
set phase1name "VPN-to-Spoke"
set src-subnet 192.168.100.0 255.255.255.0 <-- 自分のLAN
set dst-subnet 192.168.200.0 255.255.255.0 <-- 相手のLAN
next
end【Spoke 側(FG02)】
Hub 側と逆の設定(送信元と宛先を入れ替え)を行います。
config vpn ipsec phase2-interface
edit "VPN-to-Hub"
set phase1name "VPN-to-Hub"
set src-subnet 192.168.200.0 255.255.255.0
set dst-subnet 192.168.100.0 255.255.255.0
next
end最後に、トンネルを通る通信を許可し、パケットの行き先(ルート)を案内します。
【ファイアウォールポリシー(双方向許可)】
VPN インターフェースと LAN インターフェース間の通信を許可します。 ※以下は Hub 側の例ですが、Spoke 側も同様に設定が必要です。
config firewall policy
edit 1
set name "VPN-Inbound"
set srcintf "VPN-to-Spoke" <-- VPNから入ってくる
set dstintf "lan" <-- LANへ抜ける
set srcaddr "all" <-- フェーズ2で制限しているためallでOK
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
next
edit 2
set name "VPN-Outbound"
set srcintf "lan" <-- LANから入ってくる
set dstintf "VPN-to-Spoke" <-- VPNへ抜ける
set srcaddr "all"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
next
end【スタティックルート】
「相手の LAN 宛てのパケットは、VPN トンネルへ投げる」という設定です。
config router static
edit 1
set dst 192.168.200.0 255.255.255.0 <-- 相手のLAN
set device "VPN-to-Spoke" <-- 出口はVPNインターフェース
next
end応用設定: IPsec VPN with NAT(IP 重複対応)
次は、企業合併などで 「お互いの社内 LAN の IP アドレス(サブネット)が重複してしまっている」 場合の対応策です。 通常、IP アドレスが被っているとルーティングができず通信できませんが、FortiGate の NAT 機能を使うことで、「トンネルを通る時だけ別の IP アドレスに変身する」 ことで通信を可能にします。

この設定のキモは、「送信元」と「宛先」の両方を変換することです(Double NAT)。 まずは、それぞれの変換ルールを定義するオブジェクトを作成します。
▼ NAT 変換ルールの整理(ここが重要!)
| 通信の方向 | 使う機能 | 何をする設定? |
| 相手へ送る時 | IP Pool (送信元 NAT) | 自分の本当の IP (172.16.1.100) を隠して、仮想 IP ( 10.1.1.1) を名乗って送信する。 |
| 相手から来る時 | VIP (宛先 NAT) | 相手が宛先として指定してきた仮想 IP (10.1.1.1) を、自分の本当の IP ( 172.16.1.100) に変換して受け取る。 |
IP Pool(送信元 NAT 用)の作成
「自分が相手に行く時に使う仮の姿」を定義します。
# FG01(Hub側)の設定例
config firewall ippool
edit "NAT-Source-Pool"
set startip 10.1.1.1 <-- 相手に見せる自分の仮IP(開始)
set endip 10.1.1.1 <-- 相手に見せる自分の仮IP(終了)
next
endVIP(宛先 NAT 用)の作成
「相手が送ってきた宛先を、自分の中の実 IP に戻す」設定を定義します。
# FG01(Hub側)の設定例
config firewall vip
edit "NAT-Dest-VIP"
set extip 10.1.1.1 <-- 相手が宛先として指定してくるIP(外側)
set extintf "any" <-- VPNインターフェースを指定してもOK
set mappedip "172.16.1.100" <-- 実際にパケットを届けたい内部の実IP
next
endフェーズ 1、フェーズ 2 の設定は基本編と同じですが、「ルーティングの宛先」 に注意が必要です。 スタティックルートの宛先は、相手の実 IP ではなく、「相手が NAT で変換して見せている仮の IP」 を指定します。
config router static
edit 1
set dst 10.1.1.2 255.255.255.255 <-- 相手の実IPではなく「仮IP」を指定!
set device "VPN-to-Spoke"
next
end最後にファイアウォールポリシーで NAT を有効化します。 ここで重要なのは、「通常のインターネット行き SNAT(マスカレード)」とは違い、特定の IP Pool を指定する 点です。
config firewall policy
edit 1
set name "VPN-Outbound-NAT"
set srcintf "port3" <-- LAN側
set dstintf "VPN-to-Spoke" <-- VPN側
set srcaddr "all"
set dstaddr "all" <-- 実際には相手のVIPオブジェクトを指定するのがベスト
set action accept
set schedule "always"
set service "ALL"
# ▼ ここからがNAT設定のハイライト
set nat enable <-- NATを有効化
set ippool enable <-- デフォルトのインターフェースIPではなくPoolを使う
set poolname "NAT-Source-Pool" <-- Step1で作ったPoolを指定
next
end
これで、「VPN トンネルに入る瞬間に、IP Pool で指定したアドレスに着替えてから出ていく」という挙動になります。
接続確認とトラブルシューティング
設定が完了したら、正常に VPN が確立し、意図した通りに通信できているかを確認します。
IKE ステータスの確認
まずは、VPN トンネル自体が張れているかを確認します。 GUI の「IPsec モニター」でも確認できますが、CLI の方が手早く確実です。
実行コマンド
diagnose vpn ike status summary確認ポイント
出力結果の established の数値を確認してください。ここが 1 以上であれば、フェーズ 1 およびフェーズ 2 のネゴシエーションが完了しています。 もし 0 のままであれば、Pre-Shared Key(パスワード)の間違いや、フェーズ 1 の設定不一致を疑ってください。
パケットフローのデバッグ(NAT 動作確認)
「通信は通っているけど、本当に NAT されているか不安」という場合は、FortiGate 内部のパケット処理をリアルタイムで追跡するデバッグコマンド(Flow Trace)が有効です。
実行コマンド
diagnose debug enable
diagnose debug flow trace start 20 <-- パケット20個分だけ表示
# 必要に応じてフィルタを設定
# diagnose debug flow filter addr <確認したい宛先IP>ログ出力の読み解き方(NAT 成功例)
以下は、NAT 利用型 VPN 環境で Ping を打った際のログ例です。 SNAT(送信元変換)と DNAT(宛先変換)が行われている行に注目してください。
id=20085 ... msg="vd-root received a packet(proto=1, 172.16.1.100:22308->10.16.2.100:8) from port3..."
(LAN側からパケットを受信)
id=20085 ... msg="DNAT 10.16.2.100:8->10.1.1.102:22308"
(宛先NAT: 宛先が VIP 設定に基づき「10.16.2.100」から「10.1.1.102」へ変換された)
id=20085 ... msg="SNAT 172.16.1.100->10.1.1.1:62464"
(送信元NAT: 送信元が IP Pool 設定に基づき「172.16.1.100」から「10.1.1.1」へ変換された)
id=20085 ... msg="enter IPsec interface-Site-to-Site"
(変換された状態で IPsec トンネルへ入った)


このように、SNAT や DNAT というメッセージが表示されていれば、ポリシーとオブジェクト設定が正しく機能しています。
まとめ
本記事では、FortiGate を用いた IPsec VPN の構築について、実務で頻出する 2 つのパターンを解説しました。
- 基本構成(Hub-and-Spoke)
-
片側が動的 IP の場合は、
mode aggressiveとtype dynamicを活用する。 - 応用構成(NAT over VPN)
-
IP 重複がある場合は、
IP Pool(送信元変換)とVIP(宛先変換)を組み合わせて通信させる。
以上、最後までお読みいただきありがとうございました。

