Wie man IKEv2 IPSec VPN mit strongSwan und Let’s Encrypt auf Rocky Linux 9 einrichtet
Wenn du nach einer Client-to-Site-VPN-Lösung suchst, dann ziehst du vielleicht eine IKEv2 EAP-Lösung gegenüber OpenVPN oder Wireguard vor. Eine solche Lösung ist äußerst hilfreich, wenn du ständig unterwegs bist und eine VPN-Lösung benötigst, mit der du dich einfach verbinden kannst, ohne einen Client herunterzuladen oder einen Schlüssel zu benötigen. strongSwan ist ein plattformübergreifendes IPSec-basiertes Open-Source-VPN, das sich in einem solchen Fall als nützlich erweisen kann. Es kann eine Authentifizierung auf Basis von X.509-Zertifikaten oder der sicheren IKEv2 EAP-Benutzerauthentifizierung bieten.
In diesem Tutorial erfährst du, wie du ein IKEv2 IPSec VPN mit strongSwan einrichtest, indem du die EAP-MSCHAPv2
Authentifizierung zusammen mit Let’s Encrypt SSL Zertifikaten auf einem Rocky Linux 9 Server verwendest. Außerdem lernst du, wie du dich mit Windows-, macOS-, Linux- und Android-Clients mit dem VPN verbinden kannst.
Voraussetzungen
- Ein Server mit Rocky Linux 9. Je nach Anzahl der Benutzer, die sich mit ihm verbinden, musst du die Serverspezifikationen aktualisieren.
- Ein Nicht-Root-Benutzer mit sudo-Rechten.
- Ein vollständig qualifizierter Domainname (FQDN) wie
vpn.example.com
. - Stelle sicher, dass alles auf dem neuesten Stand ist.
$ sudo dnf update
- Einige wenige Pakete, die dein System benötigt.
$ sudo dnf install wget curl nano unzip yum-utils -y
Einige dieser Pakete sind vielleicht schon auf deinem System installiert.
Schritt 1 – Netzwerk und Firewall konfigurieren
Aktiviere die IP-Paketweiterleitung in den Kernel-Optionen.
$ echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.conf $ sudo sysctl -p
Füge den IPSec-Dienst zur Firewall Firewalld hinzu.
$ sudo firewall-cmd --permanent --add-service=ipsec
Außerdem brauchen wir HTTP- und HTTPS-Ports, um zu funktionieren. Öffne sie.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Erlaube NAT-Paketweiterleitung, auch bekannt als IP-Masquerade.
$ sudo firewall-cmd --permanent --add-masquerade
Lade die Firewall neu, um die Änderungen zu übernehmen.
$ sudo firewall-cmd --reload
Schritt 2 – SSL installieren
Wir müssen Certbot installieren, um das SSL-Zertifikat zu erstellen.
Dazu verwenden wir den Snapd-Paketinstaller. Da Rocky Linux nicht mit diesem Paket ausgeliefert wird, installierst du den Snapd-Installer. Er benötigt das EPEL-Repository, um zu funktionieren.
$ sudo dnf install -y epel-release
Installiere Snapd.
$ sudo dnf install -y snapd
Aktiviere und starte den Snap-Dienst.
$ sudo systemctl enable snapd --now
Installiere das Snap-Kernpaket und stelle sicher, dass deine Version von Snapd auf dem neuesten Stand ist.
$ sudo snap install core && sudo snap refresh core
Erstelle die notwendigen Links, damit Snapd funktioniert.
$ sudo ln -s /var/lib/snapd/snap /snap $ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Gib den folgenden Befehl ein, um Certbot zu installieren.
$ sudo snap install --classic certbot
Stelle mit dem folgenden Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin
erstellst.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Überprüfe die Installation.
$ certbot --version certbot 2.3.0
Führe den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen.
$ sudo certbot --key-type rsa certonly --standalone --agree-tos --no-eff-email --preferred-challenges http -m name@example.com -d vpn.example.com
Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/vpn.example.com
auf deinem Server heruntergeladen.
Um zu überprüfen, ob die SSL-Erneuerung einwandfrei funktioniert, führe einen Probelauf des Prozesses durch.
$ sudo certbot renew --dry-run
Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.
Schritt 3 – Installiere strongSwan
Für die Installation von strongSwan ist das EPEL-Repository erforderlich, aber da wir es bereits im vorherigen Schritt installiert haben, kannst du diesen Schritt überspringen. Installiere strongSwan mit dem folgenden Befehl.
$ sudo dnf install strongswan
Erstelle einen Symlink für die Zertifikate im Verzeichnis /etc/strongswan/swanctl
.
$ sudo ln -s /etc/letsencrypt/live/vpn.example.com/fullchain.pem /etc/strongswan/swanctl/x509 $ sudo ln -s /etc/letsencrypt/live/vpn.example.com/privkey.pem /etc/strongswan/swanctl/private $ sudo ln -s /etc/letsencrypt/live/vpn.example.com/chain.pem /etc/strongswan/swanctl/x509ca
Erstelle eine strongSwan-Konfigurationsdatei und öffne sie zur Bearbeitung.
$ sudo nano /etc/strongswan/swanctl/conf.d/my_vpn.conf
Füge den folgenden Code in die Datei ein.
connections { ikev2-eap-mschapv2 { version = 2 proposals = aes256-sha256-modp4096,aes256-sha256-modp2048,aes256gcm16-sha256-modp1024 rekey_time = 0s pools = pool-ipv4 fragmentation = yes dpd_delay = 30s send_cert=always unique = never local { id = vpn.example.com certs = fullchain.pem } remote { auth = eap-mschapv2 eap_id = %any } children { ikev2-eap-mschapv2 { local_ts = 0.0.0.0/0 rekey_time = 0s dpd_action = clear esp_proposals = aes256-sha256-sha1 } } } } pools { pool-ipv4 { addrs = 10.1.1.0/24 dns = 1.1.1.1, 8.8.8.8 } } secrets { eap-User1 { id = username1 secret = "password1" } }
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du danach gefragt wirst.
Wenn du sowohl IPv4 als auch IPv6 durch das VPN tunneln möchtest, musst du einen IPv6 Pool, DNS und ein lokales Subnetz zuweisen. Ersetze die Werte der Variablen local_ts
, addrs
und dns
durch die folgenden Werte.
local_ts = 0.0.0.0/0,::/0 .... addrs = 10.1.1.0/24,2a00:1450:400c:c05::/112 dns = 8.8.8.8,2001:4860:4860::8888
Deaktiviere das OpenSSL-Plugin, da OpenSSL unter Rocky Linux 9 keine RSA-Signaturen mit SHA-1 zulässt und dadurch die Authentifizierung fehlschlägt.
$ sudo sed -i "s/load = yes/load = no/" /etc/strongswan/strongswan.d/charon/openssl.conf
Aktiviere und starte den strongSwan-Dienst.
$ sudo systemctl enable strongswan $ sudo systemctl start strongswan
Schritt 4 – Verbinden über Windows
Öffne die Anwendung Einstellungen und wähle den Menüpunkt Netzwerk und Internet. Wähle das Menü VPN und klicke dann auf die Schaltfläche VPN-Verbindung hinzufügen.
Klicke auf die Schaltfläche Speichern und wähle dann das hinzugefügte VPN aus und klicke auf die Schaltfläche Verbinden, um das VPN zu starten.
Schritt 5 – Verbinden über macOS
Öffne Systemeinstellungen >> Netzwerk und klicke auf das Pluszeichen (+) oben rechts, um einen neuen Dienst hinzuzufügen.
Wähle VPN als Schnittstelle, IKEv2 als VPN-Typ und gib deinem Dienst einen Namen. Klicke auf die Schaltfläche Erstellen, um fortzufahren.
Gib deinen Domainnamen als Serveradresse und Remote ID ein. Lass das Feld Lokale ID leer. Klicke auf die Schaltfläche Authentifizierungseinstellungen, um ein neues Popup zu öffnen.
Wähle Benutzername als Authentifizierungseinstellungen und gib die zuvor erstellten Anmeldedaten ein. Klicke auf die Schaltfläche Ok, um die Einstellung zu speichern. Klicke unten auf die Schaltfläche Anwenden, um die Einstellung zu speichern. Klicke dann auf die Schaltfläche Verbinden, um dich mit dem VPN zu verbinden.
Sobald du es hinzugefügt hast, erstellt macOS eine Verknüpfung für das VPN in der Menüleiste. Von dort aus kannst du dich direkt mit dem VPN verbinden.
Schritt 6 – Verbinden über Android
Öffne das Menü Android Einstellungen >> Netzwerk und Internet >> VPN. Klicke auf das Pluszeichen (+) oben rechts auf dem Bildschirm, um das VPN-Profil hinzuzufügen.
Gib der Verbindung einen Namen. Wähle IKEv2/IPSec MSCHAPv2 als VPN-Typ. Gib deine Domäne als Serveradresse ein. Gib eine beliebige Zeichenfolge als IPSec-Bezeichner ein. Gib den Benutzernamen und das Passwort ein, die du zuvor angegeben hast. Klicke zum Abschluss auf die Schaltfläche Speichern.
Wähle den Verbindungsnamen und klicke auf Verbinden, um das VPN zu nutzen.
Schritt 7 – Verbinden über iOS
Öffne die iOS-Einstellungen und klicke auf das Menü Allgemein. Klicke auf das Menü VPN und du erhältst ein ähnliches Menü wie unten abgebildet. Wähle IKEv2 als VPN-Typ.
Gib deinem VPN eine Beschreibung. Gib deine Domain als Wert für die Felder Server und Remote ID ein. Lass das Feld Lokale ID leer. Wähle Benutzerauthentifizierung als Benutzername und gib deine Anmeldedaten ein. Wähle “ Fertig“, wenn du fertig bist, und tippe auf den Schalter, um dich mit dem VPN zu verbinden.
Fazit
Damit ist unser Tutorium zur Einrichtung eines IKEv2 VPN mit strongSwan und Let’s Encrypt SSL auf einem Rocky Linux 9 Server abgeschlossen. Du hast dich auch über mehrere Clients mit dem VPN verbunden. Wenn du Fragen hast, schreibe sie unten in die Kommentare.