Handleiding

Drie locaties in een mesh

Drie tunnels in plaats van twee, en de vraag of dat extra pad zijn onderhoud waard is.

Bij drie locaties is het verschil tussen een hub en een mesh klein: twee tunnels tegen drie. Dat is precies waarom deze vorm zo vaak wordt gekozen zonder erover na te denken. Bij vier locaties wordt het zes tunnels, bij vijf tien, en dan is de rekening opeens wel zichtbaar.

Wanneer een mesh de moeite waard is

Een mesh verdient zijn complexiteit als het verkeer werkelijk tussen de vestigingen loopt. Drie werkplaatsen die elkaars bestandsserver gebruiken, drie kantoren met een telefooncentrale in het ene gebouw en de administratie in het andere: daar is elk pad dat via een derde locatie loopt een omweg met extra vertraging en een extra apparaat dat stuk kan.

Praat elke vestiging vooral met één centrale plek, dan is een hub met spokes rustiger. Minder tunnels, minder sleutels, één plek waar je kijkt als er iets niet werkt.

Het adresplan

Elke locatie krijgt op het netwerkbord een eigen rechthoek met een eigen adresreeks. De VLAN-nummers blijven overal gelijk; alleen de eerste twee getallen verschillen.

LocatieReeksWerkplekken (10)Beheer (99)Tunnels
Amsterdam10.1010.10.10.0/2410.10.99.0/24wg1 naar Utrecht, wg2 naar Breda
Utrecht10.2010.20.10.0/2410.20.99.0/24wg1 naar Amsterdam, wg2 naar Breda
Breda10.3010.30.10.0/2410.30.99.0/24wg1 naar Amsterdam, wg2 naar Utrecht

De tunnels zelf krijgen hun adressen uit 10.255.255.0: elke nieuwe tunnel pakt de eerstvolgende vrije /30, dus .0, .4 en .8. Laat die reeks vrij in je eigen plan.

In de tool

  1. Maak één site met de drie routers en alles wat eraan hangt.
  2. Teken drie locaties op het bord en geef elke locatie zijn eigen reeks.
  3. Vul bij elke router het publieke adres in, of de DNS-naam.
  4. Klik met rechts op een router en kies Tunnel naar. Doe dat drie keer: Amsterdam naar Utrecht, Amsterdam naar Breda, Utrecht naar Breda. Elke router krijgt dan wg1 en wg2.

Per tunnel leidt de tool af welke netwerken aan de overkant liggen: dat zijn de VLAN-subnetten van de locatie waar die router in staat. Die netwerken komen als statische routes in het script en als allowed-address bij de WireGuard-peer. Met drie tunnels kent elke router dus beide andere vestigingen rechtstreeks.

Dat is het hele mechanisme. Er is geen transitverkeer: een router geeft niets door namens een derde. De mesh werkt omdat elk paar zijn eigen tunnel heeft, niet omdat er ergens doorgestuurd wordt.

Publieke adressen zijn de echte beperking

WireGuard heeft per tunnel minstens één kant nodig die te bereiken is. Staat er bij geen van beide routers een publiek adres, dan meldt de controle dat als fout: de tunnel weet niet waar hij heen moet.

Dat maakt de rekensom concreet. Heeft alleen Amsterdam een vast adres en zitten Utrecht en Breda achter CGNAT, dan zijn Amsterdam-Utrecht en Amsterdam-Breda prima, maar Utrecht-Breda kan niet tot stand komen. Je hebt dan geen mesh maar een hub, of je regelt bij een van de twee een bereikbaar adres. De tool zet standaard een keepalive van 25 seconden, dus de kant achter CGNAT houdt de verbinding zelf open.

Gebruik je GRE, IPIP of EoIP in plaats van WireGuard, dan is de eis strenger: die tunnels hebben aan beide kanten een IP-adres als bestemming nodig, geen DNS-naam. De controle zegt dat er ook bij.

Wat er breekt als één tunnel wegvalt

Dit is het deel dat mensen verrast. Een WireGuard-interface gaat nooit "down": hij bestaat zodra hij is aangemaakt, of er aan de overkant nu iemand antwoordt of niet. De statische routes die de tool erbij zet blijven daardoor gewoon staan.

Valt de lijn in Breda uit, dan blijft Utrecht netjes verkeer naar 10.30.10.0/24 in wg2 stoppen, waar het verdwijnt. Er wordt niets omgeleid via Amsterdam, ook al is Amsterdam bereikbaar en kent Amsterdam beide netwerken. De tool genereert geen uitwijkpad.

Wil je dat wel, dan zijn er twee wegen:

  • BGP per tunnel. Geef beide routers een AS-nummer op het bord en zet BGP aan bij de tunnel. De tool schrijft dan de BGP-sessie over het tunneladres en laat de statische routes weg; WireGuard houdt de netwerken wel in zijn allowed-address, anders zou het verkeer alsnog worden weggegooid. Valt de sessie weg, dan verdwijnen de routes en neemt het pad via de derde locatie het over. Reken er wel op dat dat pas gebeurt als de hold time verlopen is, niet meteen.
  • Netwatch met eigen scripts. Laat de router het tunneladres aan de overkant pingen en bij uitval de afstand van de route omzetten. Dat werkt, maar het zijn regels die jij schrijft en die je moet opschrijven op het overdrachtsblad.

Controleer na het uitrollen met /ip route print en /interface wireguard peers print of de laatste handshake recent is; dat laatste is het enige echte teken van leven.

Wat de controles vangen

  • Twee locaties met dezelfde adresreeks, of twee locaties waarvan de routers op dezelfde subnetten uitkomen. In dat tweede geval botsen de routes over de tunnel en zegt de tool dat erbij.
  • Een locatie met apparaten maar zonder router, of met twee apparaten in een router-rol.
  • Een gerouteerde tunnel naar een apparaat dat niet routeert, bijvoorbeeld een switch die per ongeluk als eindpunt is gekozen.
  • Ontbrekende WireGuard-sleutels, wat gebeurt in een browser zonder X25519.
  • BGP aan zonder AS-nummer bij een van de twee routers.

Verder lezen: Tunnels tussen locaties, Twee tunnels tussen dezelfde locaties en OSPF tussen locaties.

Meteen proberen? Open de configurator