Een zelf gehoste WireGuard VPN geeft je laptop en telefoon een versleuteld pad naar een server die je zelf beheert. Dat is handig als je een stabiel uitgaand IP wilt, veilige toegang op onbetrouwbare wifi, of een privéroute naar een ander netwerk. Anoniem word je er niet van: websites zien nog steeds één VPS-adres en de hostingprovider beheert nog steeds het onderliggende netwerk.
Deze handleiding bouwt een IPv4-fulltunnel-VPN op Ubuntu Server. Je installeert WireGuard, genereert sleutels met strikte rechten, schakelt routering in, voegt firewall- en NAT-regels toe, verbindt desktop- en mobiele clients en controleert de tunnel. Hetzelfde ontwerp kan IPv6 ondersteunen, maar pas nadat de VPS gerouteerde IPv6-ruimte heeft en je IPv6-forwarding en firewallregels apart instelt.
Wat is WireGuard?
WireGuard is een modern, platformonafhankelijk VPN-protocol met bijbehorende implementatie dat versleutelde IP-pakketten over UDP verstuurt. De WireGuard-protocolspecificatie definieert een vaste set cryptografische primitieven, waaronder ChaCha20-Poly1305, Curve25519, BLAKE2s, SipHash24 en HKDF. Dat bewust kleine ontwerp maakt configureren en auditen eenvoudiger dan bij protocollen met veel uitwisselbare cipher suites.
WireGuard heeft geen centraal accountsysteem en geen ingebouwde gebruikersmap. Elk apparaat is een peer met een eigen sleutelpaar, tunneladres en eigen AllowedIPs-regels. Op een VPS fungeert doorgaans één peer als de gateway richting internet, terwijl laptops en telefoons de verbindingen daarheen opzetten.
Waarom WireGuard op een VPS?
- Eenvoudig peermodel: Elk apparaat krijgt één sleutelpaar en één peer-item.
- Klein aanvalsoppervlak: WireGuard gebruikt een compact protocol en een vaste cryptosuite in plaats van een lange lijst verouderde opties.
- Goede prestaties: Kernelintegratie op Linux en efficiënte cryptografie kunnen een hoge doorvoer leveren, al hangt het resultaat nog steeds af van CPU, netwerkcapaciteit, latency en pakketgrootte.
- Clients voor meerdere platforms: Er zijn officiële clients voor Windows 10 en 11, macOS, Android en iOS, terwijl Linux en verschillende BSD-systemen native tools of pakketten leveren.
- Roaming: Een peer kan van netwerk en bron-IP wisselen zonder een nieuwe WireGuard-identiteit te krijgen; de server leert het laatst geauthenticeerde eindpunt.
- Duidelijke routeringscontrole: AllowedIPs bepaalt zowel welke bestemmingen de tunnel gebruiken als welke tunneladressen bij elke peer horen.
Verder lezen: de Cloudzy-gids over VPS voor VPN. Voor oudere implementaties, zie de PPTP-installatiegids van Cloudzy; kies PPTP niet voor een nieuwe VPN waarbij beveiliging telt.
Sla de handmatige installatie over: WireGuard met één klik
Heb je geen technische achtergrond, of doe je de installatie liever niet zelf? Cloudzy biedt een WireGuard VPN-deployment met één klik. De rest van deze handleiding behandelt de handmatige opbouw; dit onderdeel behandelt de snelle route.
- Log in op het Cloudzy-controlepaneel.
- Kies WireGuard uit de lijst met toepassingen.
- Maak een VPS aan op de gewenste locatie met het pakket van je keuze. Een Ubuntu-machine met basisspecificaties volstaat.
Zodra je VPS klaar is, log je in en voer je het volgende commando uit om je configuratie te tonen:
cat client.conf
Je ziet dan zoiets als dit:
Gebruik die configuratie om een nieuwe tunnel aan te maken in de WireGuard-client op je pc, en de verbinding staat. Wil je liever elk onderdeel begrijpen, of heb je een opzet nodig die het één-klik-image niet dekt, ga dan verder met de handmatige opbouw hieronder.
WireGuard instellen op Ubuntu
De onderstaande commando's richten zich op een actuele Ubuntu Server-release. Voer ze uit via SSH als gebruiker met sudo-rechten. Houd de SSH-sessie open tot de firewall bevestigd is, en maak vooraf een VPS-snapshot als je provider dat ondersteunt.
Vereisten
- Eén Ubuntu-VPS met een openbaar IPv4-adres
- Een niet-root-account met sudo-toegang
- SSH-toegang en de gegevens van de herstelconsole van de VPS-provider
- Eén clientapparaat met de officiële WireGuard-app of de commandoregeltools
Je hebt geen tweede Ubuntu-server nodig. De client kan een Windows-pc, Mac, Linux-laptop, Android-telefoon of iPhone zijn.
Stap 1: WireGuard installeren
sudo apt update
sudo apt install wireguard -y
Controleer of de tools beschikbaar zijn:
wg --version
Stap 2: de serversleutels veilig genereren
Maak de WireGuard-map aan en genereer het sleutelpaar met een strikte umask. De privésleutel mag nooit naar een client worden gekopieerd of in logs terechtkomen.
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'
Toon de sleutels wanneer je ze in configuratiebestanden moet plakken:
sudo cat /etc/wireguard/server.key
sudo cat /etc/wireguard/server.pub
Stap 3: de serverconfiguratie maken
Open de interfaceconfiguratie:
sudo nano /etc/wireguard/wg0.conf
Plak het volgende blok en vervang SERVER_PRIVATE_KEY door de privésleutel uit de vorige stap:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
Het tunnelnetwerk 10.8.0.0/24 is slechts een voorbeeld. Kies een ander privébereik als het overlapt met een thuis-, kantoor- of cloudnetwerk dat je moet bereiken. Voeg SaveConfig = true niet toe: dat kan het bestand herschrijven wanneer de interface stopt en je handmatige wijzigingen wissen.
sudo chmod 600 /etc/wireguard/wg0.conf
Stap 4: IPv4-forwarding inschakelen
De VPS moet pakketten routeren tussen wg0 en zijn publieke netwerkinterface. Zet die instelling in een apart sysctl-bestand:
sudo nano /etc/sysctl.d/70-wireguard-routing.conf
net.ipv4.ip_forward = 1
Pas het toe en controleer het:
sudo sysctl -p /etc/sysctl.d/70-wireguard-routing.conf
sysctl net.ipv4.ip_forward
Dit volgt het routeringsmodel uit de WireGuard-gatewaygids van Ubuntu. IPv6 vereist een gerouteerd IPv6-prefix, aparte tunneladressen, IPv6-forwarding en IPv6-firewallregels; stuur clientverkeer pas naar ::/0 als dat pad volledig is.
Stap 5: firewall- en NAT-regels toevoegen
Zoek de naam van de publieke interface van de VPS. Let in de uitvoer hieronder op de waarde na dev; veelvoorkomende namen zijn eth0, ens3 en enp1s0.
ip route show default
Open wg0.conf opnieuw en voeg de volgende regels toe onder [Interface]. Vervang eth0 overal als je publieke interface anders heet:
PostUp = iptables -I FORWARD 1 -i %i -o eth0 -j ACCEPT; iptables -I FORWARD 1 -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PreDown = iptables -D FORWARD -i %i -o eth0 -j ACCEPT; iptables -D FORWARD -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Als UFW actief is, sta dan eerst SSH toe voordat je iets aan de status verandert, en open daarna de UDP-poort van WireGuard:
sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw status
Is UFW nu inactief en wil je het inschakelen, controleer dan eerst of de OpenSSH-regel bestaat. Schakel UFW niet uit en weer in via SSH puur om deze regels toe te passen; dat levert een vermijdbaar risico op buitensluiting op.
Stap 6: de WireGuard-interface starten
sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0 --no-pager
sudo wg show
Faalt de service, voer dan journalctl uit voordat je iets anders wijzigt:
sudo journalctl -u wg-quick@wg0 -n 50 --no-pager
Een WireGuard-client toevoegen
Elk apparaat heeft een uniek sleutelpaar en tunnel-IP nodig. Gebruik één clientconfiguratie nooit op twee apparaten: dubbele sleutels en adressen maken routering onvoorspelbaar en verhinderen een nette intrekking.
Stap 1: de clientsleutels genereren
De officiële desktop- en mobiele apps kunnen sleutels genereren wanneer je een lege tunnel aanmaakt. Gebruik op een Linux-client:
umask 077
wg genkey | tee client.key | wg pubkey > client.pub
Houd client.key op dat apparaat. Kopieer alleen client.pub naar de server.
Stap 2: de peer op de server toevoegen
sudo nano /etc/wireguard/wg0.conf
Voeg één peer-blok toe. Vervang CLIENT_PUBLIC_KEY door de publieke sleutel van de client:
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
De regel Address = 10.8.0.2/32 wijst het tunneladres toe op de client. In het [Peer]-blok van de server koppelt AllowedIPs = 10.8.0.2/32 dat adres aan deze peer voor routering en bronvalidatie. Gebruik 10.8.0.3/32 voor het volgende apparaat en tel daarna verder omhoog zonder duplicaten.
sudo systemctl restart wg-quick@wg0
Stap 3: de clientconfiguratie opbouwen
Maak client.conf aan op de client en vervang alle plaatshouders:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.8.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = VPS_PUBLIC_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0 maakt hier een IPv4-fulltunnel van. Wil je alleen toegang tot het VPN-netwerk, gebruik dan AllowedIPs = 10.8.0.0/24. PersistentKeepalive is nuttig voor een client achter NAT waarvan de mapping ook in rust bereikbaar moet blijven; de snelstartgids van WireGuard merkt op dat de meeste peers het niet nodig hebben.
Stap 4: de configuratie importeren
Gebruik de installatiegids voor WireGuard-clients om de ondersteunde client voor jouw platform te downloaden.
- Windows: Kies Add Tunnel en importeer vervolgens client.conf.
- macOS: Kies Import tunnel(s) from file en selecteer client.conf.
- Android of iOS: Importeer het bestand of scan een daaruit gegenereerde QR-code.
Installeer op een Ubuntu- of Debian-client waar client.conf staat qrencode en geef het bestand weer in de terminal van die client:
sudo apt install qrencode -y
qrencode -t ansiutf8 < client.conf
De QR-code bevat de privésleutel van de client. Toon hem alleen in een vertrouwd terminalvenster, bewaar geen screenshots en wis de terminal nadat de telefoon hem heeft geïmporteerd.
Stap 5: de tunnel controleren
Activeer de tunnel, genereer verkeer vanaf de client en voer deze controles uit op de VPS:
sudo wg show
ip -brief address show wg0
Een recente handshake en oplopende overdrachtstellers bevestigen dat WireGuard pakketten uitwisselt. Controleer daarna de fulltunnel-uitgang vanaf de client:
curl -4 https://api.ipify.org; echo
Het commando hoort het publieke IPv4-adres van de VPS terug te geven. Is er geen handshake, controleer dan het endpointadres, de UDP-poort, de cloudfirewall, de UFW-regel en de sleutels. Is er wel een handshake maar geen internettoegang, controleer dan IP-forwarding, de naam van de publieke interface, de NAT-regels en DNS.
Kun je WireGuard achter Nginx zetten?
De documentatie van de NGINX-streammodule legt uit hoe NGINX UDP van de ene poort naar de andere kan doorgeven, dus UDP/80 of UDP/443 naar WireGuard op UDP/51820. Dat is een UDP-relay, geen HTTP-reverse-proxy. Het maakt van WireGuard geen TCP of HTTPS, en het laat het protocol er ook niet uitzien als gewoon webverkeer.
Voor de meeste implementaties is het simpeler om de ListenPort van WireGuard te wijzigen en de bijbehorende UDP-poort te openen dan om NGINX toe te voegen. Blokkeert een netwerk UDP volledig of gebruikt het deep packet inspection, dan lost een NGINX-UDP-relay het probleem niet op. De documentatie over de beperkingen van WireGuard stelt dat obfuscatie buiten het bereik van het protocol valt.
De VPS verbinden met een thuisnetwerk
Een VPS kan als knooppunt dienen tussen een rondtrekkende client en een apparaat bij jou thuis. De peer aan de thuiskant zet zelf een uitgaande WireGuard-verbinding op naar de VPS, waardoor je thuis geen publiek IP nodig hebt. Stel PersistentKeepalive in op die thuis-peer als die achter NAT zit.
Het volledige thuisnetwerk bereiken vergt meer dan alleen een peer toevoegen. De peer-vermelding op de VPS voor de thuisgateway moet het thuissubnet in AllowedIPs bevatten, bijvoorbeeld 192.168.1.0/24. Een externe client met fulltunnel (AllowedIPs = 0.0.0.0/0) stuurt dat verkeer al via de VPS; voeg 192.168.1.0/24 alleen aan de client toe als je split tunneling gebruikt. Ook de thuisgateway moet verkeer doorsturen tussen WireGuard en het LAN. Voeg een route toe op de thuisrouter of een zorgvuldig afgebakende NAT-regel op de thuisgateway. Controleer eerst op overlap: een client die met een ander 192.168.1.0/24-netwerk verbonden is, kan beide netwerken niet netjes routeren zonder hernummering of geavanceerdere policy routing.
Zelf gehost WireGuard versus een commerciële VPN
Zelf hosten verandert wie de VPN beheert, maar verbetert de anonimiteit niet automatisch. Een persoonlijke VPS geeft je één stabiel uitgaand IP, dat eenvoudig aan een hostingnetwerk te koppelen is. Een commerciële dienst biedt meestal gedeelde uitgangsadressen en makkelijk wisselen van locatie, maar je moet vertrouwen op het beleid, de bedrijfsvoering en eventuele onafhankelijke audits die zo'n dienst publiceert.
WireGuard zelf is licht, en een kleine VPS is voor één persoon met een paar apparaten vaak een redelijk startpunt. Zie een vast RAM- of vCPU-getal niet als doorvoergarantie. Test met je echte aantal apparaten, je regio, de pakketgrootte en de verwachte bandbreedte, en schaal daarna op als CPU-verzadiging, pakketverlies of latency de beperkende factor wordt.
Kies voor zelf hosten wanneer een stabiel persoonlijk uitgaand IP, toegang op afstand of controle over de server zwaarder wegen dan locatiekeuze en gemak. Kies een commerciële VPN wanneer je veel landen, gedeelde uitgangen, brede ondersteuning voor consumentenapparaten en iemand anders die storingen oplost wilt.
| Beslissingsfactor | Zelf gehost WireGuard | Commerciële VPN |
|---|---|---|
| Kostenmodel | Eén server plus jouw beheertijd | Abonnement, vaak met korting bij langere looptijden |
| Uitgangslocaties | Eén locatie per server | Veel locaties beschikbaar in de app |
| Installatie | Jij configureert sleutels, routering, firewallregels en clients | App installeren en inloggen |
| Onderhoud | Jij patcht, monitort, maakt back-ups en lost problemen op | De aanbieder beheert de dienst |
| Privacymodel | Jij beheert de server, maar de hostingprovider kan nog steeds metadata zien | Je vertrouwt op het beleid van de aanbieder en de onafhankelijke audits die hij publiceert |
| Beste keuze | Stabiel persoonlijk uitgaand IP, toegang op afstand en controle over de infrastructuur | Wisselen van locatie, weinig onderhoud en brede ondersteuning voor apparaten |
Conclusie
Een betrouwbare WireGuard-implementatie draait om vijf dingen: beschermde privésleutels, unieke peeradressen, correcte AllowedIPs, werkende forwarding en NAT, en een firewallregel voor de luisterende UDP-poort. Controleer zowel de handshake als het publieke uitgangsadres voordat je op de tunnel vertrouwt, en houd de VPS na de uitrol gepatcht.
Wil je de server handmatig opbouwen, begin dan met een schone Cloudzy Ubuntu VPS. Sla je de installatiestappen liever over, gebruik dan de WireGuard-deployment met één klik van Cloudzy en ga meteen door naar de clientconfiguratie en verificatie.
Veelgestelde vragen
Waarom toont WireGuard wel een peer, maar geen handshake?
Een peer-vermelding bewijst alleen dat de configuratie is geladen. Geen handshake betekent meestal dat de client de server niet bereikt of dat de sleutels niet overeenkomen. Controleer de Endpoint van de client, het publieke IP van de server, UDP/51820 in zowel de firewall van de provider als UFW, en de publieke sleutels aan beide kanten. Genereer verkeer vanaf de client voordat je controleert, want WireGuard is stil als het niets doet.
Waarom verbindt de tunnel wel, maar valt de internettoegang weg?
Een handshake zonder internettoegang wijst meestal op routering en niet op versleuteling. Controleer net.ipv4.ip_forward, bevestig de naam van de publieke interface in de NAT-regel, bekijk de FORWARD-regels en test DNS los van pure IP-connectiviteit. Zorg er ook voor dat AllowedIPs op de client past bij de beoogde fulltunnel- of splittunnelopzet.
Heeft elke client PersistentKeepalive nodig?
Nee. Voeg het toe wanneer een peer achter NAT zijn mapping open moet houden tijdens rustperiodes, wat gebruikelijk is bij telefoons, thuisgateways en sommige restrictieve netwerken. Laat het weg wanneer de peer vaak communiceert of niet bereikbaar hoeft te zijn vanaf de andere kant terwijl hij niets doet.