Hoe u een IKEv2 VPN-server opzet met StrongSwan op Ubuntu 22.04

Introductie

A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.

Internet Key Exchange v2, of IKEv2, is een protocol dat directe IPSec-tunneling tussen de server en de client mogelijk maakt. In IKEv2 VPN-implementaties biedt IPSec versleuteling voor het netwerkverkeer. IKEv2 wordt native ondersteund op sommige platforms (OS X 10.11+, iOS 9.1+ en Windows 10) zonder dat er extra toepassingen nodig zijn, en het handelt clientonderbrekingen vrij soepel af.

In deze tutorial ga je een IKEv2 VPN-server opzetten met behulp van StrongSwan op een Ubuntu 22.04-server. Vervolgens leer je hoe je ermee verbinding kunt maken met Windows, macOS, Ubuntu, iOS en Android-clients.

Vereisten

Om deze tutorial te voltooien, heb je het volgende nodig:

Stap 1 — StrongSwan installeren

Ten eerste installeert u StrongSwan, een open-source IPSec-daemon die u zult configureren als uw VPN-server. U installeert ook het onderdeel voor de openbare sleutelinfrastructuur (PKI) zodat u een Certificate Authority (CA) kunt maken om referenties te verstrekken voor uw infrastructuur.

Begin met het bijwerken van de lokale pakketcache:

  1. sudo apt update

Installeer vervolgens de software door het volgende te typen:

  1. sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

Het extra pakket libcharon-extauth-plugins wordt gebruikt om ervoor te zorgen dat verschillende clients zich kunnen authenticeren bij uw server met een gedeelde gebruikersnaam en wachtwoord. Het pakket libstrongswan-extra-plugins is inbegrepen zodat Strongswan elliptische-curve-cijfersuites ondersteunt die gebruikmaken van de Curve25519-cryptografiesuite.

Nu alles is geïnstalleerd, kunt u doorgaan met het maken van uw certificaten.

Stap 2 — Een Certificate Authority maken

Een IKEv2-server heeft een certificaat nodig om zichzelf te identificeren bij clients. Om het vereiste certificaat te maken, bevat het pakket strongswan-pki een hulpprogramma genaamd pki om een Certificate Authority en servercertificaten te genereren.

Om te beginnen, maak een paar mappen aan om alle assets op te slaan waar je aan gaat werken. De mapstructuur komt overeen met enkele van de mappen in /etc/ipsec.d, waar je uiteindelijk alle items die je creëert naartoe zult verplaatsen:

  1. mkdir -p ~/pki/{cacerts,certs,private}

Vergrendel vervolgens de rechten zodat onze privébestanden niet door andere gebruikers kunnen worden gezien:

  1. chmod 700 ~/pki

Nu je een mappenstructuur hebt om alles op te slaan, kun je een hoofdsleutel genereren. Dit zal een 4096-bits RSA-sleutel zijn die gebruikt zal worden om je root Certificate Authority-certificaat te ondertekenen.

Voer deze commando’s uit om de sleutel te genereren:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

Vervolgens kun je doorgaan met het aanmaken van je root Certificate Authority, waarbij je de zojuist gegenereerde sleutel gebruikt om het rootcertificaat te ondertekenen:

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

Het --lifetime 3650 vlag wordt gebruikt om ervoor te zorgen dat het rootcertificaat van de certificaatautoriteit 10 jaar geldig is. Het rootcertificaat voor een autoriteit verandert meestal niet, omdat het opnieuw zou moeten worden verspreid naar elke server en client die erop vertrouwen, dus 10 jaar is een veilige standaard vervaldatum.

Je kunt de onderscheidende naam (DN) waarde wijzigen naar iets anders als je dat wilt. De gemeenschappelijke naam (CN-veld) hier is slechts een indicatie, dus het hoeft niet overeen te komen met iets in je infrastructuur.

Nu je root Certificate Authority operationeel is, kun je een certificaat aanmaken dat de VPN-server zal gebruiken.

Stap 3 — Genereren van een Certificaat voor de VPN-server

U zult nu een certificaat en sleutel maken voor de VPN-server. Dit certificaat stelt de client in staat om de authenticiteit van de server te verifiëren met behulp van het CA-certificaat dat we zojuist hebben gegenereerd.

Maak eerst een privésleutel voor de VPN-server met de volgende opdracht:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

Maak vervolgens het certificaat voor de VPN-server en onderteken het met de sleutel van de certificaatautoriteit die u in de vorige stap heeft gemaakt. Voer de volgende opdracht uit, maar wijzig de Common Name (CN) en het Subject Alternate Name (SAN) veld naar de DNS-naam of het IP-adres van uw VPN-server:

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/pki/certs/server-cert.pem

Let op: Als u een IP-adres in plaats van een DNS-naam gebruikt, moet u meerdere --san-vermeldingen specificeren. De regel in het vorige commandoblok waar u de onderscheidende naam specificeert (--dn ...) moet worden aangepast met de extra vermelding zoals de volgende geciteerde regel:

--dn "CN=IP adres" --san @IP_adres --san IP_adres \

De reden voor deze extra --san @IP_adres-vermelding is dat sommige clients controleren of het TLS-certificaat zowel een DNS-vermelding als een IP-adresvermelding heeft voor een server wanneer ze de identiteit ervan verifiëren.

De optie --flag serverAuth wordt gebruikt om aan te geven dat het certificaat expliciet zal worden gebruikt voor serverauthenticatie, voordat de versleutelde tunnel tot stand wordt gebracht. De optie --flag ikeIntermediate wordt gebruikt om oudere macOS-clients te ondersteunen.

Nu je alle TLS/SSL-bestanden hebt gegenereerd die StrongSwan nodig heeft, kun je de bestanden verplaatsen naar de juiste locatie in de map /etc/ipsec.d door het volgende te typen:

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

In deze stap heb je een certificaatpaar gemaakt dat zal worden gebruikt om communicatie tussen de client en de server te beveiligen. Je hebt ook de certificaten ondertekend met de CA-sleutel, zodat de client de echtheid van de VPN-server kan verifiëren met behulp van het CA-certificaat. Met al deze certificaten gereed, ben je klaar om StrongSwan te configureren.

Stap 4 — StrongSwan configureren

StrongSwan heeft een standaard configuratiebestand met enkele voorbeelden, maar we zullen het grootste deel van de configuratie zelf moeten doen. Laten we eerst het bestand back-uppen voor referentiedoeleinden voordat we helemaal opnieuw beginnen:

  1. sudo mv /etc/ipsec.conf{,.original}

Maak en open een nieuw leeg configuratiebestand met je voorkeurteksteditor. Hier zullen we nano gebruiken:

  1. sudo nano /etc/ipsec.conf

Opmerking: Terwijl je door deze sectie werkt om het servergedeelte van je VPN te configureren, zul je instellingen tegenkomen die verwijzen naar links en rechts zijden van een verbinding. Bij het werken met IPSec VPN’s, verwijst de linker zijde volgens conventie naar het lokale systeem dat je configureert, in dit geval de server. De rechterzijde directives in deze instellingen verwijzen naar externe clients, zoals telefoons en andere computers.

Wanneer je later in deze handleiding doorgaat met het configureren van clients, zullen de clientconfiguratiebestanden naar zichzelf verwijzen met behulp van verschillende linker directives, en zal de server worden aangeduid met rechter zijde terminologie.

Ten eerste vertellen we StrongSwan om daemonstatussen te loggen voor debugging en om duplicaatverbindingen toe te staan. Voeg deze regels toe aan het bestand:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

Vervolgens zullen we een configuratiesectie maken voor onze VPN. We vertellen StrongSwan ook om IKEv2 VPN-tunnels te maken en om deze configuratiesectie automatisch te laden wanneer het wordt opgestart. Voeg de volgende regels toe aan het bestand:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

We zullen ook dead-peer detection configureren om eventuele “dangling” verbindingen te wissen als de client onverwacht verbinding verbreekt. Voeg deze regels toe:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

Vervolgens zullen we de IPSec-parameters aan de “linker” zijde van de server configureren. Elk van de volgende parameters zorgt ervoor dat de server is geconfigureerd om verbindingen van clients te accepteren en zichzelf correct te identificeren. Voeg elk van deze instellingen toe aan het bestand /etc/ipsec.conf zodra je vertrouwd bent met wat ze zijn en waarom ze worden gebruikt:

  • left=%any De waarde %any zorgt ervoor dat de server het netwerkinterface gebruikt waarover het inkomende verbindingen ontvangt voor verdere communicatie met clients. Bijvoorbeeld, als je een client verbindt via een privénetwerk, zal de server het privé-IP-adres gebruiken waarover het verkeer ontvangt voor de rest van de verbinding.
  • leftid=@server_domain_or_IP Deze optie controleert de naam die de server aan clients presenteert. Wanneer gecombineerd met de volgende optie leftcert, zorgt de leftid-optie ervoor dat de geconfigureerde naam van de server en de Distinguished Name (DN) die wordt vermeld in het openbare certificaat overeenkomen.
  • leftcert=server-cert.pem Deze optie is het pad naar het openbare certificaat voor de server dat je hebt geconfigureerd in Stap 3. Zonder dit zal de server zichzelf niet kunnen authenticeren bij clients, of de onderhandeling van de IKEv2-opzet niet kunnen voltooien.
  • leftsendcert=always De waarde always zorgt ervoor dat elke client die verbinding maakt met de server altijd een kopie van het openbare certificaat van de server ontvangt als onderdeel van de initiële verbindingsopzet.
  • leftsubnet=0.0.0.0/0 De laatste “left” zijde optie die je toevoegt, vertelt clients over de subnets die bereikbaar zijn achter de server. In dit geval wordt 0.0.0.0/0 gebruikt om het hele set IPv4-adressen voor te stellen, wat betekent dat de server clients zal vertellen om standaard al hun verkeer via de VPN te sturen.

Nu je bekend bent met elk van de relevante “left” zijde opties, voeg ze allemaal toe aan het bestand zoals hierboven beschreven:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

Let op: Bij het configureren van de server-ID (leftid) moet u alleen het @-teken opnemen als uw VPN-server wordt geïdentificeerd door een domeinnaam:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

Als de server wordt geïdentificeerd door zijn IP-adres, plaatst u gewoon het IP-adres:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

Vervolgens kunnen we de IPSec-parameters aan de “rechter” kant van de client configureren. Elk van de volgende parameters vertelt de server hoe verbindingen van clients moeten worden geaccepteerd, hoe clients zich moeten authenticeren bij de server, en de privé-IP-adresreeksen en DNS-servers die clients zullen gebruiken. Voeg elk van deze instellingen toe aan het /etc/ipsec.conf-bestand zodra u bekend bent met wat ze zijn en waarom ze worden gebruikt:

  • right=%any De optie %any voor de right-kant van de verbinding geeft de server opdracht inkomende verbindingen vanaf elke externe client te accepteren.
  • rightid=%any Met deze optie zorgt u ervoor dat de server geen verbindingen van clients zal weigeren die een identiteit verstrekken voordat de versleutelde tunnel is opgezet.
  • rightauth=eap-mschapv2 Deze optie configureert de authenticatiemethode die clients zullen gebruiken om zich bij de server te authenticeren. eap-mschapv2 wordt hier gebruikt voor brede compatibiliteit om clients zoals Windows, macOS en Android-apparaten te ondersteunen.
  • rightsourceip=10.10.10.0/24 Met deze optie geeft u de server opdracht om privé-IP-adressen aan clients toe te wijzen uit de gespecificeerde 10.10.10.0/24-pool van IP-adressen.
  • rightdns=8.8.8.8,8.8.4.4 Deze IP-adressen zijn de openbare DNS-resolvers van Google. Ze kunnen worden gewijzigd om andere openbare resolvers te gebruiken, de resolvers van de VPN-server, of elke andere resolver die clients kunnen bereiken.
  • rightsendcert=never Deze optie geeft de server de instructie dat clients geen certificaat hoeven te sturen om zichzelf te authenticeren.

Nu je bekend bent met de vereiste “right” side-opties voor de VPN, voeg de volgende regels toe aan /etc/ipsec.conf:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

Nu zullen we StrongSwan vertellen om de client om gebruikersreferenties te vragen wanneer ze verbinding maken:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

Voeg tot slot de volgende regels toe om Linux, Windows, macOS, iOS en Android-clients te ondersteunen. Deze regels specificeren de verschillende algoritmen voor sleuteluitwisseling, hashing, authenticatie en versleuteling (vaak aangeduid als Cipher Suites) die StrongSwan zal toestaan dat verschillende clients gebruiken:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Elke ondersteunde cipher suite wordt gescheiden van de anderen door een komma. Bijvoorbeeld chacha20poly1305-sha512-curve25519-prfsha512 is één suite, en aes256gcm16-sha384-prfsha384-ecp384 is een andere. De hier vermelde cipher suites zijn geselecteerd om ervoor te zorgen dat er een zo breed mogelijke compatibiliteit is met Windows, macOS, iOS, Android en Linux-clients.

De volledige configuratiebestand zou er zo uit moeten zien:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Sla het bestand op en sluit het af zodra je hebt geverifieerd dat je elke regel correct hebt toegevoegd. Als je nano hebt gebruikt, doe dit dan door op CTRL + X, Y, en vervolgens ENTER te drukken.

Nu je de VPN-parameters hebt geconfigureerd, kun je doorgaan met het aanmaken van een account zodat gebruikers verbinding kunnen maken met de server.

Stap 5 — VPN-authenticatie configureren

Je VPN-server is nu geconfigureerd om clientverbindingen te accepteren, maar er zijn nog geen referenties geconfigureerd. Je moet een paar dingen configureren in een speciaal configuratiebestand genaamd ipsec.secrets:

  • Je moet StrongSwan vertellen waar het de privésleutel voor ons servercertificaat kan vinden, zodat de server kan authenticeren naar clients.
  • Je moet ook een lijst instellen van gebruikers die verbinding mogen maken met de VPN.

Laten we het geheimenbestand openen om te bewerken:

  1. sudo nano /etc/ipsec.secrets

Ten eerste, vertel StrongSwan waar het de privésleutel kan vinden en hoe het deze moet parseren.

/etc/ipsec.secrets
: RSA "server-key.pem"

Zorg ervoor dat de regel begint met het :-teken en dat er een spatie achter staat, zodat de hele regel eruitziet als : RSA "server-key.pem".

Vervolgens definieer je de gebruikersreferenties. Je kunt elke gewenste gebruikersnaam of wachtwoordcombinatie verzinnen:

/etc/ipsec.secrets
your_username : EAP "your_password"

Sla het bestand op en sluit het. Nu je klaar bent met werken met de VPN-parameters, herstart je de VPN-service zodat onze configuratie wordt toegepast:

  1. sudo systemctl restart strongswan-starter

Nu de VPN-server volledig is geconfigureerd met zowel serveropties als gebruikersreferenties, is het tijd om door te gaan met het configureren van het belangrijkste onderdeel: de firewall.

Stap 6 — Configuratie van de Firewall & Kernel IP-doorsturen

Met de StrongSwan-configuratie voltooid, moet je de firewall configureren om VPN-verkeer toe te staan en door te sturen.

Als je de vereiste initiële serverinstallatietutorial hebt gevolgd, zou je een UFW-firewall ingeschakeld moeten hebben. Als je UFW nog niet geconfigureerd hebt, moet je beginnen met het toevoegen van een regel om SSH-verbindingen toe te staan door de firewall, zodat je huidige sessie niet wordt afgesloten wanneer je UFW inschakelt:

  1. sudo ufw allow OpenSSH

Vervolgens de firewall inschakelen door te typen:

  1. sudo ufw enable

Vervolgens een regel toevoegen om UDP-verkeer naar de standaard IPSec-poorten, 500 en 4500, toe te staan:

  1. sudo ufw allow 500,4500/udp

Hierna open je een van de configuratiebestanden van UFW om een paar beleidsregels op laag niveau toe te voegen voor het routeren en doorsturen van IPSec-pakketten. Voordat je dit echter doet, moet je erachter komen welke netwerkinterface op onze server wordt gebruikt voor internettoegang. Vind deze interface door te zoeken naar het apparaat dat is gekoppeld aan de standaardroute:

  1. ip route show default

Je openbare interface moet het woord “dev” volgen. Bijvoorbeeld, dit resultaat toont de interface genaamd eth0, die wordt gemarkeerd in het volgende voorbeeld:

Output
default via your_server_ip dev eth0 proto static

Wanneer je je openbare netwerkinterface hebt, open je het bestand /etc/ufw/before.rules in je teksteditor. De regels in dit bestand worden toegevoegd aan de firewall vóór de rest van de gebruikelijke invoer- en uitvoerregels. Ze worden gebruikt om network address translation (NAT) te configureren, zodat de server verbindingen van en naar cliënten en het internet correct kan routeren.

  1. sudo nano /etc/ufw/before.rules

Nabij de bovenkant van het bestand (vóór de *filter-regel), voeg je het volgende configuratieblok toe. Verander elke instantie van eth0 in de bovenstaande configuratie om overeen te komen met de interfacenaam die je hebt gevonden met ip route. De *nat-regels creëren regels zodat de firewall het verkeer tussen de VPN-cliënten en het internet correct kan routeren en manipuleren. De *mangle-regel past de maximale pakketsegmentgrootte aan om mogelijke problemen met bepaalde VPN-cliënten te voorkomen:

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

Vervolgens, na de regels voor *filter en ketendefinitie, voeg je nog één blok configuratie toe:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

Deze regels vertellen de firewall om ESP (Encapsulating Security Payload) verkeer door te sturen zodat de VPN-cliënten verbinding kunnen maken. ESP biedt extra beveiliging voor onze VPN-pakketten terwijl ze onbetrouwbare netwerken doorkruisen.

Als je klaar bent, sla je het bestand op en sluit je het nadat je hebt geverifieerd dat je elke regel correct hebt toegevoegd. Als je nano hebt gebruikt, doe dit dan door op CTRL + X, Y, dan ENTER te drukken.

Voor het opnieuw opstarten van de firewall moet je ook enkele netwerkkernelparameters wijzigen om routering van het ene naar het andere interface toe te staan. Het bestand dat deze instellingen regelt heet /etc/ufw/sysctl.conf. Je moet een paar dingen configureren in het bestand.

Ten eerste moet IPv4-pakketdoorsturing worden ingeschakeld zodat verkeer kan bewegen tussen de VPN- en openbare netwerkinterfaces op de server. Vervolgens schakel je Path MTU-detectie uit om problemen met pakketfragmentatie te voorkomen. Ten slotte zullen we geen ICMP-omleidingen accepteren of ICMP-omleidingen verzenden om man-in-the-middle-aanvallen te voorkomen.

Open het configuratiebestand van UFW’s kernelparameters met behulp van nano of je favoriete teksteditor:

  1. sudo nano /etc/ufw/sysctl.conf

Voeg nu de volgende instelling net/ipv4/ip_forward=1 toe aan het einde van het bestand om het doorsturen van pakketten tussen interfaces mogelijk te maken:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

Blokkeer vervolgens het verzenden en ontvangen van ICMP-omleidingspakketten door de volgende regels toe te voegen aan het einde van het bestand:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

Schakel tot slot Path MTU-detectie uit door deze regel toe te voegen aan het einde van het bestand:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

Sla het bestand op wanneer je klaar bent. Je kunt nu al je wijzigingen inschakelen door de firewall uit te schakelen en vervolgens opnieuw in te schakelen, aangezien UFW deze instellingen toepast telkens wanneer het opnieuw wordt opgestart:

  1. sudo ufw disable
  2. sudo ufw enable

Je wordt gevraagd om het proces te bevestigen. Typ Y om UFW opnieuw in te schakelen met de nieuwe instellingen.

Stap 7 — Het testen van de VPN-verbinding op Windows, macOS, Ubuntu, iOS en Android

Nu alles is ingesteld, is het tijd om het uit te proberen. Allereerst moet je het CA-certificaat dat je hebt gemaakt kopiëren en installeren op je clientappara(a)t(en) die verbinding zullen maken met de VPN. De eenvoudigste manier om dit te doen is inloggen op je server en de inhoud van het certificaatbestand uitvoeren:

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

Je zult vergelijkbare uitvoer zien als deze:

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----EIND CERTIFICAAT-----

Kopieer deze uitvoer naar je computer, inclusief de -----BEGIN CERTIFICAAT----- en -----EIND CERTIFICAAT----- regels, en sla het op in een bestand met een herkenbare naam, zoals ca-cert.pem. Zorg ervoor dat het bestand dat je maakt de extensie .pem heeft.

Als alternatief, gebruik SFTP om het bestand naar je computer over te zetten.

Zodra je het bestand ca-cert.pem hebt gedownload naar je computer, kun je de verbinding met de VPN instellen.

Verbinding maken vanaf Windows

Er zijn meerdere manieren om het rootcertificaat te importeren en Windows te configureren om verbinding te maken met een VPN. De eerste methode maakt gebruik van grafische tools voor elk stap. De tweede methode maakt gebruik van PowerShell-commando’s, die kunnen worden geautomatiseerd en aangepast aan je VPN-configuratie.

Opmerking: Deze instructies zijn getest op Windows 10-installaties met versies 1903 en 1909.

Windows configureren met Grafische Tools

Eerst, importeer het rootcertificaat door deze stappen te volgen:

  1. Druk op WINDOWS+R om het dialoogvenster Uitvoeren te openen, en voer mmc.exe in om de Windows Management Console te starten.

  2. Vanuit het Bestand-menu, ga naar Snap-in toevoegen of verwijderen, selecteer Certificaten uit de lijst met beschikbare snap-ins, en klik op Toevoegen.

  3. We willen dat de VPN werkt met elk gebruikersaccount, dus selecteer Computers en klik op Volgende.

  4. We configureren dingen op de lokale computer, dus selecteer Lokale computer, en klik dan op Voltooien.

  5. Onder de Console Root-node, breidt u de invoer Certificaten (Lokale Computer) uit, breidt u Vertrouwde rootcertificeringsinstanties uit, en selecteert u vervolgens de invoer Certificaten:

  6. Vanuit het menu Actie, selecteert u Alle taken en klikt u op Importeren om de Wizard Certificaat importeren weer te geven. Klik op Volgende om voorbij de inleiding te gaan.

  7. Op het scherm Bestand importeren, drukt u op de knop Bladeren, zorg ervoor dat u het bestandstype wijzigt van “X.509-certificaat (.cer;.crt)” naar “Alle bestanden (.)”, en selecteer het bestand ca-cert.pem dat u hebt opgeslagen. Klik vervolgens op Volgende.

  8. Zorg ervoor dat de Certificaatopslag is ingesteld op Vertrouwde Root-certificeringsinstanties, en klik op Volgende.

  9. Klik op Voltooien om het certificaat te importeren.

Configureer vervolgens de VPN met deze stappen:

  1. Start Configuratiescherm, ga vervolgens naar het Netwerk en Internet.
  2. Klik op Een nieuwe verbinding of netwerk instellen, selecteer vervolgens Verbinding met het werk.
  3. Selecteer Mijn internetverbinding (VPN) gebruiken.
  4. Voer de VPN-servergegevens in. Voer de domeinnaam of het IP-adres van de server in het veld Internetadres in, vul vervolgens Bestemming naam in met iets dat uw VPN-verbinding beschrijft. Klik vervolgens op Gereed.

Windows configureren met PowerShell

Om het root-CA-certificaat te importeren met behulp van PowerShell, opent u eerst een PowerShell-opdrachtprompt met beheerdersrechten. Klik hiervoor met de rechtermuisknop op het Startmenu-icoon en selecteer Windows PowerShell (Beheerder). U kunt ook een opdrachtprompt als beheerder openen en powershell typen.

Vervolgens importeren we het certificaat met behulp van de Import-Certificate-PowerShell-cmdlet. In het volgende commando zorgt het eerste -CertStoreLocation-argument ervoor dat het certificaat wordt geïmporteerd in de Vertrouwde Rootcertificeringsinstanties van de computer, zodat alle programma’s en gebruikers het certificaat van de VPN-server kunnen controleren. Het -FilePath-argument moet verwijzen naar de locatie waar u het certificaat hebt gekopieerd. In het volgende voorbeeld is het pad C:\Gebruikers\sammy\Documenten\ca-cert.pem. Zorg ervoor dat u het commando bewerkt om overeen te komen met de locatie die u hebt gebruikt.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

Het commando geeft iets uitvoer zoals het volgende:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

Nu om de VPN te configureren met behulp van PowerShell, voert u het volgende commando uit. Vervang de DNS-naam of het IP-adres van uw server op de -ServerAddress-regel. De verschillende vlaggen zorgen ervoor dat Windows correct is geconfigureerd met de juiste beveiligingsparameters die overeenkomen met de opties die u hebt ingesteld in /etc/ipsec.conf.

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

Als het commando succesvol is, wordt er geen uitvoer weergegeven. Om te bevestigen dat de VPN correct is geconfigureerd, gebruikt u de Get-VPNConnection-cmdlet:

  1. Get-VpnConnection -Name "VPN Connection"

U ontvangt een uitvoer zoals het volgende:

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

Standaard kiest Windows oudere en langzamere algoritmes. Voer de Set-VpnConnectionIPsecConfiguration cmdlet uit om de versleutelingsparameters te upgraden die Windows zal gebruiken voor de IKEv2-sleuteluitwisseling, en om pakketten te versleutelen:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

Opmerking: Als u de VPN-verbinding wilt verwijderen en opnieuw wilt configureren met verschillende opties, kunt u de Remove-VpnConnection cmdlet uitvoeren.

  1. Remove-VpnConnection -Name "VPN Connection" -Force

De -Force vlag zal het vragen om de verwijdering te bevestigen overslaan. U moet losgekoppeld zijn van de VPN als u probeert deze te verwijderen met dit commando.

Verbinding maken met de VPN

Zodra u het certificaat geïmporteerd heeft en de VPN geconfigureerd heeft met een van beide methoden, zal uw nieuwe VPN-verbinding zichtbaar zijn onder de lijst met netwerken. Selecteer de VPN en klik op Verbinden. U wordt gevraagd om uw gebruikersnaam en wachtwoord. Typ ze in, klik op OK, en u bent verbonden.

Verbinding maken vanaf macOS

Volg deze stappen om het certificaat te importeren:

  1. Dubbelklik op het certificaatbestand. Sleutelhanger Toegang zal verschijnen met een dialoogvenster dat zegt “Sleutelhanger Toegang probeert de systeemsleutelhanger te wijzigen. Voer uw wachtwoord in om dit toe te staan.”
  2. Voer uw wachtwoord in, klik vervolgens op Sleutelhanger wijzigen
  3. Dubbelklik op het nieuw geïmporteerde VPN-certificaat. Hiermee wordt een klein eigenschappenvenster geopend waarin u de vertrouwensniveaus kunt specificeren. Stel IP Security (IPSec) in op Altijd vertrouwen en u wordt opnieuw om uw wachtwoord gevraagd. Deze instelling wordt automatisch opgeslagen nadat het wachtwoord is ingevoerd.

Nu het certificaat is geïmporteerd en vertrouwd, configureer de VPN-verbinding met deze stappen:

  1. Ga naar Systeemvoorkeuren en kies Netwerk.
  2. Klik op de kleine “plus” knop linksonder in de lijst met netwerken.
  3. In het pop-upvenster dat verschijnt, stelt u Interface in op VPN, stelt u het VPN-type in op IKEv2, en geeft u de verbinding een naam.
  4. In het veld Server en Extern ID, voert u de domeinnaam of het IP-adres van de server in. Laat Lokale ID leeg.
  5. Klik op Authenticatie-instellingen, selecteer Gebruikersnaam, en voer uw gebruikersnaam en wachtwoord in die u heeft geconfigureerd voor uw VPN-gebruiker. Klik vervolgens op OK.

Klik ten slotte op Verbinden om verbinding te maken met de VPN. U zou nu verbonden moeten zijn met de VPN.

Verbinden vanaf Ubuntu

Om verbinding te maken vanaf een Ubuntu-machine, kunt u StrongSwan instellen en beheren als een service of elke keer dat u verbinding wilt maken een eenmalig commando gebruiken. Instructies worden verstrekt voor beide.

Beheren van StrongSwan als een service

Om StrongSwan als een service te beheren, moet u de volgende configuratiestappen uitvoeren.

Ten eerste, werk uw lokale pakketcache bij met behulp van apt

  1. sudo apt update

Vervolgens installeert u StrongSwan en de vereiste plugins voor authenticatie:

  1. sudo apt install strongswan libcharon-extra-plugins

Nu heeft u een kopie van het CA-certificaat nodig in de map /etc/ipsec.d/cacerts, zodat uw client de identiteit van de server kan verifiëren. Voer het volgende commando uit om het bestand ca-cert.pem op de juiste plaats te kopiëren:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Om ervoor te zorgen dat de VPN alleen op verzoek wordt uitgevoerd, gebruikt u systemctl om StrongSwan uit te schakelen zodat het niet automatisch wordt uitgevoerd:

  1. sudo systemctl disable --now strongswan-starter

Configureer vervolgens de gebruikersnaam en het wachtwoord die u zult gebruiken om u aan te melden bij de VPN-server. Bewerk /etc/ipsec.secrets met nano of uw voorkeurseditor:

  1. sudo nano /etc/ipsec.secrets

Voeg de volgende regel toe, waarbij u de gemarkeerde gebruikersnaam en wachtwoordwaarden bewerkt om overeen te komen met de waarden die u hebt geconfigureerd op de server:

/etc/ipsec.secrets
your_username : EAP "your_password"

Ten slotte bewerkt u het bestand /etc/ipsec.conf om uw client te configureren om overeen te komen met de configuratie van de server:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # Dit moet overeenkomen met de waarde `leftid` op de configuratie van uw server
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

Om verbinding te maken met de VPN, typt u:

  1. sudo systemctl start strongswan-starter

Om vervolgens weer te verbreken, typt u:

  1. sudo systemctl stop strongswan-starter

Het gebruik van de charon-cmd client voor eenmalige verbindingen

Om StrongSwan als een service te beheren, moet je de volgende configuratiestappen uitvoeren.

Ten eerste, update je lokale pakketcache met behulp van apt

  1. sudo apt update

Vervolgens installeer je StrongSwan en de vereiste plugins voor authenticatie:

  1. sudo apt install strongswan libcharon-extra-plugins

Nu heb je een kopie van het CA-certificaat nodig in de map /etc/ipsec.d/cacerts zodat je client de identiteit van de server kan verifiëren. Voer het volgende commando uit om het bestand ca-cert.pem te kopiëren:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Op dit punt kun je verbinding maken met de VPN-server met charon-cmd met behulp van het CA-certificaat van de server, het IP-adres van de VPN-server en de gebruikersnaam die je hebt geconfigureerd.

Voer het volgende commando uit wanneer je verbinding wilt maken met de VPN:

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

Wanneer gevraagd, geef het wachtwoord van de VPN-gebruiker in en je wordt verbonden met de VPN. Om te verbreken, druk op CTRL+C in de terminal en wacht tot de verbinding is verbroken.

Verbinding maken vanaf iOS

Om de VPN-verbinding op een iOS-apparaat te configureren, volg je deze stappen:

  1. Stuur jezelf een e-mail met het rootcertificaat als bijlage.
  2. Open de e-mail op je iOS-apparaat en tik op het bijgevoegde certificaatbestand, tik vervolgens op Installeren en voer je toegangscode in. Zodra het is geïnstalleerd, tik op Klaar.
  3. Ga naar Instellingen, Algemeen, VPN en tik op VPN-configuratie toevoegen. Hiermee wordt het configuratiescherm voor de VPN-verbinding geopend.
  4. Tik op Type en selecteer IKEv2.
  5. In het veld Omschrijving, voer een korte naam in voor de VPN-verbinding. Dit kan alles zijn wat je wilt.
  6. In de velden Server en Externe ID, voer de domeinnaam of IP-adres van de server in. Het veld Lokale ID kan leeg worden gelaten.
  7. Voer uw gebruikersnaam en wachtwoord in het gedeelte Authenticatie in, tik vervolgens op Klaar.
  8. Selecteer de zojuist aangemaakte VPN-verbinding, tik op de schakelaar bovenaan de pagina en je bent verbonden.

Verbinding maken vanaf Android

Volg deze stappen om het certificaat te importeren:

  1. Stuur jezelf een e-mail met het CA-certificaat bijgevoegd. Sla het CA-certificaat op in je downloadsmap.
  2. Download de StrongSwan VPN-client uit de Play Store.
  3. Open de app. Tik op het “meer” icoon (. . .) in de rechterbovenhoek en selecteer CA-certificaten.
  4. Tik opnieuw op het ‘meer’ pictogram (. . .) in de rechterbovenhoek. Selecteer Certificaat importeren.
  5. Blader naar het CA-certificaatbestand in je downloads map en selecteer het om het in de app te importeren.

Nu het certificaat is geïmporteerd in de StrongSwan-app, kun je de VPN-verbinding configureren met deze stappen:

  1. In de app, tik bovenaan op VPN-PROFIEL TOEVOEGEN.
  2. Vul het Server in met de domeinnaam van je VPN-server of het openbare IP-adres.
  3. Zorg ervoor dat IKEv2 EAP (Gebruikersnaam/Wachtwoord) is geselecteerd als het VPN-type.
  4. Vul de Gebruikersnaam en Wachtwoord in met de referenties die je op de server hebt gedefinieerd.
  5. Desselecteer Automatisch selecteren in de sectie CA-certificaat en klik op CA-certificaat selecteren.
  6. Tik op het tabblad GEÏMPORTeerd bovenaan het scherm en kies het geïmporteerde CA (het zal “VPN root CA” worden genoemd als je de “DN” niet eerder hebt gewijzigd).
  7. Vul indien gewenst Profielnaam (optioneel) in met een meer beschrijvende naam.

Wanneer je verbinding met de VPN wilt maken, klik dan op het profiel dat je zojuist hebt aangemaakt in de StrongSwan-applicatie.

Verbindingsproblemen oplossen

Als u het certificaat niet kunt importeren, zorg er dan voor dat het bestand de extensie .pem heeft, en niet .pem.txt.

Als u geen verbinding kunt maken met de VPN, controleer dan de servernaam of het IP-adres dat u heeft gebruikt. Het domeinnaam of IP-adres van de server moet overeenkomen met wat u heeft geconfigureerd als de gemeenschappelijke naam (CN) bij het aanmaken van het certificaat. Als ze niet overeenkomen, zal de VPN-verbinding niet werken. Bijvoorbeeld, als u een certificaat heeft ingesteld met de CN van vpn.example.com, moet u vpn.example.com gebruiken wanneer u de gegevens van de VPN-server invoert. Controleer nogmaals de opdracht die u heeft gebruikt om het certificaat te genereren, en de waarden die u heeft gebruikt bij het maken van uw VPN-verbinding.

Controleer tot slot de VPN-configuratie om ervoor te zorgen dat de waarde leftid is geconfigureerd met het symbool @ als u een domeinnaam gebruikt:

/etc/ipsec.conf
    leftid=@vpn.example.com

Als u een IP-adres gebruikt, zorg er dan voor dat het symbool @ wordt weggelaten. Zorg er ook voor dat wanneer u het bestand server-cert.pem heeft gegenereerd, u zowel de vlaggen --san @IP_adres als --san IP_adres heeft opgenomen.

Conclusie

In deze tutorial heeft u een VPN-server gebouwd die het IKEv2-protocol gebruikt. U heeft geleerd over de richtlijnen die de left en right kanten van een verbinding aan zowel server- als clientzijde regelen. U heeft ook een Windows-, macOS-, iOS-, Android- of Linux-client geconfigureerd om verbinding te maken met de VPN.

Om gebruikers toe te voegen of te verwijderen, ga opnieuw naar Stap 5. Elke regel in /etc/ipsec.secrets is voor één gebruiker, dus het toevoegen of verwijderen van gebruikers, of het wijzigen van wachtwoorden vereist slechts het bewerken van het bestand.

Nu kunt u er zeker van zijn dat uw online activiteiten veilig blijven, waar u ook gaat en met welk apparaat u ook toegang heeft tot internet.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04