Wie man IKEv2 VPN mit Strongswan und Letsencrypt unter Ubuntu einrichtet
Strongswan ist eine quelloffene, plattformübergreifende IPSec-Implementierung. Es ist eine IPSec-basierte VPN-Lösung, die sich auf starke Authentifizierungsmethoden und -mechanismen konzentriert. Sie unterstützt sowohl IKEv1- als auch IKEv2-Schlüsselaustauschprotokolle, Authentifizierung auf Basis von X.509-Zertifikaten oder gemeinsam genutzten Schlüsseln und sichere IKEv2-EAP-Benutzerauthentifizierung.
In diesem Tutorial zeigen wir dir Schritt für Schritt, wie du den IPSec VPN Server mit Strongswan einrichtest. Wir werden einen IKEv2 VPN-Server mit der ‚EAP-MSCHAPv2‘-Authentifizierung einrichten und Letsencrypt-Zertifikate auf einem Ubuntu 18.04-Server verwenden.
Voraussetzungen
- Ubuntu 18.04
- Root-Rechte
Was werden wir tun?
- Strongswan auf Ubuntu 18.04 installieren
- SSL Letsencrypt generieren
- Strongswan konfigurieren
- NAT und Port-Forwarding UFW Firewall aktivieren
- Testen
Schritt 1 – Strongswan auf Ubuntu installieren
In diesem ersten Schritt installieren wir die Strongswan IPsec Implementierungssoftware und alle benötigten Pakete aus dem Ubuntu Repository.
Aktualisiere alle Repositories und installiere Strongswan mit dem unten stehenden apt-Befehl.
sudo apt update sudo apt install strongswan strongswan-pki libstrongswan-standard-plugins libstrongswan-extra-plugins
Warte, bis alle Pakete installiert sind.
Schritt 2 – SSL Letsencrypt generieren
Wir erstellen den IKEv2-VPN-Server mit dem Domainnamen „vpn.hakase-labs.pw“ und verwenden die von letsencrypt generierten Zertifikate.
In diesem Schritt installieren wir das letsencrypt-Tool „certbot“ und erstellen Zertifikate für den Server-Domainnamen „vpn.hakase-labs.pw“.
Installiere das letsencrypt-Tool „certbot“.
sudo apt install certbot -y
Nachdem die Installation abgeschlossen ist, generiere neue SSL-Zertifikatsdateien mit dem unten stehenden certbot-Befehl.
certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email tensaitux993@gmail.com -d vpn.hakase-labs.pw
Die Letsencrypt-Zertifikate für die vpn-Domäne „vpn.hakase-labs.pw“ wurden erstellt und befinden sich im Verzeichnis „/etc/letsencrypt/live“.
Als nächstes müssen wir die Zertifikatsdateien „fullchain.pem“, „privkey.pem“ und „chain.pem“ in das Verzeichnis „/etc/ipsec.d/“ kopieren.
Führe die folgenden Befehle aus.
cp /etc/letsencrypt/live/vpn.hakase-labs.pw/fullchain.pem /etc/ipsec.d/certs/ cp /etc/letsencrypt/live/vpn.hakase-labs.pw/privkey.pem /etc/ipsec.d/private/ cp /etc/letsencrypt/live/vpn.hakase-labs.pw/chain.pem /etc/ipsec.d/cacerts/
Alle letsencrypt-Zertifikate für das Strongswan-VPN mit dem Namen „vpn.hakase-labs.pw“ wurden erstellt und in das Verzeichnis „/etc/ipsec.d“ kopiert.
tree /etc/ipsec.d/
Schritt 3 – Strongswan konfigurieren
Sichere die Standardkonfiguration und erstelle eine neue „ipsec.conf“ mit dem Editor vim.
mv /etc/ipsec.conf /etc/ipsec.conf.asli vim /etc/ipsec.conf
Füge die Konfiguration unten ein.
#global configuration IPsec #chron logger config setup charondebug="ike 1, knl 1, cfg 0" uniqueids=no #define new ipsec connection conn hakase-vpn auto=add compress=no type=tunnel keyexchange=ikev2 ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16-aes256gcm12-aes128gcm16-aes128gcm12-sha256-sha1-modp2048-modp4096-modp1024,3des-sha1-modp1024! esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes128gcm12-aes128gcm16-aes256gcm12-aes256gcm16-modp2048-modp4096-modp1024,aes128gcm16,aes128gcm16-ecp256,aes256-sha1,aes256-sha256,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16,aes256gcm16-ecp384,3des-sha1! fragmentation=yes forceencaps=yes dpdaction=clear dpddelay=300s rekey=no left=%any leftid=@vpn.hakase-labs.pw leftcert=fullchain.pem leftsendcert=always leftsubnet=0.0.0.0/0 right=%any rightid=%any rightauth=eap-mschapv2 rightsourceip=10.15.1.0/24 rightdns=1.1.1.1,8.8.8.8 rightsendcert=never eap_identity=%identity
Speichere und beende.
Details zur Konfiguration:
- Erstelle eine neue IPSec VPN-Tunnelverbindung mit dem Namen „hakase-vpn“.
- Lege die IKEv2- und ESP-Cipher-Suites für die Authentifizierung fest.
- Die „linke“ Serverkonfiguration verwendet den Domainnamen „vpn.hakase-labs.pw“ und das letsencrypt-Zertifikat „fullchain.pem“ im Verzeichnis „/etc/ipsec.d/certs“.
- Die „richtige“ Client/Remote-Einrichtung mit der EAP-Authentifizierungsmethode „eap-mschapv2“, die Zuweisung des virtuellen IP-Adressbereichs „10.15.1.0/24“ an alle verbundenen Clients und die Verwendung der öffentlichen DNS Cloudflare und Google.
Als Nächstes müssen wir die Datei „/etc/ipsec.secrets“ bearbeiten, um den privaten Schlüssel des RSA-Servers und die EAP-Anmeldedaten zu definieren.
Bearbeite die Datei „ipsec.secrets“ mit vim.
vim /etc/ipsec.secrets
Und füge die Konfiguration dort ein.
: RSA "privkey.pem" hakase : EAP "hakase321@" tensai : EAP "tensai321@"
Speichern und beenden.
Details zur Konfiguration:
- Gib den privaten Schlüssel des RSA-Servers mit dem letsencrypt-Zertifikat „privkey.pem“ an, das sich im Verzeichnis „/etc/ipsec.d/private“ befindet.
- Definiere das Format der EAP-Benutzeranmeldeinformationen ‚user : EAP „password“‚.
Wenn die IPSec-Konfiguration von strongswan abgeschlossen ist, starte den strongswan-Dienst und aktiviere ihn so, dass er jedes Mal beim Systemstart gestartet wird.
systemctl start strongswan systemctl enable strongswan
Schritt 4 – NAT und Port-Forwarding UFW Firewall aktivieren
In diesem Schritt aktivieren wir den NAT-Modus, öffnen die Ports, die für das Strongswan IPSec VPN verwendet werden, und aktivieren das Port-Forwarding. Wir werden die UFW-Firewall verwenden.
Bevor wir die Firewall auf dem Server aktivieren, müssen wir den ssh-Dienst und die strongswan UDP-Ports (500 und 4500) zu den Firewall-Dienstlisten hinzufügen.
Führe die folgenden ufw-Firewall-Befehle aus.
sudo ufw allow ssh sudo ufw allow 500,4500/udp
Der ssh-Dienst und die strongswan-Ports wurden der ufw-Firewall hinzugefügt.
Als Nächstes aktivieren wir den NAT-Modus und die Port-Weiterleitung auf der UFW-Firewall, indem wir ihre Konfigurationsdatei bearbeiten.
Bearbeite die Standardkonfiguration der ufw.
vim /etc/default/ufw
Ändere die „DEFAULT_FORWARD_POLICY“ in „ACCEPT“.
DEFAULT_FORWARD_POLICY="ACCEPT"
Speichere und beende die Datei.
Nun müssen wir die Netzwerkschnittstelle, die für den Internetzugang verwendet wird, mit dem folgenden route-Befehl überprüfen.
route | grep '^default' | grep -o '[^ ]*$'
Du erhältst die Netzwerkschnittstelle wie ‚eth0‘, ‚eth1‘ oder ‚ens3‘ usw.
Gehe in das Verzeichnis „/etc/ufw“ und bearbeite die Konfigurationsdatei „before.rules“.
cd /etc/ufw/ vim before.rules
Füge die folgende nat- und mangle-Konfiguration an den Anfang der Zeilen ein.
*nat -A POSTROUTING -s 10.15.1.0/24 -o ens3 -m policy --pol ipsec --dir out -j ACCEPT -A POSTROUTING -s 10.15.1.0/24 -o ens3 -j MASQUERADE COMMIT *mangle -A FORWARD --match policy --pol ipsec --dir in -s 10.15.1.0/24 -o ens3 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360 COMMIT
Und füge die benutzerdefinierte ufw-Firewall-Kette unter der Konfiguration „*filter“ ein.
*filter ..... -A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.15.1.0/24 -j ACCEPT -A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.15.1.0/24 -j ACCEPT
Speichern und beenden.
Beachte:
- Ersetze die Schnittstelle „ens3“ durch deine eigene Netzwerkschnittstelle.
- Ändere die interne/private IP-Adresse, wie du willst.
Für die Konfiguration der Portweiterleitung bearbeitest du die Datei „sysctl.conf“ im ufw-Verzeichnis.
cd /etc/ufw vim sysctl.conf
Entferne den Kommentar in der Zeile „net/ipv4/ip_forward“.
net/ipv4/ip_forward=1
Speichern und beenden.
Starte und aktiviere die ufw-Firewall.
sudo ufw enable
Tippe zur Bestätigung „y“ ein und drücke die Eingabetaste, um sicherzustellen, dass kein Fehler auftritt. Starte dann den Strongswan-Dienst neu.
systemctl restart strongswan
Die Konfiguration der UFW-Firewall für den NAT-Modus und das Port-Forwarding ist damit abgeschlossen.
Schritt 5 – Testen
In diesem Fall werden wir einen Test auf MacOS X und einem Android-Telefon durchführen.
Unter MacOS
- Öffne die „Systemeinstellungen“ und klicke auf das Menü „Netzwerk“.
- Klicke auf die Schaltfläche „+“, um eine neue VPN-Verbindung zu erstellen.
- Schnittstelle: ‚VPN‘
- VPN-Typ: ‚IKEv2‘
- Dienstname: ‚IKEv2-vpn‘
- Gib bei „Server-Adresse“ und „Remote-ID“ den VPN-Domänennamen „vpn.hakase-labs.pw“ ein.
- Klicke auf „Authentifizierungseinstellungen“.
- Authentifizierung mit einem „Benutzernamen“.
- Gib den Benutzernamen „tensai“ mit dem Passwort „tensai321@“ ein.
- Klicke auf ‚OK‘ und dann auf ‚Übernehmen‘.
Eine neue IKEv2 VPN-Verbindung wurde auf dem Client erstellt. Klicke auf die Schaltfläche „Verbinden“.
Der Client ist nun mit dem Strongswan VPN-Server verbunden und hat eine interne/private IP-Adresse 10.15.1.1.
Auf Android
- Lade die native strongswan Android-Anwendung von Google-Play herunter und installiere sie.
- Neues VPN-Profil hinzufügen
- Gib den Domainnamen des Servers „vpn.hakase-labs.pw“ ein und verwende die IKEv2 EAP-Benutzername- und Passwort-Authentifizierung.
Nachfolgend siehst du das Ergebnis, wenn wir uns mit dem VPN-Server verbunden haben.
Der IKEv2 IPSec-basierte VPN-Server wurde mit Strongswan auf einem Ubuntu 18.04 Server erstellt.