Wolkra

Handleidingen

WireGuard VPN-server installeren

Installeer een WireGuard VPN-server op Ubuntu 24.04 of Debian 12: sleutels, wg0-configuratie, IP-forwarding, NAT, firewall en clientconfiguraties voor telefoons en laptops.

Bijgewerkt 5 min. leestijd

Om een WireGuard VPN-server op te zetten, installeer je wireguard, genereer je een sleutelpaar voor de server en voor elke client, schrijf je /etc/wireguard/wg0.conf met een privésubnet, zet je IP-forwarding en NAT aan, open je één UDP-poort en start je wg-quick@wg0. Op Ubuntu 24.04 of Debian 12 kost dat ongeveer tien minuten.

WireGuard is klein, snel en ingebouwd in de Linux-kernel. Het past goed bij een persoonlijke VPN met een Duits exitpunt, bij externe toegang tot een bedrijfsnetwerk of bij het koppelen van servers.

Wat je nodig hebt

  • Een VPS met een publiek IPv4-adres (IPv6 is mooi meegenomen). Een plan met 1 vCPU / 1 GB is ruim voldoende. Een VPS in Frankfurt geeft lage latency in heel Europa.
  • Root- of sudo-toegang.
  • De WireGuard-app op elke client: Windows, macOS, Linux, Android of iOS.

In de voorbeelden:

Onderdeel Voorbeeldwaarde
Publiek adres van de server 203.0.113.10
VPN-subnet 10.8.0.0/24
Tunneladres van de server 10.8.0.1
Eerste client 10.8.0.2
UDP-poort 51820

Vervang ze door je eigen waarden. Liever een snelkoppeling? Kies bij Wolkra de WireGuard-app met één klik wanneer je de server aanmaakt en ga direct naar stap 7.

1. Installeer WireGuard

bash
sudo apt update
sudo apt install -y wireguard qrencode

Met qrencode kun je clientconfiguraties als QR-code tonen voor telefoons.

2. Genereer de sleutels van de server

bash
sudo -i
cd /etc/wireguard
umask 077
wg genkey | tee server.key | wg pubkey > server.pub

umask 077 zorgt ervoor dat de privésleutel alleen door root te lezen is.

3. Zoek de publieke netwerkinterface

bash
ip route show default

Het woord na dev is je publieke interface, meestal eth0 of ens3. De voorbeelden gebruiken eth0.

4. Schrijf de serverconfiguratie

Maak /etc/wireguard/wg0.conf aan:

ini
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <contents of server.key>

# NAT for VPN clients going out to the internet
PostUp   = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Plak de sleutel erin met:

bash
sed -i "s|<contents of server.key>|$(cat server.key)|" wg0.conf
chmod 600 wg0.conf

Debian 12 en Ubuntu 24.04 gebruiken onder de motorkap nftables, en het commando iptables werkt via de nftables-backend, dus de regels hierboven werken op beide.

5. Zet IP-forwarding aan

bash
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wireguard.conf
sysctl --system

6. Open de firewall en start de tunnel

Met UFW:

bash
ufw allow 51820/udp
ufw route allow in on wg0 out on eth0
ufw reload

ufw route allow laat doorgestuurd verkeer uit de tunnel naar internet gaan. Zonder deze regel maken clients wel verbinding, maar hebben ze geen internet.

Gebruik je een Wolkra-firewall, voeg daar dan ook een inkomende regel voor UDP 51820 toe.

Start WireGuard en zet het aan bij het opstarten:

bash
systemctl enable --now wg-quick@wg0
wg show

wg show hoort de interface wg0 en zijn luisterpoort te tonen.

7. Voeg een client toe

Genereer sleutels voor de client op de server (of op het apparaat van de client, wat iets veiliger is omdat de privésleutel het apparaat dan nooit verlaat):

bash
cd /etc/wireguard
wg genkey | tee laptop.key | wg pubkey > laptop.pub

Voeg de client als peer toe aan de draaiende server en sla de configuratie op:

bash
wg set wg0 peer "$(cat laptop.pub)" allowed-ips 10.8.0.2/32
wg-quick save wg0

wg-quick save schrijft de actieve status terug naar wg0.conf, zodat de peer een herstart overleeft.

8. Schrijf de clientconfiguratie

Maak laptop.conf aan:

ini
[Interface]
PrivateKey = <contents of laptop.key>
Address = 10.8.0.2/32
DNS = <your resolver>

[Peer]
PublicKey = <contents of server.pub>
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
  • AllowedIPs = 0.0.0.0/0, ::/0 stuurt al het verkeer door de VPN (een full tunnel).
  • Voor een split tunnel die alleen je privénetwerk bereikt, gebruik je bijvoorbeeld AllowedIPs = 10.8.0.0/24, 10.0.0.0/24.
  • PersistentKeepalive houdt de tunnel open achter thuisrouters en mobiele netwerken.
  • DNS is het adres van een resolver die je vertrouwt, bijvoorbeeld een publieke resolver of een resolver die je op de server draait.

Importeren op een telefoon

bash
qrencode -t ansiutf8 < laptop.conf

Open de WireGuard-app, kies Scan from QR code en richt de camera op de terminal.

Importeren op een computer

Kopieer laptop.conf veilig naar het apparaat (bijvoorbeeld met scp) en importeer het in de WireGuard-app, of op Linux:

bash
sudo cp laptop.conf /etc/wireguard/wg0.conf
sudo wg-quick up wg0

Op een Linux-client stelt wg-quick DNS in via resolvconf. Klaagt hij dat het commando ontbreekt, installeer dan openresolv (Debian) of verwijder de regel DNS en stel DNS zelf in.

Verwijder daarna de privésleutel van de client van de server als je hem daar hebt gegenereerd.

9. Test de tunnel

Maak op de client verbinding en controleer het publieke adres:

bash
curl -4 https://ifconfig.me

Je hoort het adres van de server te zien. Op de server:

bash
wg show

Een recente "latest handshake" en oplopende tellers voor het dataverkeer betekenen dat de peer verbonden is.

IPv6 toevoegen aan de tunnel

Heeft je server een IPv6-adres, dan kun je clients ook IPv6 geven. Voeg een privé-IPv6-range (een unique local address zoals fd42:42:42::1/64) toe aan het Address van de server, een bijpassend adres per client, zet net.ipv6.conf.all.forwarding=1 aan en voeg een ip6tables-masquerade-regel toe zoals die voor IPv4. Doe je dat niet, laat ::/0 dan weg uit de AllowedIPs van de client, anders wordt IPv6-verkeer weggegooid in plaats van dat het lekt.

Problemen oplossen

Symptoom Controleer
Geen handshake Is de UDP-poort open in UFW en in de cloudfirewall? Kloppen het endpoint en de publieke sleutel?
Wel handshake, geen internet Is ip_forward ingesteld? Staat de NAT-regel op de juiste interface? Is ufw route allow toegevoegd?
Websites laden traag Probeer de MTU te verlagen: voeg MTU = 1380 toe aan de [Interface] van de client
Werkt via wifi, niet mobiel Voeg PersistentKeepalive = 25 toe

journalctl -u wg-quick@wg0 toont fouten tijdens het opstarten.

Dataverkeer en kosten

Een VPN verdubbelt het dataverkeer op de server: data komt binnen vanaf internet en gaat weer uit naar de client. Bij bemeterde plannen loopt dat snel op. Servers van Wolkra hebben onbemeterde bandbreedte zonder kosten per GB, op gedeelde poorten tot 10 Gbit/s onder fair use. Let op: het beleid voor acceptabel gebruik geldt nog steeds voor alles wat door je VPN gaat.

Wil je weten waarom mensen hun eigen VPN draaien, zie dan toepassingen voor een VPN-server. Om de host zelf te beveiligen, volg je een Ubuntu-server beveiligen, maar sla de sysctl-instellingen voor redirects over, want die botsen met routing.

Veelgestelde vragen

Hoeveel server heb ik nodig voor WireGuard?

Heel weinig. WireGuard draait in de kernel, en een server met 1 vCPU en 1 GB kan een huishouden of klein team met gemak aan.

Welke poort gebruikt WireGuard?

Elke UDP-poort die je kiest. 51820 is de gangbare standaard; open hem zowel in de firewall op de server als in een eventuele cloudfirewall.

Gebruikt een VPN-server veel dataverkeer?

Ja, elke byte die een client gebruikt, gaat de server in en weer uit. Met een onbemeterd plan voorkom je daarvoor kosten per GB.

Kan het makkelijker dan WireGuard met de hand configureren?

Bij Wolkra kun je bij het aanmaken van een server de WireGuard-app met één klik kiezen. Die is een paar minuten na het opstarten klaar.

Kan ik WireGuard gebruiken om privéservers te bereiken?

Ja. Routeer de range van je privénetwerk door de tunnel in plaats van al het verkeer, dan kunnen clients servers bereiken die geen publiek IP hebben.

Start een server in Frankfurt

Maak een account aan, waardeer op en draai een server vanaf €3.49 per maand. Je betaalt alleen voor de uren die je gebruikt. Onbemeterde bandbreedte bij elk pakket.