iPhone(iOS)・Mac <-> Fortigate間VPNでLAN環境にリモート接続する
はじめに
iPhoneとMacからFortigateにVPN接続しLAN環境へリモート接続をします。
また、インターネットへ接続の場合はFortigate経由ではなく直接インターネットへ抜けるようにします。
構成・要件
要件は下記の通りとします。
- Fortigateのwan側インタフェースはグローバルIPアドレスを直接持ちa.example.comのFQDNが割り当てられています。
- VPNトンネルを通る通信は宛先IPが192.168.0.0/16のサブネット内だった場合とします。(図ではinternal1が/24に割り当てられていますが、更に配下に/24のサブネットが複数存在します)
- インターネット向け通信はVPNトンネルは通らず、直接インターネットから抜けるようにします。VPNトンネルを通りFortigateからインターネットへ抜けさせることも可能ですがトラフィックフローとして無駄なため。(※以下、補足あり)
- VPN接続時にユーザIDとパスワードを使い認証することが可能になるXAUTH機能を使います。
※補足:明示的に指定した宛先IPアドレスに合致したパケットのみVPNトンネルへ通す技術をスプリットトンネルと言います。例えば、今回の要件の様に、LAN側アドレスをスプリットトンネルの対象にし、それ以外はすべてインターネットへ抜けさせると言ったことが可能です。
下記は今回検証で使用する機器とOS Versionです。
用途 | 機器 | OS Version |
---|---|---|
VPN装置 | Fortigate 60D | v6.0.10 build0365 |
VPNクライアント | iPhone X | iOS 14.0.1 |
VPNクライアント | MacBook Pro 13inch 2017 | 10.15.7 |
Fortigateの設定
Fortigateの設定について説明します。(なお、インタフェースやルーティング等の基本的な設定は割愛します)
ユーザ作成
XAUTH機能用のユーザIDを作成します。
なお、今回はkantaroのアカウントのみ作成しますが、もし複数人でVPN接続する場合は「config user local」で人数分のアカウントを作成し、『config user group』に割り当てます。
config user local
edit "kantaro"
set type password
set passwd [任意のパスワード入力]
next
end
config user group
edit "VPN-GROUP_ADMIN"
set member "kantaro"
next
end
スプリットトンネル用のAddress Objectの作成
スプリットトンネル用のアドレスオブジェクトを作成します。当方の環境はLANをすべて『192.168.0.0/16』内で払い出しているため下記の設定となっています。
config firewall address
edit "ADDR_192.168.0.0/16"
set subnet 192.168.0.0 255.255.0.0
next
end
config firewall addrgrp
edit "ADGRP_ALL-LAN"
set member "ADDR_192.168.0.0/16"
next
end
IPsec Phase1/Phase2の作成
『config vpn ipsec phase1-interface』では「set ipv4-start-ip」「set ipv4-end-ip」で設定したIPアドレスからクライアントのIPアドレスが割り当てられます。
config vpn ipsec phase1-interface
edit "VPN-IOS_ADM"
set type dynamic
set interface "wan1"
set peertype any
set mode-cfg enable
set proposal 3des-sha256 aes128-sha256 aes192-sha256 aes256-sha256
set dhgrp 14
set xauthtype auto
set authusrgrp "VPN-GROUP_ADMIN"
set ipv4-start-ip 172.16.20.1
set ipv4-end-ip 172.16.20.100
set ipv4-split-include "ADGRP_ALL-LAN"
set client-keep-alive enable
set psksecret [任意のパスワード入力]
next
end
config vpn ipsec phase2-interface
edit "VPN-IOS_ADM"
set phase1name "VPN-IOS_ADM"
set proposal 3des-sha256 aes128-sha256 aes192-sha256 aes256-sha256
set pfs disable
set keepalive enable
next
end
Firewall Policyの作成
全許可設定としましたが、限られた通信のみ許可したい場合はアドレスやサービス等の設定を細かく設定する必要があります。
config firewall policy
edit 104
set name "INET_IOS_ADMIN-->LAN"
set srcintf "VPN-IOS_ADM"
set dstintf "internal1"
set srcaddr "all"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
set fsso disable
next
end
VPNクライアントのiPhoneとMacの設定
iPhoneの設定
まず、VPNクライアントの設定を行います。下記に進みVPNの設定画面を表示します。
設定>一般>VPN>VPN構成を追加…
VPNの設定画面が出たら下記のスクリーンショットの通り進めます。※パスワードやFQDN等の情報は一部マスキングしています
接続時間が表示されていればVPN接続はできています。iPhoneの設定は以上です。
Macの設定
パラメーターとしてはiPhoneと同様です。まずはiPhoneと同様、VPNクライアントの設定を行います。下記に進みVPNの設定画面を表示します。
デスクトップ左上のAppleマーク>システム環境設定…>ネットワーク
ネットワークの設定画面が出たら下記のスクリーンショットの通り進めます。※パスワードやFQDN等の情報は一部マスキングしています
接続時間が表示されればVPN接続はできています。Macの設定は以上です。
Fortigate ステータス確認
次にiPhoneとMacから同時にVPN接続をしている状態でFortigateのステータスを確認します。
まずはルーティングテーブルから確認します。6行目と7行目にVPNクライアントのIPアドレス宛てのルーティングが自動でインストールされます。
FGT60D # get router info routing-table all
<省略>
S* 0.0.0.0/0 [5/0] via 61.26.68.129, wan1
C 61.26.68.128/25 is directly connected, wan1
S 172.16.20.1/32 [15/0] via 103.90.18.251, VPN-IOS_ADM
S 172.16.20.2/32 [15/0] via 133.236.182.81, VPN-IOS_ADM
C 192.168.0.0/24 is directly connected, internal1
<省略>
FGT60D #
「diagnose vpn ike gateway list」でVPNの状態を確認します。接続できていると『id/spi~DPD』の行までが表示されます。iPhoneとMacの2クライアント接続なので2箇所の表示があります。
FGT60D # diagnose vpn ike gateway list
vd: root/0
name: VPN-IOS_ADM_0
version: 1
interface: wan1 5
addr: 61.26.68.197:4500 -> 103.90.18.251:4500
created: 167s ago
xauth-user: kantaro
assigned IPv4 address: 172.16.20.1/255.255.255.255
nat: peer
IKE SA: created 1/1 established 1/1 time 750/750/750 ms
IPsec SA: created 1/1 established 1/1 time 190/190/190 ms
id/spi: 38 f242281e7e0259e3/8ced04dcf1496ab0
direction: responder
status: established 167-166s ago = 750ms
proposal: aes256-sha256
key: 4c7307b983602429-74b29495d234f857-3fcb7a14416fbe7e-413697009f75842e
lifetime/rekey: 3600/3163
DPD sent/recv: 00000000/00000000
vd: root/0
name: VPN-IOS_ADM_1
version: 1
interface: wan1 5
addr: 61.26.68.197:4500 -> 133.236.182.81:4500
created: 153s ago
xauth-user: kantaro
assigned IPv4 address: 172.16.20.2/255.255.255.255
nat: peer
IKE SA: created 1/1 established 1/1 time 170/170/170 ms
IPsec SA: created 1/1 established 1/1 time 50/50/50 ms
id/spi: 39 19108fe28a941efa/45a1a4f91743747e
direction: responder
status: established 153-152s ago = 170ms
proposal: aes256-sha256
key: 7132aa60d555ffdd-d022a726858699b3-21ad5a5e03eca8fe-212977a94be348c2
lifetime/rekey: 3600/3177
DPD sent/recv: 00000000/00000000
FGT60D #
「diagnose vpn tunnel list」でVPNの状態を確認します。接続できていると『src~npu』の行までが表示されます。iPhoneとMacの2クライアント接続なので2箇所表示されます。
FGT60D # diagnose vpn tunnel list
list all ipsec tunnel in vd 0
------------------------------------------------------
name=VPN-IOS_ADM_0 ver=1 serial=e 61.26.68.197:4500->103.90.18.251:4500
bound_if=5 lgwy=static/1 tun=intf/0 mode=dial_inst/3 encap=none/392 options[0188]=npu rgwy-chg rport-chg
parent=VPN-IOS_ADM index=0
proxyid_num=1 child_num=0 refcnt=5 ilast=13 olast=173 ad=/0
stat: rxp=0 txp=0 rxb=0 txb=0
dpd: mode=on-demand on=1 idle=20000ms retry=3 count=0 seqno=0
natt: mode=silent draft=32 interval=10 remote_port=4500
proxyid=VPN-IOS_ADM proto=0 sa=1 ref=2 serial=1 add-route
src: 0:192.168.0.0-192.168.255.255:0
dst: 0:172.16.20.1-172.16.20.1:0
SA: ref=3 options=a7 type=00 soft=0 mtu=1280 expire=3419/0B replaywin=1024
seqno=1 esn=0 replaywin_lastseq=00000000 itn=0
life: type=01 bytes=0/0 timeout=3591/3600
dec: spi=3120eb96 esp=aes key=32 8530977043eda45ccb8b8d28a8f49a2772cfaad0942553379f50271488264579
ah=sha256 key=32 46506b1b2e0074f87da7b90c3a32f3f053cf446d625cd0561993996160c7cf67
enc: spi=0d6c134f esp=aes key=32 62df97d280a03a7201fad634e7c2f36f5d1f2fab2edc6ff133557b198c654ea6
ah=sha256 key=32 066a1d359caeb55d6672c926ea1dfda6cb9fb523565bc76fc004e27fe2d68a61
dec:pkts/bytes=0/0, enc:pkts/bytes=0/0
npu_flag=00 npu_rgwy=103.90.18.251 npu_lgwy=61.26.68.197 npu_selid=a
------------------------------------------------------
name=VPN-IOS_ADM_1 ver=1 serial=f 61.26.68.197:4500->133.236.182.81:4500
bound_if=5 lgwy=static/1 tun=intf/0 mode=dial_inst/3 encap=none/392 options[0188]=npu rgwy-chg rport-chg
parent=VPN-IOS_ADM index=1
proxyid_num=1 child_num=0 refcnt=6 ilast=0 olast=0 ad=/0
stat: rxp=5250 txp=5377 rxb=2228688 txb=3276890
dpd: mode=on-demand on=1 idle=20000ms retry=3 count=0 seqno=0
natt: mode=silent draft=32 interval=10 remote_port=4500
proxyid=VPN-IOS_ADM proto=0 sa=1 ref=2 serial=1 add-route
src: 0:192.168.0.0-192.168.255.255:0
dst: 0:172.16.20.2-172.16.20.2:0
SA: ref=6 options=a7 type=00 soft=0 mtu=1422 expire=3426/0B replaywin=1024
seqno=1500 esn=0 replaywin_lastseq=00001480 itn=0
life: type=01 bytes=0/0 timeout=3585/3600
dec: spi=3120eb97 esp=aes key=32 c8b94ab8f527c0ba74be17b37ac16b3bc362b221e482182b0ccb303bd2059881
ah=sha256 key=32 d269c8b8a477df069edb769d599ab74f69eb04bfa39585b479a37ea41c7b7709
enc: spi=0422d225 esp=aes key=32 f1744aa4cb34ec44aaeda1af216b936171fd7fe16d167eb1fc66b3f3921df182
ah=sha256 key=32 7b7c3b4fe39adf2c323542ded69e5f477847285f8a0cd292f1f941ef406314dd
dec:pkts/bytes=5250/2228520, enc:pkts/bytes=5382/3277622
npu_flag=03 npu_rgwy=133.236.182.81 npu_lgwy=61.26.68.197 npu_selid=b
FGT60D #
動作確認
iPhoneを使って動作確認します。観点は二つ。一つはVPNトンネルを通りLAN側にあるWebサーバへ接続できることを確認します。もう一つはインターネットへ直接抜けているかを確認する為Facebookへアクセスします。(スプリットトンネル機能の確認です)
どちらもFortigateでパケットキャプチャを仕掛けた状態で実施します。
VPNトンネルを通りLAN側Webサーバへ接続
まずはFortigateでパケットキャプチャをします。
FGT60D # diagnose sniffer packet VPN-IOS_ADM
次にiPhoneから内部のサーバに接続します。https://192.168.100.10(ESXiの管理ページ)
接続したところ上記の通り表示されました。また下記ではVPNインタフェースでパケットが流れてきていることが確認できます。
FGT60D # diagnose sniffer packet VPN-IOS_ADM
interfaces=[VPN-IOS_ADM]
filters=[none]
pcap_lookupnet: VPN-IOS_ADM: no IPv4 address assigned
11.957006 172.16.20.1.49716 -> 192.168.100.10.443: syn 757645711
12.008369 192.168.100.10.443 -> 172.16.20.1.49716: syn 1935264203 ack 757645712
12.056945 172.16.20.1.49716 -> 192.168.100.10.443: ack 1935264204
12.145957 192.168.100.10.443 -> 172.16.20.1.49716: 1935264204 ack 757646229
12.146109 192.168.100.10.443 -> 172.16.20.1.49716: psh 1935265432 ack 757646229
<以下、省略>
LAN側のVPNトンネル通信の確認は以上です。
インターネットへ直接抜ける確認
次にインターネットへ直接抜ける通信確認をします。確認方法として、Fortigateでパケットキャプチャをした状態でFacebookへ接続し、パケットキャプチャ上に何も表示されないことを確認します。
FGT60D # diagnose sniffer packet VPN-IOS_ADM
Facebookのログイン画面に接続してみました。
インターネット側のFacebookも正常に表示されます。また想定通り下記のパケットキャプチャでは何も表示されません。このことからVPNトンネルは通っておらず直接インターネットへ抜けスプリットトンネル機能が働いていることが分かります。
FGT60D # diagnose sniffer packet VPN-IOS_ADM
interfaces=[VPN-IOS_ADM]
filters=[none]
pcap_lookupnet: VPN-IOS_ADM: no IPv4 address assigned
以上です。
ディスカッション
コメント一覧
まだ、コメントがありません