検証環境
- FortiGate-60E
- version v7.2.3
SSL-VPN over IPsec とは
ここでいう SSL-VPN over IPsec とは、IPsec トンネルの上で SSL-VPN を構築することを指します。
例えば、以下のような良くある本社・支社のネットワークを考えます。

本社と支社間で IPsec を構成しています。支社ではデフォルトルートを IPsec トンネルに向けていて、インターネット抜けするには本社を経由します。
ここで、サテライトにある端末から支社の内部ネットワークに接続することを考えます。サテライトの端末から支社に対して SSL-VPN 接続することが考えられますが、支社は本社を経由してインターネット抜けするので、SSL-VPN は本社を経由して構成することになります。

SSL-VPN 確立後はサテライトの端末は SSL-VPN トンネルを通して支社の内部と通信します。

上記例の様に、IPsec 上で SSL-VPN を構築することを考えます。
設計における考慮点
サテライトの端末が支社のグローバルアドレスに対して直接アクセスすると、非対称ルーティングが発生し FortiGate で通信がブロックされてしまいます(※詳しくはこちらの記事)。そのため、端末からの SSL-VPN 接続時の宛先アドレスは本社のグローバルアドレスとします。
そして本社の FortiGate では SSL-VPN 通信をポートフォワーディングして支社の FortiGate 宛に宛先変換します。支社の FortiGate では IPsec の Tunnel インターフェースを SSL-VPN のリッスンインターフェースとします。
IPsec Tunnel インターフェースを SSL-VPN のリッスンインターフェースにするためには当該インターフェースが IP アドレスを持つ必要があるため、Tunnel インターフェースには IP アドレスを設定します。

検証構成
以下の構成で SSL-VPN over IPsec を検証してみます。

- サテライトの端末は本社のグローバルアドレス 10.1.10.254 のポート 8888 に対して SSL-VPN 接続します
- 本社の FortiGate は 10.1.10.254 ポート 8888 宛の通信を支社の FortiGate の Tunnel のアドレス 10.254.1.2 のポート 9999 に宛先変換します
- 支社の FortiGate は SSL-VPN 接続を Tunnel のポート 9999 でリッスンします
FortiGate の設定内容
インターフェース設定
まずは基本的なインターフェース設定です。IP アドレスを設定すれば OK です。
◆本社側
config system interface
edit "wan1"
set ip 10.1.10.254 255.255.255.0
next
end
◆支社側
config system interface
edit "wan1"
set ip 10.1.20.254 255.255.255.0
next
end
ルーティング設定(IPsec 確立用)
◆本社側
本社ではインターネット抜けするためにデフォルトルートを wan1 向けにします。このルートによって支社とも通信できるようになります。
config router static
edit 1
set gateway 10.1.10.1
set device "wan1"
next
end
◆支社側
支社では本社と IPsec 確立するために本社のグローバルアドレス宛のルートを設定します。
config router static
edit 1
set dst 10.1.10.0 255.255.255.0
set gateway 10.1.20.1
set device "wan1"
next
end
デフォルトルートは IPsec 設定後に Tunnel 向けとして設定します。
IPsec 設定
本社・支社双方で IPsec の設定をします。IPsec の設定について詳しくはこちらの記事を見てください。
IKE フェーズ1 の設定
◆本社側
config vpn ipsec phase1-interface
edit "Tunnel0"
set interface "wan1"
set peertype any
set net-device disable
set proposal aes256-sha256
set dpd disable
set dhgrp 14
set nattraversal disable
set remote-gw 10.1.20.254
set psksecret password
next
end
◆支社側
config vpn ipsec phase1-interface
edit "Tunnel0"
set interface "wan1"
set peertype any
set net-device disable
set proposal aes256-sha256
set dpd disable
set dhgrp 14
set nattraversal disable
set remote-gw 10.1.10.254
set psksecret password
next
end
IKE フェーズ1 の設定をすると、自動で以下の Tunnel インターフェースが作成されます。
config system interface
edit "Tunnel0"
set vdom "root"
set type tunnel
set snmp-index 17
set interface "wan1"
next
end
IKE フェーズ2 の設定
◆本社側
config vpn ipsec phase2-interface
edit "Tunnel0"
set phase1name "Tunnel0"
set proposal aes256-sha256
set pfs disable
next
end
◆支社側
config vpn ipsec phase2-interface
edit "Tunnel0"
set phase1name "Tunnel0"
set proposal aes256-sha256
set pfs disable
next
end
Tunnel インターフェースの設定
Tunnel インターフェースの IP アドレス、リモートアドレス(ピアアドレス)の設定を行います。
◆本社側
config system interface
edit "Tunnel0"
set ip 10.254.1.1 255.255.255.255
set remote-ip 10.254.1.2 255.255.255.252
next
end
◆支社側
config system interface
edit "Tunnel0"
set ip 10.254.1.2 255.255.255.255
set remote-ip 10.254.1.1 255.255.255.252
next
end
ポリシー設定(IPsec 確立用)
支社の内部ネットワークからインターネットへの通信を許可するポリシーを設定します。
このポリシー設定をしておかないと IPsec がアップしません。IPsec がアップしていることが後々の SSL-VPN 確立の前提になります。
◆本社側
本社側では、IPsec トンネル(支社)から wan1(インターネット)への通信を許可するポリシーを設定します。
config firewall policy
edit 1
set name "172.16.10.0/24_to_internet"
set srcintf "Tunnel0"
set dstintf "wan1"
set action accept
set srcaddr "172.16.10.0/24"
set dstaddr "all"
set schedule "always"
set service "ALL"
set logtraffic all
next
end
◆支社側
支社側では internal1(内部ネットワーク)から IPsec トンネル(本社)への通信を許可するポリシーを設定します。
config firewall policy
edit 1
set name "int1_to_ipsec"
set srcintf "internal1"
set dstintf "Tunnel0"
set action accept
set srcaddr "172.16.10.0/24"
set dstaddr "all"
set schedule "always"
set service "ALL"
set logtraffic all
next
end
スタティックルート設定(IPsec 通信用)
IPsec の設定ができたところで、支社側で IPsec トンネル向けのデフォルトルートを設定します。
支社内部からのインターネット通信や、SSL-VPN 通信のために使用されるルートです。
◆支社側
config router static
edit 2
set device "Tunnel0"
next
end
[支社側] SSL-VPN 設定
支社側では以下の通り SSL-VPN 設定をします。
- リッスンインターフェースを IPsec トンネルインターフェースとする
- リッスンポートを 9999 とする
◆支社側
config vpn ssl settings
set servercert "Fortinet_Factory"
set tunnel-ip-pools "SSLVPN_TUNNEL_ADDR1"
set tunnel-ipv6-pools "SSLVPN_TUNNEL_IPv6_ADDR1"
set port 9999
set source-interface "Tunnel0"
set source-address "all"
set source-address6 "all"
set default-portal "tunnel-access"
end
※SSL-VPN 設定について詳しくはこちらの記事を見てください
SSL-VPN 接続用ユーザも作成します。
config user local
edit "vpnuser"
set type password
set passwd password
next
end
次に SSL-VPN ユーザから支社内部ネットワークへの通信を許可するポリシーを設定します。
config firewall policy
edit 3
set name "sslvpn_to_int1"
set srcintf "ssl.root"
set dstintf "internal1"
set action accept
set srcaddr "all"
set dstaddr "172.16.10.0/24"
set schedule "always"
set service "ALL"
set logtraffic all
set users "vpnuser"
next
end
[本社側] ポリシー設定(SSL-VPN・ポートフォワーディング用)
本社の FortiGate で SSL-VPN 通信をポートフォワーディングするポリシーを設定します。
※ポートフォワーディングについて詳しくはこちらの記事を見てください
◆本社側
まず、ポートフォワーディングのために使用するバーチャル IP を設定します。
- 10.1.10.254:8888 → 10.254.1.2:9999 と変換するバーチャル IP を設定
config firewall vip
edit "VIP_10.1.10.254_p8888"
set extip 10.1.10.254
set mappedip "10.254.1.2"
set extintf "wan1"
set portforward enable
set extport 8888
set mappedport 9999
next
end
次に wan1(インターネット)から IPsec トンネル(支社)への SSL-VPN 通信を許可するポリシーを設定します。
config firewall policy
edit 2
set name "wa1_to_sslvpn"
set srcintf "wan1"
set dstintf "Tunnel0"
set action accept
set srcaddr "all"
set dstaddr "VIP_10.1.10.254_p8888"
set schedule "always"
set service "TCP_9999"
set logtraffic all
next
end
SSL-VPN 接続確認
サテライトの端末から本社のグローバルアドレス 10.1.10.254:8888 宛に SSL-VPN 接続してみます。
FortiClient で以下のように設定してアクセスします。

以下の通り接続できました。

端末から支社内のアドレスに対して疎通可能です。
C:\WINDOWS\system32>ping 172.16.10.100
172.16.10.100 に ping を送信しています 32 バイトのデータ:
172.16.10.100 からの応答: バイト数 =32 時間 =4ms TTL=254
172.16.10.100 からの応答: バイト数 =32 時間 =2ms TTL=254
172.16.10.100 からの応答: バイト数 =32 時間 =7ms TTL=254
172.16.10.100 からの応答: バイト数 =32 時間 =3ms TTL=254
172.16.10.100 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 2ms、最大 = 7ms、平均 = 4ms
C:\WINDOWS\system32>tracert -d 172.16.10.100
172.16.10.100 へのルートをトレースしています。経由するホップ数は最大 30 です
1 6 ms 1 ms 1 ms 10.212.134.200
2 3 ms 2 ms 2 ms 172.16.10.100
トレースを完了しました。
C:\WINDOWS\system32>
支社 FortiGate の対向ルータのインターフェースでパケットキャプチャしてみます。

以下の通り ESP となっており暗号化されていることが分かります。

本社の FortiGate のトラフィックログからポートフォワーディングが正しくできていることを確認できます。

支社側の FortiGate のトラフィックログからは SSL-VPN で内部ネットワークへアクセスできていることを確認できます。

以上です。