Fortigate L2TP/IPsec VPNでLAN環境にリモートアクセスする

VPN IPsecFortigate,L2TP/IPsec,VPN

はじめに

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 60Dv6.0.10 build0365
クライアントPCWindows 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の設定方法は以上です。