FortiGateを使った拠点間VPN構築は、企業ネットワークの基本中の基本です。本部と支店、あるいは複数拠点を安全に接続するIPsec VPNは、実務でほぼ確実に要求されるスキルといえます。今回は、FortiGateによる拠点間IPsec VPNの設定を、実機での操作画面やCLI出力を交えながら詳しく解説します。

👷 現場での体験談

私が初めてFortiGateでVPNを構築したとき、Phase1とPhase2の設定パラメータが一致せず、トンネルが確立できないトラブルに丸一日悩まされました。結局、片側でAESの鍵長が256bit、もう片側が128bitになっていたという単純ミスでした。

それ以来、VPN設定時は必ず両拠点のパラメータを並べて記載したチェックシートを作成し、設定前に確認するようにしています。このような小さなミスマッチが、実は現場で最も多いトラブルです。

IPsec VPNの基本概念とPhase1/Phase2の役割

IPsec VPNは、インターネットなどのパブリックネットワークを経由しながらも、拠点間を安全に接続するための技術です。FortiGateのIPsec VPNは、2つのフェーズに分かれて動作します。

Phase1(IKE:Internet Key Exchange)

Phase1は、VPNトンネルを構築するための「信頼関係」を確立するフェーズです。ここでは以下のような情報をネゴシエーションします。

Phase1で定義する主要パラメータ

パラメータ 説明 推奨値
認証方式 相手を認証する方法(事前共有鍵 or 証明書) PSK
暗号化アルゴリズム データの暗号化方式 AES256
認証アルゴリズム データの改ざん検知方式 SHA256
DHグループ 鍵交換の強度を決める 14以上
ライフタイム 鍵の有効期間 28800秒
Phase2(IPsec SA:Security Association)

Phase2では、Phase1で確立した安全な通信路を使って、実際のデータを暗号化するための設定を行います。ここで指定するのは、どのネットワーク同士を接続するか、どのような暗号化方式を使うか、といった具体的な通信パラメータです。

図1: Phase1とPhase2の処理時間比較

Phase1確立時間
3秒
Phase2確立時間
1秒
パケット転送開始
4秒
再接続時間
0.8秒

Phase1は重い暗号化処理が必要なため時間がかかりますが、一度確立すれば長時間維持されます。Phase2は軽量で、再接続も高速です。この理解が、トラブルシューティング時に非常に役立ちます。

GUIによる拠点間VPN設定手順

まずはGUI(Web管理画面)での設定方法を解説します。今回は、本社(Site-A)と支店(Site-B)を接続する想定で進めます。

ネットワーク構成の前提

構築する拠点間VPNの環境情報

項目 Site-A(本社) Site-B(支店)
WAN側IP 203.0.113.10 198.51.100.20
LAN側セグメント 192.168.10.0/24 192.168.20.0/24
FortiGate LAN IP 192.168.10.1 192.168.20.1
事前共有鍵 MySecureP@ssw0rd!2024
Step1: Phase1(IKE)の設定
1
VPNウィザードの起動

FortiGate管理画面から「VPN」→「IPsec Wizard」を選択します。

2
VPNタイプの選択

「Site to Site」を選択し、Nextをクリックします。

3
Phase1パラメータの入力

VPN名(例:to_SiteB)、Remote Gateway(対向のWAN IP)、Pre-shared Key を入力します。

Site-Aでの具体的な設定内容は以下の通りです。

VPN Name: to_SiteB
Remote Gateway: Static IP Address
IP Address: 198.51.100.20
Interface: wan1
Pre-shared Key: MySecureP@ssw0rd!2024

Advanced Settings:
  IKE Version: 2
  Encryption: AES256
  Authentication: SHA256
  Diffie-Hellman Group: 14
  Key Lifetime: 28800
⚠ 注意

Phase1の設定パラメータ(暗号化方式、認証方式、DHグループ、ライフタイム)は両拠点で完全に一致させる必要があります。一つでも違うとトンネルが確立しません。特にDHグループの不一致は見落としがちなので要注意です。

Step2: Phase2(IPsec)の設定

Phase1の設定が完了したら、続けてPhase2を設定します。ウィザードの次画面で以下を入力します。

Local Address: 192.168.10.0/24
Remote Address: 192.168.20.0/24

Advanced Settings:
  Encryption: AES256
  Authentication: SHA256
  PFS (Perfect Forward Secrecy): Enable
  Diffie-Hellman Group: 14
  Key Lifetime: 3600 seconds

PFS(Perfect Forward Secrecy)を有効にすることで、万が一鍵が漏洩しても過去の通信は保護されます。セキュリティ要件が高い環境では必ず有効化してください。

Step3: ファイアウォールポリシーの作成

VPNトンネルを作成しただけでは通信できません。VPN経由の通信を許可するファイアウォールポリシーが必要です。

1
ポリシー画面へ移動

「Policy & Objects」→「Firewall Policy」を選択し、「Create New」をクリックします。

2
LANからVPNへのポリシー作成

Incoming Interface: internal、Outgoing Interface: to_SiteB、Source/Destination: all、Service: ALL、Action: ACCEPTに設定します。

3
VPNからLANへのポリシー作成

Incoming Interface: to_SiteB、Outgoing Interface: internal でも同様にポリシーを作成します。

双方向のポリシーを作成することで、相互に通信できるようになります。実務では、セキュリティポリシーに応じてSourceやDestination、Serviceを適切に制限します。

CLIによるVPN設定とコマンド操作

GUIでの設定方法を理解したら、CLI(コマンドラインインターフェース)での設定も押さえておきましょう。大量の拠点を設定する場合や、設定の自動化を行う場合はCLIが必須です。

CLIでのPhase1設定

SSH等でFortiGateにログインし、以下のコマンドを実行します。

config vpn ipsec phase1-interface
    edit "to_SiteB"
        set interface "wan1"
        set ike-version 2
        set keylife 28800
        set peertype any
        set net-device disable
        set proposal aes256-sha256
        set dhgrp 14
        set remote-gw 198.51.100.20
        set psksecret MySecureP@ssw0rd!2024
    next
end
CLIでのPhase2設定
config vpn ipsec phase2-interface
    edit "to_SiteB"
        set phase1name "to_SiteB"
        set proposal aes256-sha256
        set dhgrp 14
        set keylifeseconds 3600
        set pfs enable
        set src-subnet 192.168.10.0/24
        set dst-subnet 192.168.20.0/24
    next
end
CLIでのファイアウォールポリシー設定
config firewall policy
    edit 0
        set name "LAN_to_VPN"
        set srcintf "internal"
        set dstintf "to_SiteB"
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
        set logtraffic all
    next
    edit 0
        set name "VPN_to_LAN"
        set srcintf "to_SiteB"
        set dstintf "internal"
        set srcaddr "all"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
        set logtraffic all
    next
end

「edit 0」を使うことで、新しいポリシーIDが自動で割り当てられます。また、「set logtraffic all」を指定することで、通信ログが記録され、トラブルシューティング時に役立ちます。

VPN接続の確認と疎通テスト

VPN設定が完了したら、実際にトンネルが確立しているか、通信が可能かを確認します。FortiGateには便利な確認コマンドが用意されています。

VPNトンネル状態の確認コマンド
diagnose vpn ike gateway list name to_SiteB

正常に接続されている場合の出力例です。

vd: root/0
name: to_SiteB
version: 2
interface: wan1 4
addr: 203.0.113.10:500 -> 198.51.100.20:500
created: 125s ago
IKE SA: created 1/1  established 1/1  time 0/0/0 ms
IPsec SA: created 1/1  established 1/1  time 0/0/0 ms

  id/spi: 342 a5f3d9c8b2e14f67/4d8e9a1c3b5f2706
  direction: initiator
  status: established 125-125s ago = 0s
  proposal: aes256-sha256
  key: a4b9c8d7e6f5-d9e8f7a6b5c4
  lifetime/rekey: 28800/28494
  DPD sent/recv: 00000000/00000000

「status: established」となっていれば、Phase1が正常に確立しています。「created 1/1 established 1/1」は成功率を示しており、失敗がないことを意味します。

Phase2(IPsec SA)の確認
diagnose vpn tunnel list name to_SiteB

正常な場合の出力例:

name=to_SiteB ver=2 serial=3 203.0.113.10:0->198.51.100.20:0
bound_if=4 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/536
proxyid_num=1 child_num=0 refcnt=4 ilast=2 olast=2 ad=/0
stat: rxp=56 txp=48 rxb=7896 txb=6432
dpd: mode=on-demand on=1 idle=20000ms retry=3 count=0 seqno=0
natt: mode=none draft=0 interval=0 remote_port=0
proxyid=to_SiteB proto=0 sa=1 ref=2 serial=1
  src: 0:192.168.10.0/255.255.255.0:0
  dst: 0:192.168.20.0/255.255.255.0:0
  SA:  ref=3 options=226 type=00 soft=0 mtu=1438 expire=3266/0B replaywin=2048
       seqno=31 esn=0 replaywin_lastseq=00000030 qat=0 rekey=0 hash_search_len=1
  life: type=01 bytes=0/0 timeout=3600/3266
  dec: spi=d8e4f9a2 esp=aes key=32 b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3
       ah=sha256 key=32 f3e2d1c0b9a8f7e6d5c4b3a2f1e0d9c8
  enc: spi=4c7d8e9a esp=aes key=32 a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
       ah=sha256 key=32 d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1
  npu_flag=00 npu_rgwy=198.51.100.20 npu_lgwy=203.0.113.10 npu_selid=3 dec_npuid=0 enc_npuid=0

「stat」行でパケット送受信カウント(rxp/txp)とバイト数(rxb/txb)が確認できます。この値が増加していれば、実際にデータが流れています。「expire」は残りの有効時間を秒単位で示しています。

実通信の疎通確認

FortiGateから対向拠点のネットワークへPingを送信します。

execute ping-options source 192.168.10.1
execute ping 192.168.20.1

成功時の出力例:

PING 192.168.20.1 (192.168.20.1): 56 data bytes
64 bytes from 192.168.20.1: icmp_seq=0 ttl=255 time=12.3 ms
64 bytes from 192.168.20.1: icmp_seq=1 ttl=255 time=11.8 ms
64 bytes from 192.168.20.1: icmp_seq=2 ttl=255 time=12.1 ms
64 bytes from 192.168.20.1: icmp_seq=3 ttl=255 time=12.0 ms
64 bytes from 192.168.20.1: icmp_seq=4 ttl=255 time=11.9 ms

--- 192.168.20.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 11.8/12.0/12.3 ms

パケットロスがなく、応答が返っていればVPN経由の通信が成功しています。通常、VPN経由の場合は暗号化処理のオーバーヘッドにより、レイテンシは直接接続より若干高くなります。

図2: VPN接続確認項目の重要度

Phase1確立確認
95%
Phase2確立確認
90%
Ping疎通確認
85%
パケットカウント
70%
VPN接続エラーのトラブルシューティング

VPN構築時には様々なトラブルが発生します。ここでは現場で頻出する問題とその解決方法を解説します。

Phase1が確立しない場合

Phase1トラブルの主な原因と対処法

原因 確認コマンド 対処法
事前共有鍵の不一致 diagnose debug application ike -1 PSKを再確認し統一
UDP500/4500ブロック diagnose sniffer packet wan1 FW設定確認
暗号化方式の不一致 show vpn ipsec phase1-interface proposalを統一
DHグループの不一致 get vpn ipsec phase1-interface dhgrpを統一
対向IPアドレス誤り execute ping 対向IP remote-gw修正

Phase1のデバッグには、IKEデバッグが非常に有効です。

diagnose debug reset
diagnose debug application ike -1
diagnose debug enable

このコマンドで、IKEネゴシエーションの詳細ログがリアルタイムで表示されます。認証失敗やパラメータ不一致などのエラーメッセージが確認できます。

ike 0:to_SiteB: IKE Responder: new
ike 0:to_SiteB: negotiation result
ike 0:to_SiteB: proposal id = 1:
    protocol = ISAKMP
    encapsulation = IKE/none
    type = dynamic
    authentication = pre-shared key
    dh-group = 14
    encryption = aes256
    hash = sha256
    lifetime = 28800
ike 0:to_SiteB: SA established
Phase2が確立しない場合

Phase1が成功してもPhase2が確立しない場合、主にネットワーク設定やポリシーの問題です。

diagnose vpn tunnel list
# proxyid_num=0 の場合、Phase2が未確立

# Phase2デバッグ
diagnose debug reset
diagnose debug application ike 255
diagnose debug enable
⚠ 注意

Phase2のsrc-subnetとdst-subnetが対向側と逆転して設定されているケースが非常