De meeste kapotte WireGuard-configuraties hebben geen verkeerde waarde; ze zetten de juiste waarde aan de verkeerde kant. Een privésleutel hoort bij deze machine, een peer draagt de publieke sleutel van de andere machine, en een adres staat in het interface-blok ook al beschrijft het waar de tunnel woont. Lees het bestand als twee richtingen die elkaar ontmoeten en controleer daarna wat het hulpscript erbovenop heeft gezet. Het protocol zelf heeft minder velden dan het bestand, en de extra velden zijn apart de moeite van het kennen waard.

Interfacesleutels beschrijven deze machine

Het interface-blok houdt de eigen identiteit van dit eindpunt. PrivateKey is die identiteit en verlaat nooit de host; de bijbehorende publieke sleutel wordt eruit afgeleid en dat is wat andere peers opsommen. ListenPort is waar deze kant handshakes ontvangt, dus twee clients achter één adres hebben verschillende poorten nodig.

Address is het tunneladres waarop deze host antwoordt, geschreven met een prefixlengte omdat het ook de bron is die hij zal gebruiken. Een verkeerde prefix hier verandert welke bestemmingen de host als direct verbonden beschouwt, en dat levert storingen op die op routering lijken in plaats van configuratie.

Al het andere in een [Interface] blok met een echte client wordt meestal toegevoegd door wg-quick: DNS, MTU, Table, en de hookregels. Dat zijn geen protocolvelden, en een kale wg opstelling negeert ze volledig.

Elke peer-regel beschrijft één andere kant

Een [Peer] blok is de andere partij. PublicKey is de afgeleide sleutel van die partij, nooit hun privésleutel, en PresharedKey is een optioneel extra geheim dat beide kanten identiek moeten houden. Endpoint is waarheen te sturen, en PersistentKeepalive vraagt deze host om na het interval een pakket te sturen wanneer er verder niets uitgaat.

Twee fouten verklaren het meeste van de verwarring hier. Je eigen privésleutel in een peer-blok kopiëren laat de twee uiteinden één identiteit delen, en de handshake mislukt op een manier die slecht wordt gelogd. Endpoint weglaten op een client is meestal opzettelijk, omdat de server het adres uit de inkomende handshake leert; het weglaten op een server die moet initiëren is dat niet. Bedenk ook dat keepalive een NAT-mapping openhoudt, en het verbetert de doorvoer niet en verlaagt de latentie niet, dus dertig seconden extra pakketten kopen niets als het verkeer al stroomt.

AllowedIPs is routering, geen toestemmingslijst

AllowedIPs is WireGuards cryptosleutelroutering. Uitgaand bepaalt het welke peer een pakket ontvangt op basis van de bestemming. Inkomend bepaalt het of een pakket van die peer wordt geaccepteerd op basis van de bron. Hetzelfde veld doet beide taken, daarom is het geen toegangscontrolelijst en geen lijst van toegestane websites.

Een smalle AllowedIPs op de server voor een client betekent dat de server alleen pakketten aanneemt die die bronnen beweren, en alleen die bestemmingen naar die client stuurt. Verbreed één kant zonder de andere te verbreden, en je krijgt een tunnel die opkomt en niets doorlaat.

Wat wg-quick rond het protocol toevoegt

wg-quick leest hetzelfde bestand en voert de netwerkstappen uit die het protocol aan het besturingssysteem overlaat. Het wijst het interface-adres toe, voegt routes toe die zijn afgeleid van AllowedIPs, schrijft de resolverinstellingen en voert de hookopdrachten in volgorde uit.

Die laag verklaart de klassieke asymmetrie. Een bestand met 0.0.0.0/0 en een DNS regel geeft een client een standaardroute en een resolver, en het doet helemaal niets aan de doorstuur- of NAT-regels van de server. Die horen bij de configuratie van de server zelf, en geen enkel clientbestand kan ze leveren.

Houd één eigenaar voor het bestand. Het met de hand bewerken terwijl SaveConfig is ingeschakeld betekent dat je bewerking verdwijnt de volgende keer dat de interface naar beneden gaat, en de interface zal je niet vertellen dat het is gebeurd.

Controleer de toegepaste toestand, niet het bestand

Het bestand is een bedoeling. De toegepaste toestand is wat de kernel vasthoudt, en ze lopen uiteen zodra een hulpmiddel, een drop-in of een hook na de activering iets heeft bewerkt.

Lees de live toestand en de adressering samen en vergelijk daarna beide met wat je hebt geschreven:

sudo wg show
ip -4 addr show dev wg0
ip -4 route show dev wg0
grep -v "^#" /etc/wireguard/wg0.conf

Als de peer-lijst leeg is, is de interface aangemaakt zonder dat de configuratie is toegepast. Als adressen en routes bestaan maar de tellers op nul blijven, is het bestand geladen en mislukt de handshake, wat een sleutel- of eindpuntprobleem is en geen probleem met de sectievolgorde. Vergelijk de twee weergaven voordat je bewerkt, want het gat ertussen is meestal de echte fout.

Gerelateerde artikelen