Möchte man mit einem Windows Endgerät ein Client-VPN zu einer FortiGate als VPN-Gateway aufbauen, so gibt es abseits des Fortinet FortiClients verschiedene Varianten.
In diesem Beitrag stelle ich die Konfiguration eines Client-VPN mit IKEv2 zwischen einer FortiGate mit Nutzern in der lokalen Datenbank und der Windows integrierten IKEv2 Implementierung vor.
Folgende Komponenten und Versionen wurden in diesem Aufbau verwendet:
FortiGate: 60F
FortiOS: 7.2.0
Windows 10: 21H1 (Build 19043.1682)
Windows 11:
Der Einfachheit halber verwende ich in diesem Beitrag eine lokale Benutzerdatenbank der FortiGate Firewall und die Authentifizierung wird mittels Benutzernamen und Kennwörtern durchgeführt. Eine Authentifizierung mittels Client-Zertifikaten und die Anbindung externer Benutzerdatenbanken bspw. per RADIUS ist mit einer erweiterten Konfiguration möglich.
Konfiguration der Fortigate Firewall:
Die Konfiguration starten wir in der IPsec Konfiguration der FortiGate Firewall im Menüpunkt VPN –> IPSec Tunnels –> Create New –> IPsec Tunnel.
Wir befinden uns jetzt im IPsec Wizard und stellen dort den „Template type“ auf Custom:
In dem sich nun öffnenden Formular müssen nun einige Anpassungen durchgeführt werden.
Als erstes wird der Typ des Remote Gateway auf Dialup User umgestellt und die WAN-Schnittstelle der FortiGate Firewall unter Interface ausgewählt.
Damit die VPN Clients mit einer IP-Konfiguration versorgt werden, ist es notwendig die Funktion „Mode Config“ zu aktiveren und einen IP-Adressbereich, sowie den zu nutzenden DNS-Server festzulegen:
In dem folgenden Abschnitt wird die IKE Version auf 2 umgestellt und die Peer-IDs werden an dieser Stelle nicht weiter eingeschränkt. Die Windows IKEv2 Implementierung erfordert ein valides Zertifikat um den Key Exchange mit der FortiGate Firewall zu validieren.
An dieser Stelle können auch Zertifikate von LetsEncrypt verwendet werden, wie dies funktioniert erkläre ich hier.
Die Verschlüsselungsparameter in Phase 1 wird auf AES256GCM mit PRFSHA384 und der Diffie-Hellmann Group 20 (ECP384) eingerichtet:
Auch in den Verschlüsselungsparameter der Phase 2 wird wieder auf AES256GCM und der Diffie-Hellmann Group 20 (ECP384) gesetzt:
Für den Login müssen jetzt die lokalen Benutzer unter „User & Authentication –> User Definition“ erstellt werden:
Die erstellten Benutzer werden dann einer Benutzergruppe zugeordnet:
Auf der CLI müssen nun noch Anpassungen in der Phase1 Konfiguration durchgeführt werden, diese sind aktuell nicht in der GUI möglich.
Als erstes wird die vorhin erstellte Benutzergruppe hinzugefügt und zusätzlich wird das „client-auto-negotiate“ und „client-keep-alive“ aktiviert, um Probleme mit untätigen Clients zu verhindern :
config vpn ipsec phase1-interface
edit "Client-VPN"
set eap enable
set eap-identity send-request
set authusrgrp "VPN-User"
set client-auto-negotiate enable
set client-keep-alive enable
next
end
Abschließend muss auf der FortiGate Firewall noch das jeweilige Firewall-Regelwerk eingerichtet werden, damit die Endgeräte auch die notwendigen Ressourcen erreichen können.
FortiGate CLI Konfiguration:
Auf der CLI der FortiGate lässt sich die gesamte Konfiguration mit folgenden Befehlen einrichten:
config user local
edit "<Benutzername>"
set type password
set passwd <VPN-Kennwort>
next
end
config user group
edit "VPN-User"
set member "<Benutzername>"
next
end
config vpn ipsec phase1-interface
edit "Client-VPN"
set type dynamic
set interface "wan1"
set ike-version 2
set authmethod signature
set peertype any
set net-device disable
set mode-cfg enable
set proposal aes256gcm-prfsha384
set dpd on-idle
set dhgrp 20
set eap enable
set eap-identity send-request
set authusrgrp "VPN-User"
set certificate "vpn-home.kupschke.net"
set ipv4-start-ip 192.168.244.1
set ipv4-end-ip 192.168.244.100
set dns-mode auto
set client-auto-negotiate enable
set client-keep-alive enable
set dpd-retryinterval 60
next
end
config vpn ipsec phase2-interface
edit "Client-VPN"
set phase1name "Client-VPN"
set proposal aes256gcm
set dhgrp 20
set keepalive enable
set keylifeseconds 3600
next
end
Windows 10 / 11 Client Konfiguration:
Die Konfiguration des Windows 10 / 11 Clients werde ich in der Powershell durchführen, da die vorgegebenen Verschlüsselungsparameter bei der Nutzung der GUI nicht mehr zeitgemäß sind (SHA1 und DH Group 2…).
Mit folgenden Befehlen wird der VPN Tunnel erstellt:
C:\>Add-VpnConnection -Name "FortiGate" -ServerAddress vpn-home.kupschke.net -TunnelType "Ikev2"
C:\> Set-VpnConnectionIPsecConfiguration -ConnectionName "FortiGate" -AuthenticationTransformConstants GCMAES256 -CipherTransformConstants GCMAES256 -EncryptionMethod GCMAES256 -IntegrityCheckMethod SHA384 -PfsGroup ECP384 -DHGroup ECP384 -PassThru -Force
Aus der Windows Taskleiste heraus lässt sich nun das VPN starten:
Details der VPN-Verbindung auf der CLI anzeigen:
Die IKE SA bzw. Phase 1 Details der aktiven VPN Sessions lassen sich mit folgendem Befehl anzeigen:
# get vpn ike gateway
vd: root/0
name: Client-VPN_0
version: 2
interface: wan1 5
addr: 192.168.178.25:4500 -> 193.43.221.2:5256
created: 287s ago
user: dominik
2FA: no
assigned IP address: 192.168.244.1/0.0.0.0
IKE SA created: 1/1 established: 1/1 time: 350/350/350 ms
IPsec SA created: 1/1 established: 1/1 time: 0/0/0 ms
id/spi: 1245 e51773f89138060c/4bace78fb5849b40
direction: responder
status: established 287-287s ago = 350ms
proposal: aes256gcm
SK_ei: ece8a1cec6528430-597bf160b6cfdad7-948a3df294119744-977911b27d99d74a-9bbe91de
SK_er: 95bbad416645f3da-810997340e747c5c-4fe3170a7b09435b-d297a135fda77558-9c9f0c65
SK_ai:
SK_ar:
lifetime/rekey: 3600/3042
DPD sent/recv: 00000000/00000000
Die Phase 2 Details lassen sich dann mit folgendem Befehl ausgeben:
# get vpn ipsec tunnel details
gateway
name: 'Client-VPN_0'
local-gateway: 192.168.178.25:4500 (static)
remote-gateway: 193.43.221.2:5256 (dynamic)
dpd-link: on
mode: ike-v2
interface: 'wan1' (5)
rx packets: 908 bytes: 187954 errors: 0
tx packets: 966 bytes: 341922 errors: 0
dpd: on-idle/negotiated idle: 60000ms retry: 3 count: 0
nat traversal mode: keep-alive interval: 10
selectors
name: 'Client-VPN'
auto-negotiate: disable
mode: tunnel
src: 0:0.0.0.0-255.255.255.255:0
dst: 0:192.168.244.1-192.168.244.1:0
SA
lifetime/rekey: 3600/3252
mtu: 1438
tx-esp-seq: 3c5
replay: enabled
qat: 0
inbound
spi: cf6c19d0
enc: aes-gc b6d5f8c0fec41da5dfb5671f0d2ab902450db100b644f0539667633c2a27062df4be877c
auth: null
outbound
spi: b8d9710a
enc: aes-gc 02293b60f95580b85b60fdbf9a0fb3e565d99e400ab6315707a317f2fe2e6a177ff5ff7d
auth: null
NPU acceleration: encryption(outbound) decryption(inbound)
In der Phase1 sollten noch folgende Parameter gesetzt werden damit der Tunnel nicht „idle-t“
config vpn ipsec phase1-interface
edit „Client-VPN“
set client-auto-negotiate enable
set client-keep-alive enable
next
end
Zudem „pusht“ die Fortigate im Split-Tunnel-Modus unter Windows, keine Routen, da WIndows das über einen DHCP-Inform macht. Dazu kann aber ein DHCP-Server auf dem Tunnel-Interface der per Option 121 statische Routen verteilt Abhilfe schaffen.
Danke für den Hinweis!
Ich habe die Parameter in meinen Artikel mit aufgenommen.
Leider geht die Variante wohl nur mit lokalen Benutzern oder Zertifikaten. https://community.fortinet.com/t5/FortiGate/Technical-Tip-IKEv2-tunnel-fails-when-LDAP-based-usergroup-is/ta-p/214966
Die alternative Radius mit EAP-MSCHAPv2 geht wohl mit FortiClient, der native Windows VPN Client mag aber leider kein MSCHAPv2: IKEv2 tunnel type only supports Eap and Machine certificate as authentication method.
Hallo Oliver,
ich habe in meinem Lab nun die FortiGate an einen FortiAuthenticator per RADIUS angebunden.
Ein Windows 11 Client mit nativen IKEv2 Client konnte sich erfolgreich mit Benutzernamen und Kennwort anmelden.
VG
Dominik
Welche Parameter hast Du für die RADIUS-Anbindung geändert?
VG
Günther
Hallo Dominik,
wenn du auf der Phase-1 per CLI: set authusrgrp „VPN-User“ konfiguriertes, dann wird das garn nichts so funktionieren. Du machst die User/Group-Authentication direkt auf der Firewall-Policy.
https://docs.fortinet.com/document/fortigate/6.4.11/administration-guide/726232/windows-ikev2-native-vpn-with-user-certificate
VG
Vitali
Hallo Vitali,
für eine Umgebung mit User Certificates magst du recht haben und darum dreht es sich auch in deinem Link, mein Artikel behandelt allerdings eine Umsetzung mit lokalen Benutzern.
Hier ein KB-Artikel, in dem die „authusrgrp“ im phase1-interface gesetzt wird und in der Firewall-Policy ausschließlich der IP-Bereich der Clients genutzt wird:
https://community.fortinet.com/t5/FortiGate/Technical-Tip-Configure-FortiClient-IPSEC-dialup-VPN-with-static/ta-p/193516
VG
Dominik
Funktioniert prächtig 🙂 Wie zu erwarten 🙂
Wunderbarer Artikel, danke dafür!
> Peer-IDs werden an dieser Stelle nicht weiter eingeschränkt
Was ist, wenn man sie doch einschränken möchte? Kann man dem nativen Windows IPSec VPN Client irgendwie die Peer-ID mitgeben?
Danke!
Zumindest aktuell ist mir da nichts bekannt, aber andere Client Betriebssysteme wie MacOS, iOS und Android können es ja auch.
Evtl. setzt Windows selbstständig schon eine Peer-ID, diese würde man dann während des Verbindungsaufbaus im Debuglog des ike Dienstes finden!
Super Anleitung !
Ich habe meine Zertifikate per openssl auf Ubuntu erstellt und die Authentifizierung per machine-certificate ohne EAP verwendet.
Mit den obigen Einstellungen aes256gcm-prfsha384 / DH:20 — aes256gcm / DH:20 scheiterte der Aufbau mit dem irreführenden Error 13806 (IPSEC_IKE_NO_CERT).
Mit der Einstellung DH:14 hat es dann wunderbar geklappt.
Schön zu hören, dass meine Anleitung weiterhelfen konnte!
Ist das auch irgendwie mit SSO möglich? Also so, dass man keine lokalen User auf der FG anlegt, sondern dass die User sich mit ihren Logindaten, mit denen Sie eh schon eingeloggt sind, mit dem VPN verbinden? Evtl. auch mit Integration von Sicherhitsgruppen im MS Entra AD?
Hi,
da würde ich eher in Richtung FortiClient mit einer SAML Integration der FortiGate und MS Entra ID schauen:
https://learn.microsoft.com/en-us/entra/identity/saas-apps/fortigate-ssl-vpn-tutorial
Das ganze wäre dann allerdings auch ein SSL-VPN und kein IPSec VPN.
Update:
Der FortiClient kann wohl mittlerweile auch SAML bei IPSec VPNs:
https://docs.fortinet.com/document/fortigate/7.2.0/new-features/951346/saml-based-authentication-for-forticlient-remote-access-dialup-ipsec-vpn-clients