Fortigate L2TP/IPsec VPNでLAN環境にリモートアクセスする
はじめに
FortigateでWindows標準のL2TP/IPsecを使ったVPN接続をします。iPhoneやMacもL2TPを標準実装してますので利用可能です。
以前、iPhone・MacからFortigateへIPsec VPNでLAN環境に接続する記事を書きました。こちらは後述のスプリットトンネルにも対応した内容です。
以前の記事:iPhone(iOS)・Mac <-> Fortigate間VPNでLAN環境にリモート接続する
構成・要件
要件は下記の通りです。
- WindowsPCはポケットWi-Fi経由でインターネットに接続します。
- Fortigateのwan側インタフェースはグローバルIPアドレスを直接持ちexample.comのFQDNが割り当てられています。
- インターネット向け通信はL2TPトンネルでFortigateまで到達し、Fortigateのwan1インタフェースから外に出るようにします。
- L2TP接続時の認証はユーザIDとパスワード方式です。
※補足:L2TP使用時のスプリットトンネルについて
条件に合致したパケットのみ(例えば宛先IPアドレスがLAN内のIPアドレスだった場合)VPNトンネルを通す技術をスプリットトンネルと言います。
スプリットトンネルを使うことで例えばインターネット向け通信はVPNトンネルではなく直接インターネットへ送出させVPNゲートウェイ装置の負荷や無駄なトラフィックフローを発生させなくすることができます。
スプリットトンネルの設定は下記の『set mode-cfg enable』でIPsecのモードConfigという拡張機能をONにし、その下のスプリット対象ネットワークを指定することで実装します。以前のIPsecVPNでは動作しましたがL2TPのWindows10環境では本設定をするとL2TP/IPsec接続ができませんでした。FortigateのデバッグログでもピアがConfigを読み込めませんというメッセージが流れてました。そのため、スプリトトンネルは諦めてインターネット通信も一度Fortigateを経由させる方式としました。

下記は今回検証で使用する機器とOS Versionです。
用途 | 機器 | OS Version |
---|---|---|
L2TP/IPsec装置 | Fortigate 60D | v6.0.10 build0365 |
クライアントPC | – | Windows 10 Pro (19041.572) |
Fortigateの設定
Fortigateの設定について説明します。(なお、インタフェースやルーティング等の基本的な設定は割愛します)
ユーザ作成
L2TP認証時のユーザを作成します。今回はkantaroのuserアカウントのみ作成しますが、もし複数人で利用する場合は「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
LAN向け通信用のAddress Objectの作成
後に作成するFirewallポリシーで使用するAddress Objectです。
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、L2TPクライアント向け配布IPアドレスの作成
L2TP/IPsecの設定です。
『config vpn l2tp』では「set sip」「set eip」で設定したIPアドレスからクライアントのIPアドレスが割り当てられます。
config vpn ipsec phase1-interface
edit "P1_VPN-L2TP"
set type dynamic
set interface "wan1"
set peertype any
set proposal aes256-md5 3des-sha1 aes192-sha1
set dpd on-idle
set dhgrp 14
set psksecret [任意のパスワード入力]
set dpd-retryinterval 60
next
end
config vpn ipsec phase2-interface
edit "P2_VPN-L2TP"
set phase1name "P1_VPN-L2TP"
set proposal aes256-md5 3des-sha1 aes192-sha1
set pfs disable
set encapsulation transport-mode
set l2tp enable
set keylifeseconds 3600
next
end
config vpn l2tp
set eip 172.16.30.10
set sip 172.16.30.1
set status enable
set usrgrp "VPN-GROUP_ADMIN"
end
Firewall Policyの作成
edit 23はL2TPの接続とインターネットへ抜ける為のポリシーです。edit24はLAN側通信向けのポリシーです。
serviceなどが全許可になっていますが限られた通信のみ許可したい場合はアドレスやサービス等の設定を細かく設定する必要があります。
なお、edit23とedit24をマージした書き方も可能ですが、当方はインターネット向け通信は送信元NATを使い、LAN向け通信は非NATで通信させたいので分けました。
config firewall policy
edit 23
set name "INET_L2TP_ADMIN-->FGT:L2TP,INET"
set srcintf "P1_VPN-L2TP"
set dstintf "wan1"
set srcaddr "all"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
set nat enable
next
edit 24
set name "INET_L2TP_ADMIN-->LAN"
set srcintf "P1_VPN-L2TP"
set dstintf "internal1"
set srcaddr "all"
set dstaddr "ADGRP_ALL-LAN"
set action accept
set schedule "always"
set service "ALL"
next
end
Fortigate側の設定は以上です。
L2TP/IPsecクライアントのWindows10の設定
Windows10の設定
L2TP/IPsecクライアントであるWindows10の設定を行います。






「接続済み」になったらWindows10の設定は完了です。
Fortigate ステータス確認
次にL2TP/IPsec接続をしている状態でFortigateのステータスを確認します。
まずはルーティングテーブルから確認します。6行目と7行目にL2TP/IPsecクライアントの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
C 172.16.30.1/32 is directly connected, ppp1
C 172.16.30.2/32 is directly connected, ppp1
C 192.168.0.0/24 is directly connected, internal1
<省略>
FGT60D #
「diagnose vpn ike gateway list」でIPsecの状態を確認します。接続できていると『id/spi~DPD』の行までが表示されます。
FGT60D # diagnose vpn ike gateway list
vd: root/0
name: P1_VPN-L2TP_0
version: 1
interface: wan1 5
addr: 61.26.68.197:4500 -> 203.180.211.17:4500
created: 26s ago
nat: peer
IKE SA: created 1/1 established 1/1 time 130/130/130 ms
IPsec SA: created 1/1 established 1/1 time 50/50/50 ms
id/spi: 1882 1eb3fac3c69db701/6def954c58076b25
direction: responder
status: established 26-26s ago = 130ms
proposal: 3des-sha1
key: 0d92c5fff7a47045-00278499934c60ce-b3abe98199351668
lifetime/rekey: 28800/28503
DPD sent/recv: 00000000/00000000
FGT60D #
「diagnose vpn tunnel list」でIPsecの状態を確認します。接続できていると『src~npu』の行までが表示されます。
FGT60D # diagnose vpn tunnel list
list all ipsec tunnel in vd 0
------------------------------------------------------
name=P1_VPN-L2TP_0 ver=1 serial=ab 61.26.68.197:4500->203.180.211.17: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=P1_VPN-L2TP index=0
proxyid_num=1 child_num=0 refcnt=6 ilast=0 olast=0 ad=/0
stat: rxp=292 txp=171 rxb=61088 txb=40907
dpd: mode=on-idle on=1 idle=60000ms retry=3 count=0 seqno=0
natt: mode=silent draft=32 interval=10 remote_port=4500
proxyid=P2_VPN-L2TP proto=17 sa=1 ref=2 serial=1 transport-mode add-route
src: 17:61.26.68.197-61.26.68.197:1701
dst: 17:203.180.211.17-203.180.211.17:0
SA: ref=4 options=1a6 type=00 soft=0 mtu=1462 expire=3547/0B replaywin=1024
seqno=4ac esn=0 replaywin_lastseq=00000124 itn=0
life: type=01 bytes=0/0 timeout=3589/3600
dec: spi=3120eda3 esp=3des key=24 23979aa19c8caa94e7c485800d184cdbdbbc8af25705399d
ah=sha1 key=20 6d0a4d07b7ff690c87f503802809387e145caa3a
enc: spi=97e46c32 esp=3des key=24 2a65195b4304117196b57a6be27e99e975809ea558c7e2cf
ah=sha1 key=20 79389e3fe7c2427a59fb3234ba6bdad3c41f5f85
dec:pkts/bytes=292/43219, enc:pkts/bytes=171/47952
npu_flag=00 npu_rgwy=203.180.211.17 npu_lgwy=61.26.68.197 npu_selid=66
FGT60D #
動作確認
動作確認します。Windows10からLANとインターネットのWeb通信を行います。
どちらもFortigateでパケットキャプチャを仕掛けた状態で実施します。
LAN側Webサーバへ接続
まずはFortigateでパケットキャプチャをします。 パケットキャプチャの詳細を知りたい人は→※Fortigateによるパケットキャプチャ方法
FGT60D # diagnose sniffer packet any "host 192.168.0.15"
次にクライアントから内部のサーバに接続し表示されることを確認します。(http://192.168.0.15はQNAPのWeb管理画面ページ。)

下記のパケットキャプチャでもL2TP/IPsecクライアントと通信されていることがわかります。(L2TP/IPsecクライアントのIPアドレスが「172.16.30.2」)
FGT60D # diagnose sniffer packet any "host 192.168.0.15"
interfaces=[any]
filters=[host 192.168.0.15]
41.013619 172.16.30.2.51646 -> 192.168.0.15.8080: syn 2695996108
41.020777 172.16.30.2.51647 -> 192.168.0.15.8080: syn 3174210547
41.022804 arp who-has 192.168.0.15 tell 192.168.0.254
41.032168 arp reply 192.168.0.15 is-at 24:5e:be:22:27:fb
41.032348 172.16.30.2.51646 -> 192.168.0.15.8080: syn 2695996108
41.032442 172.16.30.2.51647 -> 192.168.0.15.8080: syn 3174210547
41.034607 192.168.0.15.8080 -> 172.16.30.2.51646: syn 2611177624 ack 2695996109
41.034725 192.168.0.15.8080 -> 172.16.30.2.51646: syn 2611177624 ack 2695996109
41.035212 192.168.0.15.8080 -> 172.16.30.2.51647: syn 3791964485 ack 3174210548
41.035291 192.168.0.15.8080 -> 172.16.30.2.51647: syn 3791964485 ack 3174210548
41.065757 172.16.30.2.51646 -> 192.168.0.15.8080: ack 2611177625
41.066755 172.16.30.2.51646 -> 192.168.0.15.8080: ack 2611177625
41.065832 172.16.30.2.51647 -> 192.168.0.15.8080: ack 3791964486
41.067340 172.16.30.2.51647 -> 192.168.0.15.8080: ack 3791964486
<続く…>
LAN側のL2TPトンネル通信の確認は以上です。
インターネットへ接続
次にインターネット(Facebookのログイン画面)へ直接抜ける通信確認をします。まずはパケットキャプチャを仕掛けます。
なお、下記の31.13.82.1はFacebookログインページ(https://ja-jp.facebook.com)のIPアドレスです。
FGT60D # diagnose sniffer packet any "host 31.13.82.1"
Facebookのログインページにアクセスし表示することを確認します。

下記のパケットキャプチャでもL2TP/IPsecクライアントで通信が行われていることがわかります。(L2TP/IPsecクライアントのIPアドレスが「172.16.30.2」)
FGT60D # diagnose sniffer packet any "host 31.13.82.1"
interfaces=[any]
filters=[host 31.13.82.1]
5.318546 172.16.30.2.51041 -> 31.13.82.1.443: syn 1110992028
5.320559 61.26.68.197.51041 -> 31.13.82.1.443: syn 1110992028
5.323286 31.13.82.1.443 -> 61.26.68.197.51041: syn 3544140722 ack 1110992029
5.323434 31.13.82.1.443 -> 172.16.30.2.51041: syn 3544140722 ack 1110992029
5.357710 172.16.30.2.51041 -> 31.13.82.1.443: ack 3544140723
5.358914 61.26.68.197.51041 -> 31.13.82.1.443: ack 3544140723
<続く…>
なお、tracerouteを実施し、1stホップでFortigateのL2TPトンネルのIPアドレスになっていることが確認できます。
C:\Users\kantaro>tracert -d 31.13.82.1
31.13.82.1 へのルートをトレースしています。経由するホップ数は最大 30 です
1 648 ms 55 ms 35 ms 172.16.30.1
2 48 ms 41 ms 53 ms 61.25.59.225
3 71 ms 48 ms 34 ms 172.25.107.5
4 76 ms 33 ms 39 ms 10.202.115.227
5 38 ms 36 ms 39 ms 172.25.25.81
6 39 ms 38 ms 53 ms 10.1.0.237
7 91 ms 64 ms 48 ms 203.165.19.189
8 35 ms 36 ms 38 ms 203.165.19.190
9 55 ms 37 ms 39 ms 203.165.0.18
10 41 ms 36 ms 37 ms 61.25.0.174
11 36 ms 35 ms 36 ms 173.252.66.89
12 41 ms 40 ms 50 ms 157.240.38.223
13 63 ms 41 ms 32 ms 31.13.82.1
トレースを完了しました。
C:\Users\kantaro>
FortigateのL2TP/IPsecの設定方法は以上です。
ディスカッション
コメント一覧
まだ、コメントがありません