Zoeken op website

Hoe WireGuard in te stellen op Ubuntu


Inleiding

WireGuard is een lichtgewicht Virtual Private Network (VPN) dat zowel IPv4- als IPv6-verbindingen ondersteunt. Een VPN stelt je in staat om onbetrouwbare netwerken te gebruiken alsof je op een privénetwerk zit. Het geeft je de mogelijkheid om veiliger toegang te krijgen tot het internet vanaf apparaten zoals laptops of mobiele telefoons wanneer je bent verbonden met onbetrouwbare netwerken, inclusief openbaar WiFi.

De encryptie van WireGuard is afhankelijk van openbare en privésleutels zodat peers versleutelde tunnels tussen elkaar kunnen opzetten. Elke WireGuard-versie gebruikt een vaste set moderne cryptografische methoden, wat helpt om het protocol eenvoudig en voorspelbaar te houden. Dit ontwerp vermijdt onderhandelingen tijdens runtime en verkleint het risico op configuratiefouten.

Ter vergelijking: andere VPN-software zoals OpenVPN en IPsec vertrouwt op Transport Layer Security en certificaten om te authenticeren en versleutelde tunnels op te zetten. Hoewel deze aanpak flexibiliteit biedt en een breed scala aan clients ondersteunt, verhoogt het ook de configuratiecomplexiteit en maakt het moeilijker om het operationele gedrag te doorgronden.

In deze handleiding ga je WireGuard instellen op een Ubuntu-server en een andere machine configureren om ermee te verbinden als een peer met zowel IPv4 als IPv6, wat meestal een dual-stack configuratie wordt genoemd. Je leert ook hoe je het verkeer van peers via de WireGuard-server kunt routeren in een gateway-opstelling, en hoe je de VPN kunt gebruiken voor versleutelde peer-to-peer communicatie.

Naast de kernopzet behandelt deze gids praktische onderwerpen die belangrijk zijn voor implementaties in de echte wereld. Dit omvat het begrijpen van WireGuard’s peer-to-peer architectuur, het beheren en roteren van sleutels, het correct afhandelen van IPv6 en dual-stack routing, het verbeteren van betrouwbaarheid voor peers achter NAT, het optimaliseren van prestaties en het begrijpen hoe WireGuard zich verhoudt tot OpenVPN wat betreft transportprotocollen en firewallgedrag.

Voor de doeleinden van deze tutorial wordt een ander Ubuntu-systeem gebruikt als de WireGuard-peer. Latere tutorials in deze reeks behandelen het installeren en gebruiken van WireGuard op Windows, macOS, Android en iOS.

Zet je frontend-applicaties in vanaf GitHub met het App Platform van Linux-Console.net. Laat Linux-Console.net zich richten op het schalen van je app.

Opmerking: Als je van plan bent om WireGuard op een Linux-Console.net Droplet in te stellen, wees je ervan bewust dat wij, net als veel andere hostingproviders, kosten in rekening brengen voor overmatig bandbreedteverbruik. Houd daarom rekening met hoeveel verkeer je server verwerkt. Bekijk onze pagina Over Bandbreedtefacturering voor meer informatie.

Belangrijkste punten:

  • WireGuard is een lichte VPN die moderne cryptografie gebruikt met een eenvoudig ontwerp gebaseerd op publieke en private sleutelparen, wat de complexiteit van de configuratie en fouten vermindert.
  • WireGuard volgt een peer-to-peer architectuur waarbij alle systemen dezelfde software gebruiken, en de termen server en peer beschrijven alleen de netwerktopologie, niet verschillende rollen of mogelijkheden.
  • Alle versleuteling, authenticatie en routeringsgedrag in WireGuard wordt expliciet gedefinieerd in configuratiebestanden, zonder besturingslaag, certificaatautoriteit of runtime-onderhandeling.
  • De AllowedIPs-instelling heeft twee doeleinden: het bepaalt welk verkeer via de tunnel wordt geleid en fungeert als een strikt toegangscontrollijst voor binnenkomend verkeer van peers.
  • WireGuard ondersteunt zowel IPv4 als IPv6 op gelijke wijze, en dual-stackconfiguraties vereisen zorgvuldige routering, firewallregels en doorstuurinstellingen voor elk protocol.
  • Bij het gebruik van WireGuard als een VPN-gateway moeten IP-forwarding en firewall-masquerading op de server worden geconfigureerd om het verkeer van peers naar externe netwerken te laten doorgaan.
  • De wg-quick hulpprogramma automatiseert het aanmaken van routes, firewallregels en het instellen van interfaces, terwijl de WireGuard kernelmodule zich alleen richt op het versleutelen en ontsleutelen van pakketten.
  • IPv6-lekken kunnen optreden in dual-stack configuraties als IPv6-routes zoals ::/0 niet expliciet zijn opgenomen, waardoor IPv6-verkeer de VPN kan omzeilen, zelfs wanneer IPv4-verkeer correct via een tunnel wordt geleid.
  • WireGuard wijzigt automatisch geen systeemroutes, DNS-instellingen of firewallregels, dus hulpmiddelen zoals wg-quick of handmatige configuratie zijn nodig om routing en netwerkgedrag te beheren.
  • Dual-stack WireGuard-implementaties vereisen dat IPv4- en IPv6-forwarding, firewallregels en ICMPv6-ondersteuning afzonderlijk worden geconfigureerd, aangezien het besturingssysteem elk protocol onafhankelijk behandelt.

Vereisten

Om deze handleiding te volgen, hebt u nodig:

  • Een Ubuntu-server met een sudo-gebruiker zonder rootrechten en een ingeschakelde firewall. Om dit op te zetten, kun je onze tutorial 'Eerste Server Setup met Ubuntu' volgen. We zullen dit in deze gids aanduiden als de WireGuard Server.

  • Je hebt een clientmachine nodig die je zult gebruiken om verbinding te maken met je WireGuard-server. In deze handleiding zullen we naar deze machine verwijzen als de WireGuard Peer. Voor de doeleinden van deze handleiding wordt het aanbevolen om je lokale machine te gebruiken als de WireGuard Peer, maar je kunt ook externe servers of mobiele telefoons als clients gebruiken als je dat wilt. Als je een extern systeem gebruikt, zorg er dan voor dat je alle optionele secties later in deze handleiding volgt, anders kun je jezelf uit het systeem buitensluiten.

  • Om WireGuard met IPv6 te gebruiken, moet u er ook voor zorgen dat uw server is geconfigureerd om dat type verkeer te ondersteunen. Als u IPv6-ondersteuning met WireGuard wilt inschakelen en een Linux-Console.net Droplet gebruikt, raadpleeg dan deze documentatiepagina Hoe IPv6 in te schakelen op Droplets. U kunt IPv6-ondersteuning toevoegen wanneer u een Droplet maakt, of daarna via de instructies op die pagina.

Overzicht van de WireGuard-architectuur

Voordat je WireGuard configureert, is het nuttig om te begrijpen hoe systemen, peers en netwerkverkeer met elkaar omgaan. WireGuard maakt gebruik van een opzettelijk eenvoudige architectuur die controlelagen, certificeringsinstanties en runtime-onderhandeling van configuratieparameters vermijdt. Alle encryptie-, authenticatie- en routeringsgedragingen worden expliciet gedefinieerd via configuratiebestanden.

Peer-to-Peer Ontwerp- en Topologieterminologie

WireGuard is in wezen een peer-to-peerprotocol. Dezelfde WireGuard-software en kernelmodule draaien op alle deelnemende systemen, en er is geen apart server- of clientprogramma.

In deze handleiding verwijst de term WireGuard Server naar een centraal knooppunt in een hub-and-spoke-topologie. Dit systeem is publiek toegankelijk en fungeert als coördinatiepunt voor andere peers. De term WireGuard Peer verwijst naar apparaten die verbinding maken met dit knooppunt. Deze termen beschrijven de netwerkarchitectuur die in deze handleiding wordt gebruikt, en niet de verschillende softwarerollen of mogelijkheden.

Het begrijpen van dit onderscheid is belangrijk omdat WireGuard geen server-only configuratieopties heeft. Elk systeem kan functioneren als een hub, een spoke, of beide, volledig afhankelijk van hoe sleutels, adressen en routeringsregels zijn gedefinieerd.

Kerncomponenten in een WireGuard-implementatie

Een WireGuard-implementatie bestaat uit een klein aantal duidelijk gedefinieerde componenten, elk met een specifieke verantwoordelijkheid.

  • Centraal Peer (Hub): De centrale peer is een publiekelijk bereikbaar systeem dat luistert naar versleuteld UDP-verkeer op een enkele poort. Het host een virtuele tunnelinterface, meestal genaamd wg0, en slaat de publieke sleutels op van andere peers die ermee mogen communiceren. De hub ontdekt peers niet dynamisch en accepteert geen verbindingen impliciet. Verkeer wordt alleen geaccepteerd van peers wiens publieke sleutels en toegestane IP-bereiken expliciet zijn geconfigureerd.

  • Verbinden van Peers (Spaken): Verbonden peers zijn apparaten die versleutelde tunnels naar de centrale peer tot stand brengen. Deze apparaten kunnen laptops, servers, virtuele machines of mobiele systemen zijn. Elke peer heeft een uniek cryptografisch sleutelpaar en één of meer privé-IP-adressen toegewezen aan zijn tunnelinterface. Een peer stuurt verkeer de tunnel in alleen wanneer de routeringsregels dat aangeven.

  • Tunnelinterface (wg0): De tunnelinterface is een virtueel netwerkapparaat dat op elk deelnemend systeem wordt aangemaakt. Al het versleutelde verkeer komt binnen en verlaat het systeem via deze interface. Vanuit het perspectief van het besturingssysteem gedraagt wg0 zich als een standaard netwerkinterface, waardoor normale routeringstabellen, firewallregels en doorstuurbedragingsregels van toepassing zijn.

Versleuteling, Authenticatie en Handshakes

WireGuard gebruikt publieke-sleutelcryptografie om peers te authenticeren en het verkeer te versleutelen. Elke peer genereert een langetermijn privésleutel die op het lokale systeem blijft en nooit wordt verstuurd. De bijbehorende publieke sleutel wordt gedeeld met andere peers en toegevoegd aan hun configuraties.

Wanneer communicatie begint, voert WireGuard een stille, automatische cryptografische handdruk uit op basis van het Noise-protocolframework. Deze handdruk stelt tijdelijke sessiesleutels in en biedt perfecte voorwaartse geheimhouding. Deze sessiesleutels worden periodiek geroteerd zonder tussenkomst van de gebruiker.

WireGuard onderhandelt geen ciphersuites, authenticatiemethoden of protocolversies. Alle cryptografische primitieve zijn bij ontwerp vastgelegd. Dit elimineert een hele klasse van configuratiefouten terwijl het nog steeds moderne beveiligingsgaranties biedt.

Ondersteunde verkeersstroompatronen

WireGuard ondersteunt meerdere verkeerspatronen, afhankelijk van hoe routering en doorsturing zijn geconfigureerd. Deze tutorial richt zich op de twee meest voorkomende gebruiksscenario's.

Peer-to-Peer of interne netwerktoegang

In een peer-to-peer of interne toegangsconfiguratie wordt het verkeer alleen versleuteld tussen systemen die deel uitmaken van het VPN. De centrale peer fungeert als een veilig eindpunt of relais, maar stuurt geen verkeer door naar externe netwerken.

Deze configuratie wordt meestal gebruikt om toegang te krijgen tot particuliere diensten, infrastructuur te beheren of geïsoleerde systemen te verbinden. Verkeer wordt alleen via de tunnel geleid wanneer het bestemmingsadres overeenkomt met de privé-IP-bereiken die zijn gedefinieerd in de configuratie van de peer.

VPN-gatewaymodus

In gateway-modus stuurt de centrale peer verkeer van andere peers naar externe netwerken, inclusief het publieke internet. Peers sturen een deel of al hun verkeer door de tunnel, en de centrale peer leidt dat verkeer verder door met IP-forwarding en netwerkadresvertaling.

Deze configuratie vereist aanvullende systeeminstellingen, waaronder kernel forwarding en firewallregels. Wanneer de gatewaymodus is ingeschakeld, lijkt het uitgaande verkeer van peers afkomstig te zijn van het openbare IP-adres van de centrale peer.

De dubbele rol van AllowedIPs

De AllowedIPs-richtlijn dient twee verschillende doeleinden in WireGuard.

Ten eerste definieert het het uitgaande routeringsgedrag. Wanneer het bestemmingsadres van een pakket overeenkomt met een vermelding in AllowedIPs, wordt dat pakket via de WireGuard-tunnel geleid.

Ten tweede fungeert AllowedIPs als een strikte inkomende toegangscontrolematrix. Wanneer een pakket van een peer wordt ontvangen, controleert WireGuard het bron-IP-adres van het pakket. Als het bronadres niet is opgenomen in de AllowedIPs van die peer, wordt het pakket onmiddellijk verworpen.

Deze dubbele rol is opzettelijk en is een van de meest voorkomende oorzaken van configuratiefouten. Alleen de juiste routering is niet voldoende. De bron-IP-adressen die een peer mag gebruiken, moeten ook expliciet worden toegestaan.

Routingautomatisering en hulpprogramma's

De WireGuard-kernelmodule wijzigt zelf geen systeemroutes, DNS-instellingen of firewallregels. Het versleutelt en ontsleutelt alleen pakketten en koppelt ze aan peers.

Routingautomatisering wordt afgehandeld door hulpprogramma's zoals wg-quick. Deze tool leest het WireGuard-configuratiebestand en past de noodzakelijke routingtabellijsten, DNS-instellingen en firewallregels toe wanneer een tunnel wordt opgezet of afgesloten.

Als WireGuard wordt geconfigureerd met alternatieve tools zoals ruwe wg-commando’s, systemd-networkd of aangepaste scripts, moeten deze routeringswijzigingen handmatig worden beheerd.

Deze scheiding houdt het kernprotocol eenvoudig terwijl het flexibele integratie met verschillende systeemnetwerkstacks mogelijk maakt.

Stap 1 — WireGuard installeren en een sleutelpaars genereren

De eerste stap in deze handleiding is het installeren van WireGuard op je server. Om te beginnen, werk je de pakketindex van je WireGuard-server bij en installeer je WireGuard met de volgende opdrachten. Je kunt gevraagd worden het wachtwoord van je sudo-gebruiker in te voeren als dit de eerste keer is dat je sudo in deze sessie gebruikt:

sudo apt update

sudo apt install wireguard

Nu je WireGuard hebt geïnstalleerd, is de volgende stap het genereren van een privé- en openbare sleutel voor de server. Je gebruikt de ingebouwde wg genkey en wg pubkey opdrachten om de sleutels aan te maken en voegt vervolgens de privésleutel toe aan het configuratiebestand van WireGuard.

U moet ook de machtigingen van de sleutel die u zojuist hebt gemaakt, wijzigen met behulp van het chmod-commando, aangezien het bestand standaard leesbaar is voor elke gebruiker op uw server.

Maak de privésleutel voor WireGuard aan en wijzig de machtigingen met de volgende commando's:

wg genkey | sudo tee /etc/wireguard/private.key

sudo chmod go= /etc/wireguard/private.key

Het commando sudo chmod go=... verwijdert alle machtigingen voor gebruikers en groepen anders dan de root-gebruiker op het bestand, zodat alleen deze toegang heeft tot de privésleutel.

Je zou één regel met base64 gecodeerde uitvoer moeten ontvangen, dit is de privésleutel. Een kopie van de uitvoer wordt ook opgeslagen in het bestand /etc/wireguard/private.key voor toekomstige referentie door het tee-gedeelte van het commando. Noteer zorgvuldig de privé sleutel die wordt weergegeven, aangezien je deze later in deze sectie aan het configuratiebestand van WireGuard moet toevoegen.

De volgende stap is het maken van de bijbehorende openbare sleutel, die wordt afgeleid van de privésleutel. Gebruik de volgende opdracht om het bestand met de openbare sleutel te maken:

sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Dit commando bestaat uit drie afzonderlijke commando's die aan elkaar zijn gekoppeld met de | (pipe) operator:

  • sudo cat /etc/wireguard/private.key: dit commando leest het bestand met de privésleutel en geeft het weer op de standaard uitvoer
  • wg pubkey: het tweede commando neemt de uitvoer van het eerste commando als standaardinvoer en verwerkt deze om een publieke sleutel te genereren.
  • sudo tee /etc/wireguard/public.key: het laatste commando neemt de uitvoer van het publieke sleutelgeneratiecommando en stuurt deze door naar het bestand genaamd /etc/wireguard/public.key.

Wanneer je het commando uitvoert, ontvang je opnieuw een enkele regel met base64 gecodeerde uitvoer, wat de publieke sleutel voor je WireGuard-server is. Kopieer deze ergens voor referentie, aangezien je de publieke sleutel moet doorgeven aan elke peer die verbinding maakt met de server.

Stap 2 — Kies IPv4- en IPv6-adressen

In de vorige sectie heb je WireGuard geïnstalleerd en een sleutelpaar gegenereerd dat zal worden gebruikt om het verkeer van en naar de server te versleutelen. In deze sectie ga je een configuratiebestand voor de server maken en WireGuard instellen zodat het automatisch opstart wanneer je server opnieuw opstart. Je zult ook privé IPv4- en IPv6-adressen definiëren die gebruikt kunnen worden met je WireGuard-server en peers.

Als u van plan bent zowel IPv4- als IPv6-adressen te gebruiken, volg dan beide secties. Volg anders de instructies in de juiste sectie voor de netwerkvereisten van uw VPN.

Stap 2(a) — Het kiezen van een IPv4-bereik

Als u uw WireGuard-server gebruikt met IPv4-peers, heeft de server een reeks privé-IPv4-adressen nodig om te gebruiken voor clients en voor de tunnelinterface. U kunt elke reeks IP-adressen kiezen uit de volgende gereserveerde adresblokken (als u meer wilt weten over hoe deze blokken zijn toegewezen, kunt u de RFC 1918-specificatie raadplegen):

  • 10.0.0.0 tot 10.255.255.255 (10/8-prefix)
  • 172.16.0.0 tot 172.31.255.255 (172.16/12 prefix)
  • 192.168.0.0 tot 192.168.255.255 (192.168/16-prefix)

Voor de doeleinden van deze tutorial zullen we 10.8.0.0/24 gebruiken als een blok IP-adressen van het eerste bereik van gereserveerde IP's. Dit bereik maakt tot 255 verschillende peer-verbindingen mogelijk en zou over het algemeen geen overlappende of conflicterende adressen mogen hebben met andere privé-IP-bereiken. Voel je vrij om een reeks adressen te kiezen die werkt met je netwerkconfiguratie als dit voorbeeldbereik niet compatibel is met je netwerken.

De WireGuard-server zal één IP-adres uit het bereik gebruiken voor zijn privé-tunnel IPv4-adres. We zullen hier 10.8.0.1/24 gebruiken, maar elk adres in het bereik van 10.8.0.1 tot 10.8.0.255 kan worden gebruikt. Maak een aantekening van het IP-adres dat je kiest als je iets anders gebruikt dan 10.8.0.1/24. Je voegt dit IPv4-adres toe aan het configuratiebestand dat je definieert in Een WireGuard-serverconfiguratie maken.

Stap 2(b) — Het kiezen van een IPv6-bereik

Als je WireGuard gebruikt met IPv6, dan moet je een uniek lokaal IPv6-unicastadresprefix genereren op basis van het algoritme in RFC 4193. De adressen die je met WireGuard gebruikt, worden gekoppeld aan een virtuele tunnelinterface. Je moet een paar stappen doorlopen om een willekeurig, uniek IPv6-prefix te genereren binnen het gereserveerde fd00::/8-blok van private IPv6-adressen.

Volgens de RFC is de aanbevolen manier om een unieke IPv6-prefix te verkrijgen het combineren van het tijdstip van de dag met een uniek identificerend waarde van een systeem, zoals een serienummer of apparaat-ID. Die waarden worden vervolgens gehasht en afgekapt, resulterend in een set bits die kan worden gebruikt als een uniek adres binnen het gereserveerde privéblok fd00::/8 van IP-adressen.

Om te beginnen met het genereren van een IPv6-bereik voor je WireGuard-server, verzamel een 64-bits tijdstempel met behulp van de date-tool met het volgende commando:

date +%s%N

Je ontvangt een nummer zoals het volgende, dat het aantal seconden (de %s in het date-commando) en nanoseconden (de %N) sinds 1970-01-01 00:00:00 UTC samenvoegt:

1628101352127592197

Noteer de waarde ergens voor later gebruik in deze sectie. Kopieer vervolgens de machine-id-waarde van je server uit het bestand /var/lib/dbus/machine-id. Deze identifier is uniek voor je systeem en zou niet mogen veranderen zolang de server bestaat.

cat /var/lib/dbus/machine-id

Je ontvangt uitvoer zoals de volgende:

/var/lib/dbus/machine-id
20086c25853947c7aeee2ca1ea849d7d

Nu moet je de tijdstempel combineren met de machine-id en de resulterende waarde hashen met behulp van het SHA-1 algoritme. Het commando zal het volgende formaat gebruiken:

printf <timestamp><machine-id> | sha1sum

Voer het commando uit waarbij je je tijdstempel- en machine-identiteitswaarden vervangt:

printf 162810135212759219720086c25853947c7aeee2ca1ea849d7d | sha1sum

Je ontvangt een hashwaarde zoals de volgende:

4f267c51857d6dc93a0bca107bca2f0d86fac3bc  -

Merk op dat de uitvoer van het sha1sum-commando in hexadecimale notatie is, dus de uitvoer gebruikt twee tekens om één byte aan gegevens weer te geven. Bijvoorbeeld, 4f en 26 in de voorbeelduitvoer zijn de eerste twee bytes van de gehaste gegevens.

Het algoritme in de RFC vereist alleen de minst significante (achterste) 40 bits, of 5 bytes, van de gehashte uitvoer. Gebruik het cut-commando om de laatste 5 hexadecimaal gecodeerde bytes van de hash af te drukken:

printf 4f267c51857d6dc93a0bca107bca2f0d86fac3bc | cut -c 31-

Het -c-argument geeft het cut-commando de opdracht om alleen een gespecificeerde reeks tekens te selecteren. Het 31--argument geeft cut de opdracht om alle tekens van positie 31 tot het einde van de invoerregel af te drukken.

Je zou uitvoer zoals het volgende moeten ontvangen:

0d86fac3bc

In dit voorbeeldoutput is de set bytes: 0d 86 fa c3 bc.

Nu kunt u uw unieke IPv6-netwerkprefix opbouwen door de 5 bytes die u hebt gegenereerd toe te voegen aan de fd-prefix, waarbij u om de 2 bytes een : dubbele punt plaatst voor de leesbaarheid. Omdat elk subnet in uw unieke prefix in totaal 18.446.744.073.709.551.616 mogelijke IPv6-adressen kan bevatten, kunt u het subnet voor de eenvoud beperken tot een standaardgrootte van /64.

Met de eerder gegenereerde bytes met de /64 subnetgrootte zal het resulterende prefix het volgende zijn:

Unique Local IPv6 Address Prefix
fd0d:86fa:c3bc::/64

Dit fd0d:86fa:c3bc::/64 bereik is wat je zult gebruiken om individuele IP-adressen toe te wijzen aan je WireGuard-tunnelinterfaces op de server en peers. Om een IP voor de server toe te wijzen, voeg je een 1 toe na de laatste ::-tekens. Het resulterende adres wordt fd0d:86fa:c3bc::1/64. Peers kunnen elk IP in het bereik gebruiken, maar meestal verhoog je de waarde met één elke keer dat je een peer toevoegt, bijvoorbeeld fd0d:86fa:c3bc::2/64. Noteer het IP en ga verder met het configureren van de WireGuard-server in de volgende sectie van deze handleiding.

Overwegingen bij IPv6- en dual-stackconfiguratie

De bestaande stappen in deze handleiding leggen uit hoe je IPv6-adressen genereert en toewijst aan WireGuard-interface. Het gedrag van IPv6 in WireGuard verschilt echter op verschillende belangrijke punten van IPv4, vooral wanneer WireGuard wordt gebruikt als VPN-gateway. Het begrijpen van deze verschillen helpt om routingfouten, gedeeltelijke tunneling en veelvoorkomende IPv6-lekken te voorkomen.

IPv6-ondersteuning in WireGuard

WireGuard ondersteunt IPv6 als een volwaardig protocol. IPv6-verkeer wordt versleuteld, geverifieerd en gerouteerd met dezelfde mechanismen als IPv4-verkeer. Er is geen aparte IPv6-modus of extra configuratievlag. Als IPv6-adressen aan de tunnelinterface zijn toegewezen en de routeringsregels dit toestaan, stroomt IPv6-verkeer automatisch door de tunnel.

In tegenstelling tot IPv4 is IPv6 ontworpen om NAT te vermijden door gebruik te maken van wereldwijd routeerbare adressen, maar in de praktijk gebruiken veel VPN- en cloudomgevingen nog steeds NAT voor operationele eenvoud. Dit gedrag hangt echter af van de netwerkomgeving. In veel VPN-gatewayconfiguraties, zoals cloud VPS-instances of thuisrouters, ontvangt de server geen toegewezen IPv6-prefix die naar VPN-routers kan worden gerouteerd.

In deze veelvoorkomende scenario's krijgen peers privé IPv6-adressen toegewezen, meestal uit een Unique Local Address (ULA)-bereik. Wanneer privé IPv6-adressen worden gebruikt en de server geen routeerbare prefix voor hen heeft, is IPv6-masquerading nog steeds vereist. Dit wordt meestal geïmplementeerd met ip6tables -t nat-regels, vergelijkbaar met IPv4-masquerading, om VPN-peers toegang te geven tot het openbare internet.

IPv6 kan NAT volledig vermijden wanneer een juiste prefixtoewijzing beschikbaar is. Echter, de meeste eenvoudige VPN-gatewayimplementaties vertrouwen nog steeds op IPv6-masquerading om het routeren beheersbaar te houden.

Uitleg van Dual-Stack Gedrag

Een dual-stackconfiguratie maakt zowel IPv4 als IPv6 mogelijk op dezelfde WireGuard-interface. In deze opstelling krijgt de wg0-interface één IPv4-adres en één IPv6-adres toegewezen, en elk protocol wordt onafhankelijk gerouteerd.

Het besturingssysteem evalueert IPv4- en IPv6-routes afzonderlijk. Een peer kan IPv4-verkeer succesvol via de tunnel routeren terwijl IPv6-verkeer deze omzeilt, of andersom. Dit gedrag is verwacht en duidt vrijwel altijd op een configuratieprobleem in plaats van een probleem met WireGuard zelf.

Om dual-stack routing correct te laten werken, moeten aan meerdere voorwaarden worden voldaan. Zowel de server als de peer moeten IPv4- en IPv6-adressen hebben toegewezen aan hun WireGuard-interface. De AllowedIPs-richtlijn moet zowel IPv4- als IPv6-bereiken bevatten. IP-forwarding moet apart worden ingeschakeld voor IPv4 en IPv6. Firewallregels moeten forwarding en terugkeerverkeer voor beide protocollen toestaan.

Adres toewijzing en prefixlengtes

Voor IPv4 gebruiken WireGuard-implementaties meestal privéadresbereiken zoals 10.0.0.0/8 of 192.168.0.0/16. Elke peer krijgt gewoonlijk één enkel IPv4-adres toegewezen.

Voor IPv6 is het gebruikelijk om het VPN-netwerk te definiëren als een /64-prefix, zoals fd00::/64. Terwijl Ethernet-netwerken een /64 vereisen voor neighbor discovery en adresautoconfiguratie, werkt WireGuard als een Layer 3 point-to-point interface en gebruikt het deze mechanismen niet.

Daarom is het veilig en vaak aan te raden om elke peer een /128 IPv6-adres toe te wijzen, zoals fd00::2/128. Het gebruik van /128-adressen zorgt voor strikt routeringsgedrag en voorkomt dat peers proberen rechtstreeks te communiceren met andere adressen in het subnet zonder de juiste routeringsregels.

Het definiëren van het netwerk als een /64 terwijl peers /128 adressen krijgen, zorgt voor duidelijkheid en voorkomt dubbelzinnige routering.

Al het verkeer routeren met IPv6

Wanneer WireGuard is geconfigureerd als een VPN-gateway, moet IPv6-verkeer expliciet worden gerouteerd op dezelfde manier als IPv4-verkeer.

Voor IPv4 wordt al het verkeer gerouteerd met het 0.0.0.0/0 prefix. Voor IPv6 is het equivalente prefix ::/0. Beide prefixen moeten worden opgenomen als het doel is om al het verkeer via de VPN te routeren.

Als alleen 0.0.0.0/0 is geconfigureerd, wordt IPv4-verkeer via de VPN gestuurd terwijl IPv6-verkeer de lokale netwerkinterface blijft gebruiken. Deze situatie staat bekend als een IPv6-lek. Dit leidt er vaak toe dat DNS-query's, webverkeer of applicatieverbindingen de VPN omzeilen via IPv6 terwijl IPv4-verkeer beschermd blijft.

IPv6-lekken zijn een veelvoorkomende bron van verwarring en moeten altijd worden getest wanneer dual-stack netwerken zijn ingeschakeld.

Firewall, Doorsturen en ICMPv6

IPv6-doorgifte moet onafhankelijk van IPv4-doorgifte worden ingeschakeld. Het inschakelen van de één schakelt de ander niet automatisch in. Beide instellingen zijn vereist bij het routeren van verkeer tussen interfaces.

Firewallregels moeten ook expliciet worden gedefinieerd voor IPv6. Hulpmiddelen zoals ufw, iptables en nftables beschouwen IPv4 en IPv6 als aparte regelsets. Ontbrekende IPv6-regels kunnen verkeer stilzwijgend blokkeren, zelfs wanneer IPv4-connectiviteit lijkt te werken.

Het is vooral belangrijk om ICMPv6-verkeer toe te staan. In tegenstelling tot IPv4 is IPv6 afhankelijk van ICMPv6 voor essentiële functies zoals Path MTU Discovery. Als ICMPv6 wordt geblokkeerd, kunnen verbindingen vastlopen of mislukken wanneer grotere pakketten worden verzonden, zelfs als kleine pakketten lijken te werken.

Veelvoorkomende valkuilen bij dual-stack

Verschillende problemen komen vaak voor bij dual-stack WireGuard-implementaties. IPv6-routes kunnen ontbreken in de AllowedIPs-richtlijn, waardoor IPv6-verkeer de tunnel kan omzeilen. IPv6-forwarding is mogelijk niet ingeschakeld op de server, waardoor verkeer de tunnelinterface niet kan verlaten. Firewallregels kunnen IPv4-verkeer toestaan maar IPv6- of ICMPv6-verkeer blokkeren. DNS-resolvers kunnen IPv6-adressen teruggeven, ook al is de IPv6-routing niet correct geconfigureerd.

Deze problemen verschijnen vaak als tijdelijke storingen en worden vaak ten onrechte gediagnosticeerd als applicatie- of protocolproblemen.

Kiezen tussen alleen IPv4, alleen IPv6 en dual-stack

In sommige omgevingen maakt het gebruik van één protocol de werkzaamheden eenvoudiger.

IPv4-only implementaties zijn gemakkelijker te integreren met legacy-systemen en -tools. IPv6-only implementaties elimineren de behoefte aan IPv4 NAT en voorkomen adresuitputting, maar ze vereisen consistente IPv6-ondersteuning van providers en klantnetwerken.

Dual-stack implementaties bieden de grootste flexibiliteit, maar vereisen ook de meest zorgvuldige planning, configuratie en validatie.

Stap 3 — Een WireGuard-serverconfiguratie maken

Voordat u de configuratie van uw WireGuard-server maakt, heeft u de volgende gegevens nodig:

  • Zorg ervoor dat je de privésleutel beschikbaar hebt van WireGuard installeren en een sleutelpaar genereren.
  • Als je WireGuard met IPv4 gebruikt, heb je het IP-adres nodig dat je voor de server hebt gekozen in Kiezen van een IPv4-bereik, wat in dit voorbeeld 10.8.0.1/24 is.
  • Als je WireGuard met IPv6 gebruikt, heb je het IP-adres van de server nodig dat je hebt gegenereerd in Kiezen van een IPv6-bereik. In dit voorbeeld is het IP fd0d:86fa:c3bc::1/64.

Zodra je de vereiste privésleutel en IP-adres(sen) hebt, maak je een nieuw configuratiebestand aan met nano of je favoriete editor door het volgende commando uit te voeren:

sudo nano /etc/wireguard/wg0.conf

Voeg de volgende regels toe aan het bestand, waarbij u uw privésleutel vervangt op de aangegeven plek base64_encoded_private_key_goes_here en het IP-adres of de IP-adressen op de Address-regel. U kunt ook de ListenPort-regel wijzigen als u wilt dat WireGuard beschikbaar is op een andere poort:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_private_key_goes_here Address = 10.8.0.1/24, fd0d:86fa:c3bc::1/64 ListenPort = 51820 SaveConfig = true

De SaveConfig-regel zorgt ervoor dat wanneer een WireGuard-interface wordt afgesloten, alle wijzigingen worden opgeslagen in het configuratiebestand.

Sla het bestand /etc/wireguard/wg0.conf op en sluit het. Als je nano gebruikt, kun je dit doen met CTRL+X, gevolgd door Y en ENTER om te bevestigen. Je hebt nu een initiële serverconfiguratie die je verder kunt uitbreiden, afhankelijk van hoe je van plan bent je WireGuard VPN-server te gebruiken.

Stap 4 — Het aanpassen van de netwerkconfiguratie van de WireGuard-server

Als je WireGuard gebruikt om een peer te verbinden met de WireGuard-server om toegang te krijgen tot services op de server alleen, dan hoef je deze sectie niet te voltooien. Als je het internetverkeer van je WireGuard-peer via de WireGuard-server wilt laten verlopen, moet je IP-forwarding configureren door deze sectie van de tutorial te volgen.

Om forwarding te configureren, open het bestand /etc/sysctl.conf met nano of je favoriete editor:

sudo nano /etc/sysctl.conf

Als je IPv4 met WireGuard gebruikt, voeg dan de volgende regel onderaan het bestand toe:

net.ipv4.ip_forward=1

Als je IPv6 gebruikt met WireGuard, voeg dan deze regel onderaan het bestand toe:

net.ipv6.conf.all.forwarding=1

Als u zowel IPv4 als IPv6 gebruikt, zorg er dan voor dat u beide regels opneemt. Sla het bestand op en sluit het wanneer u klaar bent.

Om het bestand te lezen en de nieuwe waarden voor je huidige terminalsessie te laden, voer uit:

sudo sysctl -p
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1

Nu kan je WireGuard-server binnenkomend verkeer van het virtuele VPN-ethernetapparaat doorsturen naar andere apparaten op de server, en van daaruit naar het openbare internet. Met deze configuratie kun je al het webverkeer van je WireGuard-peer via het IP-adres van je server routeren, waardoor het openbare IP-adres van je client effectief verborgen blijft.

Voordat het verkeer echter correct via uw server kan worden geleid, moet u enkele firewallregels configureren. Deze regels zorgen ervoor dat het verkeer van en naar uw WireGuard-server en peers correct verloopt.

Stap 5 — De firewall van de WireGuard-server configureren

In dit gedeelte bewerkt u de configuratie van de WireGuard-server om firewallregels toe te voegen die ervoor zorgen dat het verkeer van en naar de server en clients correct wordt gerouteerd. Net als in het vorige gedeelte, sla deze stap over als u uw WireGuard VPN alleen gebruikt voor een machine-tot-machine verbinding om toegang te krijgen tot middelen die beperkt zijn tot uw VPN.

Om WireGuard VPN-verkeer door de firewall van de server toe te staan, moet je masquerading inschakelen, wat een iptables-concept is dat realtime dynamische netwerkadresvertaling (NAT) biedt om clientverbindingen correct te routeren.

Vind eerst de openbare netwerkinterface van je WireGuard-server met de subopdracht ip route:

ip route list default

De openbare interface is de string die in de uitvoer van dit commando wordt gevonden en die volgt op het woord "dev ". Bijvoorbeeld, dit resultaat toont de interface genaamd eth0, die hieronder is gemarkeerd:

default via 203.0.113.1 dev eth0 proto static

Noteer de naam van uw apparaat, aangezien u deze in de volgende stap aan de iptables-regels zult toevoegen.

Om firewallregels aan je WireGuard-server toe te voegen, open je opnieuw het bestand /etc/wireguard/wg0.conf met nano of je favoriete editor.

sudo nano /etc/wireguard/wg0.conf

Plak de volgende regels onderaan het bestand, na de regel SaveConfig=true:

/etc/wireguard/wg0.conf
. . . PostUp = ufw route allow in on wg0 out on eth0 PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PreDown = ufw route delete allow in on wg0 out on eth0 PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

De PostUp-regels worden uitgevoerd wanneer de WireGuard-server de virtuele VPN-tunnel start. In het voorbeeld hier zal het drie ufw- en iptables-regels toevoegen:

  • ufw route allow in on wg0 out on eth0: Deze regel staat het doorsturen van IPv4- en IPv6-verkeer toe dat binnenkomt op het wg0 VPN-interface naar het eth0 netwerkinterface op de server. Het werkt samen met de net.ipv4.ip_forward en net.ipv6.conf.all.forwarding sysctl-waarden die je in het vorige gedeelte hebt geconfigureerd.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE: Deze regel configureert masquerading en herschrijft IPv4-verkeer dat binnenkomt op de wg0 VPN-interface, zodat het lijkt alsof het rechtstreeks afkomstig is van het publieke IPv4-adres van de WireGuard-server.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE: Deze regel configureert masquerading en herschrijft IPv6-verkeer dat binnenkomt op de wg0 VPN-interface, zodat het lijkt alsof het rechtstreeks afkomstig is van het openbare IPv6-adres van de WireGuard-server.

Opmerking: IPv6-masquerading vereist kernelondersteuning voor ip6table_nat. Bij sommige distributies of cloud-images is deze module niet beschikbaar of standaard niet ingeschakeld. In die gevallen moet je correcte IPv6-routing met toegewezen prefixen gebruiken in plaats van NAT, en een routeerbare IPv6-prefix aan peers adverteren in plaats van ULA-adressen te gebruiken.

De PreDown-regels worden uitgevoerd wanneer de WireGuard-server de virtuele VPN-tunnel stopt. Deze regels zijn het tegenovergestelde van de PostUp-regels en hebben als functie het ongedaan maken van de forwarding- en masquerading-regels voor de VPN-interface wanneer de VPN wordt gestopt.

Bewerk in beide gevallen de configuratie om de IPv4- en IPv6-regels op te nemen of uit te sluiten die geschikt zijn voor uw VPN. Als u bijvoorbeeld alleen IPv4 gebruikt, kunt u de regels met de ip6tables-opdrachten uitsluiten.

Omgekeerd, als u alleen IPv6 gebruikt, bewerk dan de configuratie zodat alleen de ip6tables-commando's worden opgenomen. De ufw-regels moeten aanwezig zijn voor elke combinatie van IPv4- en IPv6-netwerken. Sla het bestand op en sluit het wanneer u klaar bent.

Het laatste onderdeel van het configureren van de firewall op je WireGuard-server is het toestaan van verkeer naar en van de WireGuard UDP-poort zelf. Als je de poort niet hebt gewijzigd in het /etc/wireguard/wg0.conf-bestand van de server, is de poort die je zult openen 51820. Als je een andere poort hebt gekozen bij het bewerken van de configuratie, zorg er dan voor dat je die vervangt in het volgende UFW-commando.

Voor het geval je bent vergeten de SSH-poort te openen tijdens het volgen van de vereiste handleiding, voeg je deze hier ook toe:

sudo ufw allow 51820/udp

sudo ufw allow OpenSSH

Opmerking: Als u een andere firewall gebruikt of uw UFW-configuratie hebt aangepast, moet u mogelijk extra firewallregels toevoegen. Bijvoorbeeld, als u besluit al uw netwerkverkeer via de VPN-verbinding te tunnelen, moet u ervoor zorgen dat verkeer op poort 53 is toegestaan voor DNS-verzoeken, en poorten zoals 80 en 443 voor respectievelijk HTTP- en HTTPS-verkeer. Als er andere protocollen zijn die u via de VPN gebruikt, moet u ook regels voor deze protocollen toevoegen.

Na het toevoegen van die regels, schakel UFW uit en weer in om het opnieuw te starten en de wijzigingen uit al de bestanden die je hebt aangepast te laden:

sudo ufw disable

sudo ufw enable

Je kunt bevestigen dat de regels actief zijn door het commando ufw status uit te voeren. Voer het uit, en je zou output moeten ontvangen zoals het volgende:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
51820/udp                  ALLOW       Anywhere                  
22/tcp                     ALLOW       Anywhere                  
51820/udp (v6)             ALLOW       Anywhere (v6)             
22/tcp (v6)                ALLOW       Anywhere (v6)

Je WireGuard-server is nu geconfigureerd om het verkeer van de VPN correct af te handelen, inclusief het doorsturen en maskeren voor peers. Met de firewallregels op hun plaats kun je de WireGuard-service zelf starten om naar peerverbindingen te luisteren.

Stap 6 — De WireGuard-server starten

WireGuard kan worden geconfigureerd om te draaien als een systemd-service met behulp van het ingebouwde wg-quick-script. Hoewel je handmatig het wg-commando kunt gebruiken om elke keer dat je de VPN wilt gebruiken de tunnel aan te maken, is dat een handmatig proces dat repetitief en foutgevoelig kan zijn. In plaats daarvan kun je systemctl gebruiken om de tunnel te beheren met behulp van het wg-quick-script.

Het gebruik van een systemd-service betekent dat je WireGuard kunt configureren om bij het opstarten te starten, zodat je op elk moment verbinding kunt maken met je VPN zolang de server draait. Om dit te doen, schakel je de wg-quick-service in voor de wg0-tunnel die je hebt gedefinieerd door deze toe te voegen aan systemctl:

sudo systemctl enable wg-quick@wg0.service

Merk op dat het commando de naam van de tunnel wg0 apparaatnaam als onderdeel van de servicenaam specificeert. Deze naam komt overeen met het configuratiebestand /etc/wireguard/wg0.conf. Deze benadering van naamgeving betekent dat je zoveel afzonderlijke VPN-tunnels kunt maken als je wilt met je server.

Bijvoorbeeld, je zou een tunneldevice kunnen hebben met de naam prod en het configuratiebestand zou /etc/wireguard/prod.conf zijn. Elke tunnelconfiguratie kan verschillende IPv4-, IPv6- en clientfirewallinstellingen bevatten. Op deze manier kun je meerdere verschillende peerverbindingen ondersteunen, elk met hun eigen unieke IP-adressen en routeringsregels.

Start nu de dienst:

sudo systemctl start wg-quick@wg0.service

Controleer nogmaals of de WireGuard-service actief is met het volgende commando. Je zou de service als actief moeten zien. Merk op dat wg-quick sluit nadat de interface is geconfigureerd, dus active (exited) is normaal.

sudo systemctl status wg-quick@wg0.service
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2021-08-25 15:24:14 UTC; 5s ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 3245 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 3245 (code=exited, status=0/SUCCESS)

Aug 25 15:24:14 wg0 wg-quick[3245]: [#] wg setconf wg0 /dev/fd/63
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip -6 address add fd0d:86fa:c3bc::1/64 dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip link set mtu 1420 up dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ufw route allow in on wg0 out on eth0
Aug 25 15:24:14 wg0 wg-quick[3279]: Rule added
Aug 25 15:24:14 wg0 wg-quick[3279]: Rule added (v6)
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Aug 25 15:24:14 wg0 systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

De uitvoer toont de ip-commando's die worden gebruikt om het virtuele wg0-apparaat te maken en het de IPv4- en IPv6-adressen toe te wijzen die je aan het configuratiebestand hebt toegevoegd. Je kunt deze regels gebruiken om de tunnel te troubleshooten, of met het wg-commando zelf als je de VPN-interface handmatig wilt configureren.

Met de server geconfigureerd en draaiend, is de volgende stap om uw clientmachine als een WireGuard-peer te configureren en verbinding te maken met de WireGuard-server.

Stap 7 — Een WireGuard-peer configureren

Het configureren van een WireGuard-peer is vergelijkbaar met het opzetten van de WireGuard-server. Zodra je de clientsoftware hebt geïnstalleerd, genereer je een paar publieke en private sleutels, bepaal je een of meerdere IP-adressen voor de peer, definieer je een configuratiebestand voor de peer, en start je vervolgens de tunnel met behulp van het wg-quick-script.

Je kunt zoveel peers toevoegen aan je VPN als je wilt door een sleutelparen en configuratie te genereren met de volgende stappen. Als je meerdere peers aan de VPN toevoegt, zorg er dan voor dat je hun privé-IP-adressen bijhoudt om conflicten te voorkomen.

Om de WireGuard Peer te configureren, zorg ervoor dat je het WireGuard-pakket hebt geïnstalleerd met de volgende apt-opdrachten. Voer op de WireGuard Peer uit:

sudo apt update

sudo apt install wireguard

Het aanmaken van het sleutelparen voor de WireGuard-peer

Vervolgens moet je het sleutelpair op de peer genereren met dezelfde stappen die je op de server hebt gebruikt. Ga vanaf je lokale machine of de externe server die als peer zal dienen door en maak de privésleutel voor de peer aan met de volgende commando's:

wg genkey | sudo tee /etc/wireguard/private.key

sudo chmod go= /etc/wireguard/private.key

Opnieuw ontvang je een enkele regel van base64 gecodeerde uitvoer, dit is de privésleutel. Een kopie van de uitvoer wordt ook opgeslagen in /etc/wireguard/private.key. Maak zorgvuldig een aantekening van de weergegeven privésleutel, aangezien je deze later in dit gedeelte aan het configuratiebestand van WireGuard zult moeten toevoegen.

Gebruik vervolgens de volgende opdracht om het openbare-sleutelbestand aan te maken:

sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

U ontvangt opnieuw een enkele regel met base64 gecodeerde uitvoer, wat de openbare sleutel is voor uw WireGuard-peer. Kopieer deze ergens voor referentie, aangezien u de openbare sleutel naar de WireGuard-server moet sturen om een versleutelde verbinding tot stand te brengen.

Het aanmaken van het configuratiebestand voor de WireGuard-peer

Nu je een sleutelpaar hebt, kun je een configuratiebestand maken voor de peer dat alle informatie bevat die nodig is om verbinding te maken met de WireGuard-server.

Je hebt een paar gegevens nodig voor het configuratiebestand:

  • De base64 gecodeerde privésleutel die je op de peer hebt gegenereerd.
  • De IPv4- en IPv6-adresbereiken die u hebt gedefinieerd op de WireGuard-server.
  • De base64 gecodeerde publieke sleutel van de WireGuard-server.
  • Het openbare IP-adres en poortnummer van de WireGuard-server. Meestal is dit het IPv4-adres, maar als uw server een IPv6-adres heeft en uw clientapparaat een IPv6-verbinding met het internet heeft, kunt u dit in plaats van IPv4 gebruiken.

Met al deze informatie bij de hand, open je een nieuw /etc/wireguard/wg0.conf-bestand op de WireGuard Peer-machine met nano of je favoriete editor:

sudo nano /etc/wireguard/wg0.conf

Voeg de volgende regels toe aan het bestand en vervang in de gemarkeerde secties de verschillende gegevens waar nodig:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_peer_private_key_goes_here Address = 10.8.0.2/24 Address = fd0d:86fa:c3bc::2/64 [Peer] PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= AllowedIPs = 10.8.0.0/24, fd0d:86fa:c3bc::/64 Endpoint = 203.0.113.1:51820

Let op hoe de eerste Address-regel een IPv4-adres gebruikt uit het 10.8.0.0/24-subnet dat je eerder hebt gekozen. Dit IP-adres kan elk adres binnen het subnet zijn, zolang het maar verschilt van het IP-adres van de server. Het verhogen van adressen met 1 elke keer dat je een peer toevoegt, is over het algemeen de eenvoudigste manier om IP's toe te wijzen.

Merk ook op hoe de tweede Address-regel een IPv6-adres gebruikt uit het subnet dat je eerder hebt gegenereerd, en het adres van de server met één verhoogt. Nogmaals, elk IP binnen het bereik is geldig als je besluit een ander adres te gebruiken.

Het andere opmerkelijke deel van het bestand is de laatste AllowedIPs-regel. Deze twee IPv4- en IPv6-bereiken geven de peer de instructie om alleen verkeer via de VPN te versturen als het bestemmingssysteem een IP-adres in een van de bereiken heeft. Met de AllowedIPs-richtlijn kun je de VPN op de peer beperken zodat deze alleen verbinding maakt met andere peers en diensten op de VPN, of je kunt de instelling configureren om al het verkeer via de VPN te tunnelen en de WireGuard-server als gateway te gebruiken.

Als je alleen IPv4 gebruikt, laat dan het achtervoegsel fd0d:86fa:c3bc::/64 (inclusief de , komma) weg. Omgekeerd, als je alleen IPv6 gebruikt, neem dan alleen het fd0d:86fa:c3bc::/64 voorvoegsel op en laat het 10.8.0.0/24 IPv4-bereik weg.

In beide gevallen, als je al het verkeer van je peer over de VPN wilt sturen en de WireGuard-server als gateway voor al het verkeer wilt gebruiken, kun je 0.0.0.0/0 gebruiken, wat het volledige IPv4-adresbereik vertegenwoordigt, en ::/0 voor het volledige IPv6-adresbereik.

(Optioneel) Een peer configureren om al het verkeer via de tunnel te routeren

Als je hebt gekozen om al het verkeer van de peer via de tunnel te routeren met behulp van de 0.0.0.0/0 of ::/0 routes en de peer een extern systeem is, dan moet je de stappen in deze sectie volgen. Als je peer een lokaal systeem is, kun je het beste deze sectie overslaan.

Voor externe peers die je via SSH of een ander protocol toegankelijk maakt met een openbaar IP-adres, moet je enkele extra regels toevoegen aan het wg0.conf-bestand van de peer. Deze regels zorgen ervoor dat je nog steeds verbinding kunt maken met het systeem van buiten de tunnel wanneer deze is verbonden. Zonder deze regels, wanneer de tunnel is opgezet, wordt al het verkeer dat normaal via de openbare netwerkinterface zou lopen, niet correct gerouteerd om de wg0-tunnelinterface te omzeilen, wat resulteert in een ontoegankelijk extern systeem.

Eerst moet je het IP-adres bepalen dat het systeem gebruikt als zijn standaardgateway. Voer de volgende ip route-opdracht uit:

ip route list table main default

Je ontvangt uitvoer zoals de volgende:

default via 203.0.113.1 dev eth0 proto static

Noteer het gemarkeerde IP-adres van de gateway 203.0.113.1 voor later gebruik, en apparaat eth0. De naam van uw apparaat kan anders zijn. Gebruik in dat geval de juiste naam in plaats van eth0 in de volgende commando's.

Vervolgens vindt u het openbare IP-adres van het systeem door het apparaat te onderzoeken met het commando ip address show:

ip -brief address show eth0

Je ontvangt uitvoer zoals de volgende:

eth0             UP             203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

In dit voorbeeldoutput is het gemarkeerde 203.0.113.5 IP-adres (zonder de achtervoeging /20) het openbare adres dat is toegewezen aan het eth0 apparaat dat je aan de WireGuard-configuratie moet toevoegen.

Open nu het /etc/wireguard/wg0.conf-bestand van de WireGuard Peer met nano of je favoriete editor.

sudo nano /etc/wireguard/wg0.conf

Voeg de volgende vier regels toe vóór de regel [Peer]:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

Deze regels zullen een aangepaste routeringsregel aanmaken en een aangepaste route toevoegen om ervoor te zorgen dat openbaar verkeer naar het systeem de standaardgateway gebruikt.

  • PostUp=ip rule add table 200 from 203.0.113.5 - Dit commando maakt een regel die controleert op eventuele routeringsvermeldingen in de tabel met het nummer 200 wanneer het IP-adres overeenkomt met het publieke systeemadres 203.0.113.5.
  • PostUp=ip route add table 200 default via 203.0.113.1 - Dit commando zorgt ervoor dat al het verkeer dat door de 200 tabel wordt verwerkt, de 203.0.113.1 gateway voor routering gebruikt in plaats van de WireGuard-interface.

De PreDown-regels verwijderen de aangepaste regel en route wanneer de tunnel wordt afgesloten.

Opmerking: Het tabelnummer 200 is willekeurig bij het opstellen van deze regels. U kunt een waarde tussen 2 en 252 gebruiken, of u kunt een aangepaste naam gebruiken door een label toe te voegen aan het /etc/iproute2/rt_tables-bestand en vervolgens naar de naam te verwijzen in plaats van naar de numerieke waarde.

Voor meer informatie over hoe routeringstabellen werken in Linux, bezoek de sectie Routeringstabellen van de Gids voor IP-laagna netwerkbeheer met Linux.

Als je al het verkeer van de peer over de VPN routeert, zorg er dan voor dat je de juiste sysctl- en iptables-regels hebt geconfigureerd op de WireGuard-server in Het netwerkconfiguratie van de WireGuard-server aanpassen en De firewall van de WireGuard-server configureren.

(Optioneel) Configureren van de DNS-resolvers van de WireGuard-peer

Als je de WireGuard-server gebruikt als een VPN-gateway voor al het verkeer van je peers, moet je een regel toevoegen aan de [Interface]-sectie waarin DNS-resolvers worden gespecificeerd. Als je deze instelling niet toevoegt, kunnen je DNS-verzoeken mogelijk niet door de VPN worden beveiligd, of ze kunnen worden blootgesteld aan je internetprovider of andere derden.

Als je WireGuard alleen gebruikt om toegang te krijgen tot bronnen op het VPN-netwerk of in een peer-to-peer configuratie, kun je deze sectie overslaan.

Om DNS-servers aan de configuratie van je peer toe te voegen, bepaal eerst welke DNS-servers je WireGuard-server gebruikt. Voer het volgende commando uit op de WireGuard-server, waarbij je je ethernetapparaat vervangt in plaats van eth0 als dit anders is dan in dit voorbeeld:

resolvectl dns eth0

Je zou uitvoer zoals het volgende moeten ontvangen:

Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

De IP-adressen die worden weergegeven zijn de DNS-resolvers die de server gebruikt. Je kunt ervoor kiezen om er een of allemaal te gebruiken, of alleen IPv4 of IPv6, afhankelijk van je behoeften. Maak een aantekening van de resolvers die je zult gebruiken.

Vervolgens moet je de gekozen resolvers toevoegen aan het configuratiebestand van de WireGuard Peer. Ga terug naar de WireGuard Peer en open het bestand /etc/wireguard/wg0.conf met nano of je favoriete editor:

sudo nano /etc/wireguard/wg0.conf

Voeg het volgende toe vóór de regel [Peer]:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

Afhankelijk van je voorkeur of vereisten voor IPv4 en IPv6, kun je de lijst opnieuw bewerken naar jouw behoeften.

Zodra je in de volgende stap verbonden bent met de VPN, kun je controleren of je DNS-query's via de VPN verstuurt door een site zoals DNS leak test te gebruiken.

Je kunt ook controleren of je peer de geconfigureerde resolvers gebruikt met het commando resolvectl dns, zoals je op de server hebt uitgevoerd. Je zou een uitvoer zoals de volgende moeten ontvangen, waarin de DNS-resolvers worden weergegeven die je voor de VPN-tunnel hebt geconfigureerd:

Global: 67.207.67.2 67.207.67.3
. . .

Met al deze DNS-resolverinstellingen op hun plaats, bent u nu klaar om de openbare sleutel van de peer aan de server toe te voegen en vervolgens de WireGuard-tunnel op de peer te starten.

Stap 8 — De openbare sleutel van de peer toevoegen aan de WireGuard-server

Voordat je de peer met de server verbindt, is het belangrijk om de openbare sleutel van de peer toe te voegen aan de WireGuard-server. Deze stap zorgt ervoor dat je verbinding kunt maken en verkeer via de VPN kunt routeren. Zonder deze stap zal de WireGuard-server de peer niet toestaan om verkeer via de tunnel te verzenden of ontvangen.

Zorg ervoor dat je een kopie hebt van de base64 gecodeerde openbare sleutel voor de WireGuard-peer door het volgende uit te voeren:

sudo cat /etc/wireguard/public.key
PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

Log nu in op de WireGuard-server en voer het volgende commando uit:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd0d:86fa:c3bc::2

Houd er rekening mee dat het gedeelte allowed-ips van het commando een door komma's gescheiden lijst van IPv4- en IPv6-adressen accepteert. U kunt individuele IP's opgeven als u het IP-adres wilt beperken dat een peer zichzelf kan toewijzen, of een bereik zoals in het voorbeeld als uw peers elk IP-adres in het VPN-bereik kunnen gebruiken. Houd er ook rekening mee dat geen twee peers dezelfde allowed-ips-instelling kunnen hebben.

Als je de allowed-ips voor een bestaande peer wilt bijwerken, kun je hetzelfde commando opnieuw uitvoeren, maar de IP-adressen wijzigen. Meerdere IP-adressen worden ondersteund. Bijvoorbeeld, om de WireGuard-peer die je zojuist hebt toegevoegd te wijzigen zodat een IP zoals 10.8.0.100 wordt toegevoegd aan de bestaande IPs 10.8.0.2 en fd0d:86fa:c3bc::2, zou je het volgende uitvoeren:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd0d:86fa:c3bc::2

Zodra je het commando hebt uitgevoerd om de peer toe te voegen, controleer je de status van de tunnel op de server met het wg-commando:

sudo wg
interface: wg0
 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 private key: (hidden)
 listening port: 51820

peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 allowed ips: 10.8.0.2/32, fd0d:86fa:c3bc::/128

Let op hoe de peer-regel de openbare sleutel van de WireGuard Peer toont, en de IP-adressen, of reeksen van adressen die het mag gebruiken om zichzelf een IP toe te wijzen.

Nu je de verbindingsparameters van de peer op de server hebt gedefinieerd, is de volgende stap het starten van de tunnel op de peer.

Stap 9 — De WireGuard-peer verbinden met de tunnel

Nu zowel je server als je peer zijn geconfigureerd om je keuze van IPv4, IPv6, pakketdoorsturing en DNS-resolutie te ondersteunen, is het tijd om de peer met de VPN-tunnel te verbinden.

Aangezien u de VPN mogelijk alleen voor bepaalde gebruikssituaties wilt inschakelen, zullen we het wg-quick-commando gebruiken om de verbinding handmatig tot stand te brengen. Als u het tunnel opstarten wilt automatiseren zoals u op de server deed, volg dan die stappen in de sectie Het starten van de WireGuard-server in plaats van het wg-quick-commando te gebruiken.

Als je al het verkeer via de VPN routeert en DNS-doorsturing hebt ingesteld, moet je de resolvconf-tool op de WireGuard-peer installeren voordat je de tunnel start. Voer het volgende commando uit om dit in te stellen:

sudo apt install resolvconf

Om de tunnel te starten, voer het volgende uit op de WireGuard Peer:

sudo wg-quick up wg0

Je ontvangt uitvoer zoals de volgende:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x

Let op de gemarkeerde IPv4- en IPv6-adressen die u aan de peer hebt toegewezen.

Als je de AllowedIPs op de peer instelt op 0.0.0.0/0 en ::/0 (of andere reeksen gebruikt dan degene die je voor de VPN hebt gekozen), zal je uitvoer er als volgt uitzien:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] ip6tables-restore -n
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n

In dit voorbeeld, let op de gemarkeerde routes die het commando heeft toegevoegd, die overeenkomen met de AllowedIPs in de peerconfiguratie.

Je kunt de status van de tunnel op de peer controleren met het wg-commando:

sudo wg
interface: wg0
 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 private key: (hidden)
 listening port: 49338
 fwmark: 0xca6c

peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 endpoint: 203.0.113.1:51820
 allowed ips: 10.8.0.0/24, fd0d:86fa:c3bc::/64
 latest handshake: 1 second ago
 transfer: 6.50 KiB received, 15.41 KiB sent

Je kunt de status op de server ook opnieuw controleren, en je zult een vergelijkbare output ontvangen.

Controleer of je collega de VPN gebruikt door de opdrachten ip route en ip -6 route uit te voeren. Als je de VPN als gateway voor al je internetverkeer gebruikt, controleer dan welk netwerkinterface zal worden gebruikt voor verkeer dat bedoeld is voor de CloudFlare DNS-resolvers 1.1.1.1 en 2606:4700:4700::1111.

Als je WireGuard alleen gebruikt om toegang te krijgen tot bronnen op het VPN, vervang dan een geldig IPv4- of IPv6-adres, zoals de gateway zelf, in deze opdrachten. Bijvoorbeeld 10.8.0.1 of fd0d:86fa:c3bc::1.

ip route get 1.1.1.1
1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
   cache

Merk op dat het wg0-apparaat wordt gebruikt en het IPv4-adres 10.8.0.2 dat u aan de peer hebt toegewezen. Evenzo, als u IPv6 gebruikt, voer het volgende uit:

ip -6 route get 2606:4700:4700::1111
2606:4700:4700::1111 from :: dev wg0 table 51820 src fd0d:86fa:c3bc::2 metric 1024 pref medium

Let opnieuw op de wg0-interface en het IPv6-adres fd0d:86fa:c3bc::2 dat je aan de peer hebt toegewezen.

Als je peer een browser geïnstalleerd heeft, kun je ook ipleak.net en ipv6-test.com bezoeken om te bevestigen dat je peer zijn verkeer via de VPN routert.

Zodra je klaar bent om de VPN op de peer los te koppelen, gebruik je het wg-quick commando:

sudo wg-quick down wg0

U ontvangt output zoals de volgende die aangeeft dat de VPN-tunnel is afgesloten:

[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f

Als je de AllowedIPs op de peer instelt op 0.0.0.0/0 en ::/0 (of andere reeksen gebruikt dan degene die je voor de VPN hebt gekozen), zal je uitvoer er als volgt uitzien:

[#] ip rule delete table 200 from 203.0.113.5
[#] ip route delete table 200 default via 203.0.113.1
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f
[#] iptables-restore -n
[#] ip6tables-restore -n

Om opnieuw verbinding te maken met de VPN, voert u opnieuw het wg-quick up wg0 commando uit op de peer. Als u de configuratie van een peer volledig van de WireGuard-server wilt verwijderen, kunt u het volgende commando uitvoeren, waarbij u ervoor zorgt dat u de juiste openbare sleutel vervangt voor de peer die u wilt verwijderen:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

Gewoonlijk hoef je een peerconfiguratie alleen te verwijderen als de peer niet langer bestaat, of als de encryptiesleutels zijn gecompromitteerd of veranderd. Anders is het beter om de configuratie te laten staan, zodat de peer opnieuw verbinding kan maken met de VPN zonder dat je elke keer de sleutel en allowed-ips hoeft toe te voegen.

Beheren en Roteren van WireGuard-sleutels

WireGuard vertrouwt op statische publieke en private sleutelpaaren voor authenticatie en encryptie. Dit ontwerp vermindert de configuratiecomplexiteit aanzienlijk, maar legt ook de volledige verantwoordelijkheid voor het sleutelbeheer bij de beheerder. Voor langdurige VPN-implementaties, gedeelde infrastructuur of omgevingen met meerdere peers is zorgvuldig sleutelbeheer essentieel voor het behouden van veiligheid en operationele stabiliteit.

Inzicht in WireGuard-sleutels

Elke WireGuard-peer gebruikt twee categorieën cryptografische sleutels.

  • Langdurige privésleutels: Een privésleutel identificeert een peer uniek en moet te allen tijde geheim blijven. Deze sleutel wordt gebruikt tijdens versleutelde handshakes om de peer te authenticeren en tijdelijke sessiesleutels af te leiden. Als een privésleutel wordt blootgesteld, kan elk systeem dat die sleutel bezit de peer imiteren.

  • Langdurige openbare sleutels: Een openbare sleutel wordt afgeleid van een privésleutel en gedeeld met andere peers. Op de centrale hub bepalen openbare sleutels welke peers toestemming hebben om te communiceren en welke IP-adressen zij mogen gebruiken.

Naast deze langetermijnsleutels, genereert WireGuard automatisch tijdelijke sessiesleutels tijdens versleutelde handshakes. Deze sessiesleutels worden periodiek vervangen en bieden Perfect Forward Secrecy zonder tussenkomst van een beheerder.

Aanbevolen werkwijzen voor sleutelbeheer

De volgende praktijken helpen het risico te verminderen en de lopende werkzaamheden te vereenvoudigen:

  • Wijs elk peer een unieke sleutelpair toe: Elk apparaat moet zijn eigen privé- en openbare sleutelpair hebben. Het gebruik van unieke sleutels maakt het mogelijk om de toegang voor een enkel apparaat in te trekken zonder de andere apparaten te beïnvloeden. Het hergebruiken van sleutels op meerdere systemen vergroot de gevolgen van een compromittering en maakt auditing ingewikkelder.

  • Beperk de toegang tot privésleutelmateriaal: Bestanden met privésleutels mogen alleen leesbaar zijn voor de root-gebruiker. Op Linux-systemen betekent dit meestal dat de permissies worden ingesteld op 600 met een commando zoals chmod 600 /etc/wireguard/private.key. Het beperken van de toegang tot bestanden helpt onbedoelde openbaarmaking via back-ups, logbestanden of niet-geprivilegeerde gebruikers te voorkomen.

  • Houd een expliciete peer-inventaris bij: Houd een overzicht bij waarin de openbare sleutel van elke peer wordt gekoppeld aan de apparaattaam, toegewezen IPv4- en IPv6-adressen en het beoogde doel. Deze documentatie wordt steeds belangrijker naarmate het aantal peers groeit en vereenvoudigt het oplossen van problemen, audits en regelmatig onderhoud.

  • Verwijder ongebruikte of inactieve peers onmiddellijk: Wanneer een apparaat wordt buiten gebruik gesteld of geen VPN-toegang meer nodig heeft, verwijder dan de publieke sleutel uit de centrale peerconfiguratie. Het achterlaten van ongebruikte sleutels vergroot het aanvalsoppervlak en bemoeilijkt toekomstige controles.

Situaties die sleutelrotatie vereisen

Sleutelrotatie moet in verschillende veelvoorkomende scenario's worden uitgevoerd:

  • Verdachte of bevestigde blootstelling van een sleutel: Als een privésleutel mogelijk is gekopieerd, gelekt of geopend door een onbevoegde partij, moet deze onmiddellijk worden vervangen om impersonatie te voorkomen.

  • Verloren of gestolen apparaten: Wanneer een apparaat verloren gaat of wordt gestolen, zorgt het wijzigen van de sleutels ervoor dat het geen verbinding meer kan maken met de VPN, zelfs als de oorspronkelijke configuratie wordt hersteld.

  • Organisatorische beveiligingseisen: Sommige omgevingen vereisen periodieke sleutelrotatie om te voldoen aan interne beleidslijnen of nalevingsnormen, zelfs als er geen vermoeden van een schending is.

  • Wijzigingen in apparaatbezit of -rol: Wanneer een apparaat aan een andere gebruiker of voor een ander doel wordt toegewezen, voorkomt het rouleren van de sleutels ongewenste voortdurende toegang.

Veilig de sleutels van een collega roteren

WireGuard koppelt interne IP-adressen aan specifieke openbare sleutels met behulp van een cryptosleutel-routeringstabel. Door dit ontwerp kan hetzelfde interne IP-adres niet veilig aan twee openbare sleutels tegelijk worden toegewezen. Sleutelrotatie gaat daarom meestal gepaard met een korte onderbreking van de connectiviteit terwijl de configuratie wordt bijgewerkt.

Om de sleutels van een collega te roteren, volgt u dit proces:

  1. Genereer een nieuw privé- en publiek sleutelpaar op de peer.
  2. Werk de configuratie van de centrale peer bij om de oude openbare sleutel te vervangen door de nieuwe, terwijl de waarden van AllowedIPs hetzelfde blijven. Start de interface nog niet opnieuw op.
  3. Werk het configuratiebestand van de peer bij om de nieuwe privésleutel te gebruiken.
  4. Pas de bijgewerkte configuratie toe op de centrale peer, bijvoorbeeld door de WireGuard-service opnieuw te laden of wg syncconf te gebruiken. Op dit moment zal de peer tijdelijk de verbinding verliezen.
  5. Herstart de WireGuard-interface op de peer zodat deze de nieuwe privésleutel gaat gebruiken.
  6. Controleer of een nieuwe handshake wordt voltooid en dat het verkeer correct verloopt.
  7. Verwijder eventueel nog bestaande verwijzingen naar de oude sleutel.

Deze op vervanging gebaseerde aanpak weerspiegelt hoe WireGuard cryptografische routering afdwingt en dubbelzinnige of conflicterende configuraties vermijdt.

Sleutels roteren op de centrale peer

Het roteren van de privésleutel van de centrale peer beïnvloedt alle aansluitende peers. Elke peerconfiguratie moet worden bijgewerkt met de nieuwe openbare sleutel voordat de connectiviteit kan worden hersteld.

Omdat deze wijziging alle peers tegelijkertijd beïnvloedt, moet het roteren van de centrale peer-sleutel zorgvuldig worden gepland en tijdens een onderhoudsvenster worden uitgevoerd. In de praktijk worden centrale sleutels minder vaak geroteerd dan peer-sleutels.

Beheren van vooraf gedeelde sleutels (optioneel)

Naast publieke en private sleutelparen ondersteunt WireGuard een optionele vooraf gedeelde sleutel (PSK) voor elke peer. Een PSK voegt een extra laag van symmetrische encryptie toe bovenop de bestaande cryptografie van WireGuard.

Vooraf gedeelde sleutels worden vaak gebruikt in omgevingen met hoge beveiliging als een verdediging tegen toekomstige cryptografische ontwikkelingen. Als versleuteld verkeer vandaag wordt opgenomen en het onderliggende openbare sleutelalgoritme in de toekomst wordt gecompromitteerd, zou een PSK nog steeds voorkomen dat eerdere sessies worden ontsleuteld.

Wanneer PSK's worden gebruikt, moeten deze als gevoelige geheimen worden behandeld en periodiek worden gewijzigd. Het wijzigen van een PSK volgt hetzelfde operationele patroon als het wijzigen van peer-sleutels en moet aan beide zijden van de verbinding worden gecoördineerd.

Het kiezen van een rotatiefrequentie

WireGuard hanteert geen vast schema voor sleutelrotatie. Geschikte rotatie-intervallen zijn afhankelijk van de omgeving.

  • Persoonlijke of kortdurende inzetten vereisen mogelijk geen geplande rotatie.
  • Gedeelde of productieomgevingen draaien sleutels meestal elke 6 tot 12 maanden om.
  • Omgevingen met hoge beveiliging kunnen een vaker roteren vereisen op basis van het beleid.

Regelmatige rotatie vermindert het risico dat gepaard gaat met langlevende inloggegevens en brengt WireGuard-implementaties in overeenstemming met gangbare beveiligingspraktijken.

WireGuard vs OpenVPN: Praktische verschillen

WireGuard en OpenVPN zijn beide veelgebruikte VPN-technologieën, maar ze hanteren heel verschillende benaderingen voor encryptie, configuratie en netwerkgedrag. Het begrijpen van deze verschillen helpt ontwikkelaars om de oplossing te kiezen die het beste past bij hun operationele beperkingen.

Configuratie- en operationeel model

WireGuard maakt gebruik van een statisch configuratiemodel gebaseerd op publieke en private sleutelpaar. Alle peers worden expliciet gedefinieerd en het routeringsgedrag wordt gecontroleerd via vaste configuratiewaarden. Er is geen controlekanaal, certificeringsinstantie of dynamische onderhandeling van parameters.

OpenVPN is afhankelijk van TLS en X.509-certificaten. Het gebruikt een controlekanaal om clients te authenticeren, encryptie-instellingen te onderhandelen en sessies te beheren. Dit model biedt flexibiliteit, maar verhoogt de configuratie- en operationele complexiteit.

In de praktijk zijn WireGuard-configuraties korter, gemakkelijker te controleren en minder vatbaar voor subtiele fouten. OpenVPN-configuraties bieden meer controle, maar vereisen zorgvuldig beheer om veilig en consistent te blijven.

Cryptografie en beveiligingsontwerp

WireGuard gebruikt een vaste set moderne cryptografische methoden. Deze keuzes zijn niet configureerbaar. Dit ontwerp voorkomt cryptografische downgrade-aanvallen en maakt het niet nodig om cipher suites te selecteren.

OpenVPN ondersteunt een breed scala aan versleutelingsalgoritmen en authenticatiemethoden. Hoewel deze flexibiliteit compatibiliteit met oudere systemen mogelijk maakt, vergroot het ook het risico op zwakke of inconsistente configuraties.

Beide oplossingen ondersteunen Perfect Forward Secrecy. WireGuard voert automatisch sleutelrotatie uit via het handshake-mechanisme, terwijl OpenVPN afhankelijk is van het gedrag van de TLS-sessie.

Prestatiekenmerken

WireGuard is ontworpen voor hoge prestaties en lage latentie. Het draait in de Linux-kernel en heeft een kleine codebase, wat de overhead en contextwisselingen vermindert. In de meeste omgevingen levert WireGuard een hogere doorvoer en een meer consistente latentie met minimale afstemming.

Historisch gezien draait OpenVPN in de gebruikersruimte en veroorzaakt het extra overhead door contextwisselingen en protocolverwerking. Moderne versies van OpenVPN ondersteunen Kernel Data Channel Offload (DCO), wat de prestaties aanzienlijk verbetert, maar deze functie is niet altijd ingeschakeld of beschikbaar in standaardimplementaties.

Zelfs met DCO behaalt WireGuard doorgaans sterke prestaties met minder configuratievariabelen.

Netwerkroaming en firewalldoorbraak

WireGuard gaat op een nette manier om met netwerkveranderingen. Als het IP-adres van een peer verandert, bijvoorbeeld bij het wisselen tussen wifi en mobiele netwerken, blijft de tunnel functioneren zonder dat er een nieuwe onderhandeling nodig is.

WireGuard werkt echter uitsluitend via UDP. Hoewel UDP efficiënt is, wordt het soms geblokkeerd op beperkende openbare WiFi-netwerken, bedrijfsfirewalls of institutionele netwerken. WireGuard heeft geen ingebouwde terugvaloptie wanneer UDP-verkeer wordt geblokkeerd.

OpenVPN ondersteunt zowel UDP als TCP. Wanneer UDP niet beschikbaar is, kan OpenVPN worden geconfigureerd om via TCP-poort 443 te werken, waardoor VPN-verkeer lijkt op standaard HTTPS-verkeer. Deze mogelijkheid maakt OpenVPN betrouwbaarder in omgevingen met strikte firewallregels of censuur.

Voor gebruikers die achter beperkende netwerken werken, is TCP-ondersteuning vaak de doorslaggevende factor bij het kiezen van OpenVPN boven WireGuard.

Functieomvang en uitbreidbaarheid

OpenVPN bevat functies die WireGuard opzettelijk niet biedt. Deze omvatten gebruikersgebaseerde authenticatie, dynamische adres toewijzing en integratie met externe identiteitsystemen.

WireGuard richt zich uitsluitend op veilige tunneling. Authenticatieworkflows, toegangsbeheer en dynamische configuratie moeten buiten het protocol om worden afgehandeld.

Dit maakt OpenVPN meer geschikt voor omgevingen die complexe authenticatie of gecentraliseerd gebruikersbeheer vereisen, terwijl WireGuard beter geschikt is voor VPN's op infrastructuurniveau en peer-toegang.

Samenvatting Vergelijking

AspectWireGuardOpenVPN
TransportprotocolAlleen UDPUDP en TCP
ConfiguratiestijlStatisch, op sleutel gebaseerdDynamisch, op certificaat gebaseerd
CodebasegrootteKleinGroot
VersleutelingsoptiesVastgezetConfigureerbaar
PrestatiesHoogMatig tot hoog
Roaming-ondersteuningIngebouwdBeperkt
FirewallbestendigheidBeperkt op beperkende netwerkenSterk via TCP 443
ComplexiteitLaagHoog

Kiezen tussen WireGuard en OpenVPN

WireGuard is goed geschikt voor infrastructuur-VPN's, site-to-site tunnels, mobiele clients en omgevingen waar eenvoud, prestaties en voorspelbaarheid prioriteit hebben.

OpenVPN blijft een sterke keuze voor bedrijfsomgevingen die TCP-gebaseerde tunneling, geavanceerde authenticatie of betrouwbare werking achter strikte firewalls vereisen.

In veel moderne implementaties vervangt WireGuard OpenVPN niet omdat het meer functies biedt, maar omdat het minder functies biedt met duidelijker gedrag.

Prestatieafstemming en Optimalisatie

WireGuard presteert goed met de standaardinstellingen, maar de netwerkcondities in de praktijk kunnen de betrouwbaarheid en doorvoersnelheid beïnvloeden. Factoren zoals pakketgrootte, routeringsbereik, NAT-gedrag en DNS-resolutie hebben allemaal invloed op hoe de tunnel zich gedraagt tijdens continu of wisselend gebruik.

Laten we naar de meest voorkomende afstemmingsgebieden kijken en wanneer aanpassingen geschikt zijn.

MTU-selectie en pakketfragmentatie

De Maximum Transmission Unit (MTU) definieert de grootste pakketgrootte die kan worden verzonden zonder fragmentatie. WireGuard versleutelt en verpakt pakketten, waardoor de effectieve MTU kleiner is dan bij een fysieke netwerkinterface.

Standaard gebruikt WireGuard een MTU van 1420. Deze waarde houdt rekening met de gecombineerde overhead van IPv6-headers, UDP en WireGuard-encapsulatie en werkt goed voor de meeste op Ethernet gebaseerde netwerken. Sommige omgevingen vereisen een kleinere MTU. Dit komt vaak voor bij mobiele netwerken, PPPoE-verbindingen en cloudplatforms met extra encapsulatielagen. Wanneer de MTU te groot is, kunnen pakketten verloren gaan of gefragmenteerd worden. Dit resulteert vaak in verbindingen die werken voor kleine verzoeken, maar vastlopen of falen bij grotere overdrachten. Als deze symptomen optreden, wordt aanbevolen om de MTU stapsgewijs te verlagen. Waarden zoals 1360, of in strakker begrensde omgevingen 1280, wat de minimale IPv6-MTU is, lossen deze problemen vaak op met minimale invloed op de doorvoersnelheid.

De MTU moet expliciet worden ingesteld in de [Interface]-sectie van het configuratiebestand om consistent gedrag bij herstart te garanderen.

Bereik en impact van AllowedIPs

De AllowedIPs richtlijn beïnvloedt zowel het routeringsgedrag als de prestaties. Brede adresbereiken zorgen ervoor dat meer verkeer door de tunnel gaat, wat de encryptielast en de belasting van de server verhoogt. Het gebruik van smalle AllowedIPs-waarden beperkt de tunnel tot alleen het verkeer dat bescherming nodig heeft. Dit vermindert het CPU-gebruik en voorkomt onnodige encapsulatie.

Wanneer 0.0.0.0/0 of ::/0 is geconfigureerd, wordt al het verkeer via de VPN geleid. Deze configuratie is geschikt wanneer privacy, gecentraliseerde uitgaande controle of onbetrouwbare netwerken een zorg zijn, maar het verhoogt de latentie en het gebruik van middelen voor algemeen internetverkeer.

Prestatieoptimalisatie houdt vaak in dat AllowedIPs waar mogelijk wordt beperkt en dat volledige tunneling-routing wordt vermeden tenzij dit nodig is.

NAT-traversal en verbindingsstabiliteit (PersistentKeepalive)

WireGuard is opzettelijk stil wanneer er geen gegevens worden verzonden. Het verstuurt standaard geen periodieke keepalive-pakketten. In omgevingen die NAT gebruiken, zoals thuisrouters, mobiele netwerken of veel clouddiensten, kan deze stilte ervoor zorgen dat het NAT-apparaat de verbindingsmapping sluit. Wanneer dit gebeurt, wordt inkomend verkeer van de server geblokkeerd totdat de peer opnieuw verkeer verzendt. Dit gedrag wordt vaak ervaren als vertraging, vertraagde verbindingen of intermitterende fouten.

Om dit te voorkomen biedt WireGuard de instelling PersistentKeepalive. Deze optie kan worden toegevoegd aan de [Peer]-sectie van de peerconfiguratie. Hierdoor stuurt de peer op een vaste interval een klein keepalive-pakket om de NAT-mapping open te houden. Een waarde van 25 seconden wordt vaak gebruikt en werkt goed met de meeste NAT-apparaten. Als een verbinding in het begin werkt maar faalt na een periode van inactiviteit, is het inschakelen van PersistentKeepalive=25 de belangrijkste en aanbevolen oplossing.

DNS-resolutie en tunnelgedrag

DNS-configuratie heeft een aanzienlijke invloed op de waargenomen VPN-prestaties. Wanneer DNS-servers niet correct via de tunnel worden geleid, kunnen toepassingen traag of onbetrouwbaar lijken, zelfs als de tunnel zelf correct functioneert.

In gatewayconfiguraties moeten DNS-query's via de VPN worden gestuurd om een consistente routering te garanderen en lekkages te voorkomen. Dit vereist dat DNS-servers expliciet worden gedefinieerd in de peerconfiguratie. Wanneer DNS verkeerd is geconfigureerd, zijn veelvoorkomende symptomen trage pagina's, inconsistente connectiviteit of verkeer dat buiten de VPN wordt geleid ondanks een actieve tunnel.

Het kiezen van resolvers die via de tunnel bereikbaar zijn en snel reageren, verbetert zowel de betrouwbaarheid als de gebruikerservaring.

Prestatieverschillen tussen IPv4 en IPv6

In dual-stackomgevingen kunnen IPv4 en IPv6 zich anders gedragen. IPv6-paden kunnen verschillende MTU-beperkingen, routeringsbeleid of firewallgedrag hebben.

Het onafhankelijk testen van beide protocollen helpt bij het identificeren van protocolspecifieke problemen. Hulpmiddelen zoals ping, tracepath en ip route get zijn nuttig voor het valideren van routing en MTU-gedrag voor elke adresfamilie.

Als de prestaties van IPv6 inconsistent lijken, controleer dan of ICMPv6-verkeer is toegestaan. ICMPv6 is vereist voor Path MTU Discovery en het blokkeren ervan kan ervoor zorgen dat verbindingen vastlopen bij grotere pakketten.

CPU- en versleutelingsoverhead

WireGuard gebruikt moderne cryptografie die efficiënt is op de meeste systemen. Encryptie verbruikt echter nog steeds CPU-bronnen.

Op kleine virtuele machines, ingebedde routers of systemen zonder hardwareversnelling kunnen full-tunnelconfiguraties de cpu onder aanhoudende belasting verzadigen.

Het monitoren van het CPU-gebruik tijdens hoge verkeersbelasting helpt bepalen of prestatieproblemen worden veroorzaakt door encryptie-overhead in plaats van netwerkconfiguratie. In dergelijke gevallen kan het nodig zijn om getunnelde verkeersstromen te verminderen of de serverinstantie te upgraden.

Prestatiewijzigingen valideren

Prestatieoptimalisatie moet stapsgewijs worden uitgevoerd. Na elke wijziging moeten de connectiviteit en stabiliteit worden gecontroleerd voordat verdere aanpassingen worden toegepast.

Nuttige validatiestappen zijn onder andere het controleren van de stabiliteit van de handshake met wg, het meten van de latency en doorvoer voor en na wijzigingen, en het bevestigen van het routeringsgedrag met ip route en ip -6 route. Deze aanpak minimaliseert risico's en vereenvoudigt het oplossen van problemen.

Veelgestelde vragen

1. Wat is WireGuard en hoe werkt het op Ubuntu?

WireGuard is een moderne VPN-technologie die is ontworpen om veel sneller en eenvoudiger op te zetten te zijn dan oudere opties zoals OpenVPN of IPsec. Je kunt het zien als een veilige tunnel die je apparaten direct met elkaar verbindt. In tegenstelling tot oudere VPN's die zwaar en complex zijn, is WireGuard extreem lichtgewicht. Op Ubuntu werkt het door direct binnen de Linux-kernel te draaien; de kern 'motor' van het besturingssysteem. Omdat het diep in het systeem draait in plaats van als een aparte applicatie erbovenop, verbruikt het zeer weinig batterij en verwerkt het gegevens ongelooflijk snel.

Om een verbinding tot stand te brengen, gebruikt WireGuard een methode die erg lijkt op SSH. Het genereert een paar "sleutels" voor elk apparaat: een private key (die geheim blijft op het apparaat) en een public key (die je deelt met de andere apparaten waarmee je verbinding wilt maken). De verbinding vindt alleen plaats als de sleutels perfect overeenkomen, waardoor de handshake snel en veilig is.

2. Is WireGuard veiliger dan OpenVPN?

Voor de meeste gebruikers wordt WireGuard als veiliger beschouwd vanwege de eenvoud en het moderne ontwerp. De belangrijkste reden is de omvang van de code. WireGuard is gebouwd met slechts ongeveer 4.000 regels code, terwijl OpenVPN er meer dan 100.000 heeft. Dit enorme verschil betekent dat het voor beveiligingsexperts veel gemakkelijker is om de WireGuard-code te lezen en kwetsbaarheden (bugs) te vinden voordat kwaadwillenden dat doen.

WireGuard dwingt je ook om de nieuwste en krachtigste encryptiestandaarden van vandaag te gebruiken. Oudere VPN’s staan cryptografische flexibiliteit toe, wat betekent dat ze kunnen terugschakelen naar zwakkere encryptiemethoden om oudere apparaten te ondersteunen. WireGuard haalt deze keuze weg, waardoor aanvallers niet je VPN kunnen misleiden om een zwakker slot te gebruiken. Daarnaast is WireGuard standaard onzichtbaar; als een ongeautoriseerd apparaat een pakket naar je server stuurt, zal WireGuard simpelweg niet reageren. Dit maakt je server onzichtbaar voor hackers die op zoek zijn naar open poorten.

3. Kan ik WireGuard op Ubuntu instellen zonder Docker?

Ja, je kunt het eenvoudig direct op het systeem instellen zonder gebruik te maken van Docker-containers. Sterker nog, het rechtstreeks uitvoeren wordt vaak de voorkeur gegeven op Ubuntu omdat de software is opgenomen in de standaard Ubuntu-softwarerepositories. Over het algemeen hoef je alleen de onderstaande standaardinstallatiecommando's uit te voeren, die de benodigde software rechtstreeks van de officiële bron van Ubuntu halen.

sudo apt update
sudo apt install wireguard

4. Hoe voeg ik meerdere WireGuard-clients (peers) toe?

WireGuard gebruikt een peer-to-peerconcept, wat betekent dat elk apparaat waarmee je verbinding maakt als een 'peer' wordt behandeld. Om meerdere apparaten toe te voegen, zoals een laptop, een smartphone en een tablet, bewerk je eenvoudig het configuratiebestand van de server (meestal te vinden op /etc/wireguard/wg0.conf).

Voor elk nieuw apparaat voeg je een nieuw tekstblok toe met het label [Peer]. In dit blok moet je de Public Key van dat specifieke apparaat plakken en een uniek intern IP-adres toewijzen (zoals 10.0.0.2 voor het eerste apparaat, 10.0.0.3 voor het tweede, enzovoort). Het is van cruciaal belang dat deze interne IP-adressen elkaar niet overlappen.

Hier is een eenvoudig voorbeeld van een configuratieblok:

[Interface]
# Server settings...
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <Server_Private_Key>

[Peer]
# Client 1 (Laptop)
PublicKey = <Laptop_Public_Key>
AllowedIPs = 10.0.0.2/32

[Peer]
# Client 2 (Phone)
PublicKey = <Phone_Public_Key>
AllowedIPs = 10.0.0.3/32

5. Welke poorten gebruikt WireGuard?

WireGuard gebruikt standaard UDP-poort 51820. Het vertrouwt volledig op het UDP-protocol omdat dit sneller is voor het tunnelen van gegevens dan TCP. TCP vereist een bevestiging voor elk datapakket dat wordt verzonden, wat een VPN-verbinding aanzienlijk kan vertragen. UDP verzendt de gegevens gewoon zonder te wachten op een ontvangstbevestiging, wat perfect is voor de hoge snelheid van WireGuard. Bij het instellen van je Ubuntu-firewall (UFW) moet je specifiek verkeer op deze UDP-poort toestaan, anders worden de verbindingsverzoeken geblokkeerd voordat ze de VPN-software bereiken.

6. Hoe los ik problemen met de WireGuard-verbinding op?

Het oplossen van problemen met WireGuard is meestal eenvoudig omdat er minder bewegende onderdelen zijn. Als je geen verbinding kunt maken, moet je deze specifieke volgorde van controles volgen:

Controleer eerst de handshake-status door sudo wg show op je server uit te voeren. Als de verbinding gezond is, zie je een regel met latest handshake gevolgd door een tijd (bijv. „1 minuut geleden”). Als deze regel ontbreekt, communiceren de apparaten helemaal niet met elkaar. Dit wordt bijna altijd veroorzaakt door een firewall die de UDP-poort blokkeert of een mismatch in de publieke/private sleutels.

Ten tweede, als de handshake werkt maar je niet kunt internetten, ligt het probleem waarschijnlijk bij IP-forwarding. Je moet ervoor zorgen dat je Ubuntu-server is toegestaan om verkeer van de VPN naar het internet te routeren. Je kunt dit controleren door het bestand /etc/sysctl.conf te bekijken en te zorgen dat de regel net.ipv4.ip_forward=1 actief is (niet uitgeschakeld door een commentaar).

7. Ondersteunt WireGuard IPv6 op Ubuntu?

Ja, WireGuard biedt uitstekende ondersteuning voor IPv6. Het is zeer flexibel en kan verschillende soorten verkeer encapsuleren (inpakken). Bijvoorbeeld, je kunt een website die alleen IPv4 ondersteunt bereiken via een IPv6-verbinding, of andersom. Om dit mogelijk te maken, hoef je alleen komma-gescheiden IPv6-adressen op te nemen in je configuratiebestand naast je standaard IPv4-adressen. Je voegt deze zowel toe aan het Address-veld (voor het eigen IP-adres van de server) als aan het AllowedIPs-veld (voor de IP-adressen van de clients).

8. Hoe kan ik WireGuard zo instellen dat het bij het opstarten wordt gestart?

Om ervoor te zorgen dat je VPN automatisch wordt ingeschakeld telkens wanneer je je Ubuntu-server opnieuw opstart, moet je systemd gebruiken, dit is de systeembeheerder voor Linux. Je gebruikt het enable-commando om het systeem te vertellen te zoeken naar je specifieke configuratiebestand (bijv. wg0) en dit tijdens de opstartsequentie te laden. Dit zorgt ervoor dat als je server opnieuw opstart voor een update, je VPN-verbinding weer online komt zonder dat je deze handmatig hoeft te starten.

sudo systemctl enable wg-quick@wg0

Conclusie

In deze handleiding heb je een WireGuard VPN opgezet op een Ubuntu-server en een peer verbonden met zowel IPv4 als IPv6. Onderweg heb je sleutels geconfigureerd, tunneladressen toegewezen en de server ingeschakeld om verkeer veilig te routeren, waardoor je een werkende VPN hebt die gemakkelijk te begrijpen en te gebruiken is.

De gids behandelde ook een paar praktische details die belangrijk zijn zodra de VPN regelmatig wordt gebruikt, zoals het beheren van sleutels in de loop van de tijd, het omgaan met IPv6 en dual-stack netwerken, en het verbeteren van betrouwbaarheid en prestaties met MTU-afstemming, keepalives en DNS-instellingen. Met deze elementen op hun plaats zou je goed voorbereid moeten zijn om WireGuard in praktijksituaties te gebruiken of het aan te passen naarmate je behoeften veranderen.

Als je meer wilt leren over WireGuard, inclusief hoe je geavanceerdere tunnels kunt configureren of WireGuard kunt gebruiken met containers, bezoek dan de officiële WireGuard-documentatie. Voor meer tutorials over het beveiligen van je Ubuntu-systemen, bekijk de volgende artikelen:

  • Hoe stel je een firewall in met UFW op Ubuntu
  • UFW Essentials: Veelvoorkomende firewallregels en opdrachten voor Linux-beveiliging
  • VPC vs VPN: Welke past bij uw beveiligde netwerkbehoeften?
  • Hoe een OpenVPN-server op Ubuntu op te zetten en te configureren

Bedankt dat je samen met de Linux-Console.net-community hebt geleerd.