【FortiGate】IPsec VPN 設定手順 | 基本の拠点間接続から NAT 構成まで

  • URLをコピーしました!
目次

はじめに

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 アドレスが被っていない

👉Hub-and-Spoke 構成」へ

IP アドレスが被っている

👉 「NAT 利用型 VPN 構成」

基本設定: Hub-and-Spoke(動的 IP 対応)

まずは、最も利用頻度の高い基本構成です。 本社側(Hub)は「固定 IP」を持っていますが、支店側(Spoke)は PPPoE などの「動的(不定)IP」を使用している環境を想定します。

STEP
IKE フェーズ 1(Interface Mode)の設定

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
STEP
IKE フェーズ 2 の設定

トンネル内で「どのネットワーク帯の通信を通すか」を定義します。

【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
STEP
ファイアウォールポリシーとルーティング

最後に、トンネルを通る通信を許可し、パケットの行き先(ルート)を案内します。

【ファイアウォールポリシー(双方向許可)】

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 アドレスに変身する」 ことで通信を可能にします。

STEP
NAT 用のオブジェクト作成(VIP / IP Pool)

この設定のキモは、「送信元」と「宛先」の両方を変換することです(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
end

VIP(宛先 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
STEP
VPN インターフェースとルーティング

フェーズ 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
STEP
ポリシー設定(NAT 有効化)

最後にファイアウォールポリシーで 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 トンネルへ入った)

このように、SNATDNAT というメッセージが表示されていれば、ポリシーとオブジェクト設定が正しく機能しています。

まとめ

本記事では、FortiGate を用いた IPsec VPN の構築について、実務で頻出する 2 つのパターンを解説しました。

基本構成(Hub-and-Spoke)

片側が動的 IP の場合は、mode aggressivetype dynamic を活用する。

応用構成(NAT over VPN)

IP 重複がある場合は、IP Pool(送信元変換)と VIP(宛先変換)を組み合わせて通信させる。

以上、最後までお読みいただきありがとうございました。


created by Rinker
¥3,080 (2026/03/17 11:31:35時点 楽天市場調べ-詳細)
おすすめ書籍
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

インフラ(クラウド/NW/仮想化)から Web 開発まで、技術領域を横断して活動するエンジニア💻 コンシューマー向けエンタメ事業での新規開発・運営経験を活かし、実戦的な技術ノウハウを発信中

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次