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.

Windows VPN Konfiguration für strongSwan

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.

Windows VPN Connections List

Schritt 5 – Verbinden über macOS

Öffne Systemeinstellungen >> Netzwerk und klicke auf das Pluszeichen (+) oben rechts, um einen neuen Dienst hinzuzufügen.

macOS Neuen Netzwerkdienst hinzufügen

Wähle VPN als Schnittstelle, IKEv2 als VPN-Typ und gib deinem Dienst einen Namen. Klicke auf die Schaltfläche Erstellen, um fortzufahren.

macOS strongSwan Konfiguration

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.

macOS strongSwan Authentifizierungseinstellungen

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.

macOS VPN Icon

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.

strongSwan Android Konfiguration

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.

strongSwan iOS VPN Settings

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.

Das könnte dich auch interessieren …