VPN instellen op je VPS met WireGuard
Dit is voor beheerders die een Ubuntu- of Debian-VPS hebben en zelf de tunnel willen beheren. Je leert de server opzetten, een client koppelen en controleren of het verkeer echt via de VPS loopt.
Wat je nodig hebt
- Een VPS met Ubuntu 22.04 of Debian 12 (ouder werkt, maar de kernelmodule kan ontbreken)
- Root-toegang of een sudo-gebruiker
- WireGuard 1.0.20210914 of nieuwer (de versie die in de standaardrepositories van Ubuntu 22.04 en Debian 12 zit)
- Een client: laptop, telefoon of tweede machine
- Poort 51820/UDP vrij in de firewall van je provider
Stappen
1. Systeem bijwerken en WireGuard installeren
Eerst de pakketlijst verversen, dan de tools installeren. Zonder update installeer je mogelijk een versie waarin bekende bugs nog zitten.```bash apt update && apt upgrade -y apt install wireguard wireguard-tools -y ```
`wireguard` bevat de kernelmodule, `wireguard-tools` levert `wg` en `wg-quick`. Op moderne kernels is de module al aanwezig; het pakket is dan een metapakket dat niets extra's doet.
2. Kernelmodule laden en controleren
De module wordt meestal automatisch geladen zodra je een `wg`-interface aanmaakt, maar je kunt hem nu al forceren om te zien of hij beschikbaar is.```bash modprobe wireguard lsmod | grep wireguard ```
Krijg je uitvoer met `wireguard` erin, dan is de module actief. Geen uitvoer betekent dat je kernel hem niet heeft — dan zit je op een oude kernel of een VPS-image waarin de module is weggelaten. In dat geval: kernel upgraden of `wireguard-dkms` installeren.
3. IP-forwarding aanzetten
Je VPS moet pakketten van je client doorsturen naar het internet. Zonder deze instelling komt de tunnel tot stand, maar gaat er geen verkeer doorheen — je pingt de server, en daar stopt het.```bash echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf sysctl -p ```
De `sysctl -p` herlaadt de configuratie direct. Doe je dat niet, dan geldt de instelling pas na een reboot. De IPv6-regel is optioneel; laat hem weg als je alleen IPv4 gebruikt.
4. Sleutelparen genereren
WireGuard werkt met public-key cryptografie: elke peer heeft een privésleutel en een publieke sleutel. De privésleutel verlaat nooit het apparaat.```bash mkdir -p /etc/wireguard/keys chmod 700 /etc/wireguard/keys wg genkey | tee /etc/wireguard/keys/server.key | wg pubkey > /etc/wireguard/keys/server.pub chmod 600 /etc/wireguard/keys/server.key cat /etc/wireguard/keys/server.pub ```
De laatste regel toont de publieke sleutel van de server. Die heb je straks nodig in de clientconfiguratie. Bewaar de privésleutel op een plek waar alleen root bij kan — met `chmod 600` is dat geregeld.
5. Serverconfiguratie schrijven
Het configuratiebestand definieert de interface, het interne IP-adres en de peers die mogen verbinden.```bash
cat > /etc/wireguard/wg0.conf < Twee dingen om op te letten. `eth0` is de naam van je netwerkinterface — controleer met `ip route | grep default` of dat klopt, want op sommige VPS'en heet hij `ens3` of `enp1s0`. En de `MASQUERADE`-regel zorgt dat je client het internet op komt met het IP van de VPS; zonder die regel blijven antwoorden steken.
6. Firewall openzetten
WireGuard luistert op UDP, niet op TCP. Een firewallregel voor TCP op poort 51820 doet niets.
```bash ufw allow 51820/udp ufw allow OpenSSH ufw enable ```
Gebruik je `nftables` of `iptables` direct, pas de regel daar aan. De volgorde maakt uit: zet SSH open vóór je `ufw enable` draait, anders sluit je jezelf buiten.
7. Interface starten en persistent maken
Nu de configuratie klaar is, breng je de interface omhoog.```bash wg-quick up wg0 systemctl enable wg-quick@wg0 ```
`wg-quick up` leest `wg0.conf`, zet het IP-adres, opent de poort en voert de `PostUp`-regels uit. Met `systemctl enable` start de interface automatisch na een reboot. Zonder die stap is je VPN weg zodra de VPS herstart — en dat merk je meestal op een moment dat je er niet bij kunt.
8. Client koppelen
Genereer op de client een sleutelpaar. Op een Linux-client doe je dat met dezelfde commando's als op de server. Op een telefoon of Windows-machine gebruik je de WireGuard-app, die het sleutelpaar voor je aanmaakt.Voeg vervolgens op de server een `[Peer]`-blok toe:
```bash
cat >> /etc/wireguard/wg0.conf < [Peer]
PublicKey = `AllowedIPs = 10.8.0.2/32` betekent: deze peer krijgt precies één adres in de tunnel. Ruimer instellen — `10.8.0.0/24` — werkt ook, maar dan kan elke client met die sleutel het hele subnet bereiken. Voor één apparaat is `/32` genoeg. Het clientconfiguratiebestand ziet er zo uit: ```ini
[Interface]
PrivateKey = [Peer]
PublicKey = `AllowedIPs = 0.0.0.0/0` stuurt al het verkeer door de tunnel. Wil je alleen je VPS bereiken en de rest via je normale verbinding laten lopen, zet dan `10.8.0.0/24`. `PersistentKeepalive` houdt de verbinding open als je client achter NAT zit.
Verificatie
Op de server:
```bash wg show ```
Je ziet de interface, de listen-poort en per peer een `latest handshake` met een tijd. Staat daar een tijd van minder dan twee minuten, dan is de tunnel actief.
Op de client:
```bash ping -c 3 10.8.0.1 curl -s https://ifconfig.me ```
De ping moet antwoorden. Het IP-adres dat `curl` teruggeeft, moet dat van je VPS zijn. Klopt dat, dan loopt je verkeer daadwerkelijk door de tunnel.
Veelgestelde problemen
Handshake lukt niet, `wg show` blijft leeg bij `latest handshake`. Meestal een firewall of NAT-probleem. Controleer of poort 51820/UDP open staat bij je provider — sommige providers blokkeren UDP standaard. Test met `nc -u -l 51820` op de server en een UDP-ping vanaf de client.Tunnel komt op, maar geen internet. IP-forwarding staat uit, of de `MASQUERADE`-regel wijst naar de verkeerde interface. Controleer met `sysctl net.ipv4.ip_forward` en `ip route | grep default`. Staat forwarding op `0`, dan gaat er niets door.
Verbinding valt weg na een paar minuten. Je client zit achter NAT en de mapping verloopt. Zet `PersistentKeepalive = 25` in de clientconfiguratie. Twintig seconden is ook goed; vijfentwintig is de gangbare waarde.
Een eigen VPN op een VPS kost je een paar euro per maand en een uur werk. Wat je ervoor terugkrijgt is een tunnel waarvan alleen jij de sleutels hebt — en de wetenschap dat als er iets misgaat, er niemand is die het voor je oplost.