Eén machine, twee taken, één firewall: een Wi-Fi-uplink, een klein Ethernet-subnet erachter en een desktop-VPN-client die aanneemt dat alles wat de machine verlaat lokaal is. Lokaal gestarte toepassingen verlaten de machine via het lokale uitvoerpad. Apparaten achter het werkstation komen binnen op de Ethernet-poort en hebben een doorstuur beslissing nodig. Een uitzondering die voor het eerste pad is geschreven, ziet het tweede nooit, en daarom omzeilt een browser de tunnel terwijl de apparaten dat niet doen.

Twee paden voor pakketten, één beleid

OriginPathDecision owner
Application on the workstationOUTPUT then egressThe VPN app's routing policy
Device behind the workstationPREROUTING then FORWARDThe workstation's own forwarding policy

De eerste rij is wat de meeste split-tunneling-gidsen beschrijven. De tweede is een routerconfiguratie die toevallig op dezelfde machine staat. Ze in één mentaal model samensmelten is de fout; ze delen een kernel, maar geen beleid. Teken beide paden voordat u een regel wijzigt, en de rest van het ontwerp volgt uit welk pad ontbreekt.

De tabel verklaart ook waarom één machine de ene test kan halen en de andere niet. Een browser op het werkstation bewijst het lokale pad; een laptop op de Ethernet-poort bewijst het doorstuurpad. Valideer een wijziging met beide, anders blijft de tweede ongetest, hoe vaak de browser ook wordt vernieuwd.

Wat een applicatie-uitzondering werkelijk classificeert

Een uitzondering per applicatie werkt meestal doordat pakketten van een proces of een gebruiker worden gemarkeerd en de gemarkeerde dataverkeer vervolgens buiten de tunnel wordt gerouteerd. Dat is een constructie voor lokale uitvoer. Een pakket van een stroomafwaarts apparaat heeft geen lokaal proces, dus het komt nooit overeen met de selector, wat de selector ook is.

Wat de selector ook is, de twee lijsten zijn niet dezelfde lijst, en dat is precies het punt. De Mullvad-gids voor Linux beschrijft markeringen die zijn firewall en routeringsbeleid verbruiken, en de voorbeelden richten zich op lokale uitvoer; ze zijn geen ondersteunde beschrijving van een stroomafwaartse router. Ze kopiëren levert een machine op die denkt dat ze een uitzondering heeft terwijl ze alles de tunnel in stuurt.

Schrijf het transitcontract

Noem het stroomafwaartse bronprefix en de ingress-interface samen, en beperk dat prefix vervolgens bij de ingress. Zonder de beperking kan elk apparaat dat de poort bereikt een uitgesloten adres opeisen en via de omzeiling vertrekken. Behandel het als twee vragen: mogen deze hosts deze uplink eigenlijk gebruiken, en mogen ze het werkstation of de privébereiken van de tunnel bereiken? Dat zijn extra machtigingen, geen bijwerkingen van de uplinkkeuze.

Sta doorsturen toe en filter het daarna. De Linux-gateway heeft ingeschakeld doorsturen nodig, regels die het bedoelde verkeer in beide richtingen toestaan, en ofwel een retourroute stroomopwaarts ofwel bewust beperkte bronvertaling. NAT alleen kiest de uplink niet en geeft geen doorgang door een filter; het herschrijft pas een adres na die beslissingen.

Classificatie voor transit moet plaatsvinden vóór de beslissing over de doorstuurroute, dus in de prerouting-fase en niet in output. Een regel die na de beslissing wordt geplaatst, kan het pakket nog wijzigen, maar niet meer waar het al naartoe is gestuurd.

Markeringen horen bij de applicatie die ze bezit

Markeringswaarden, tabelnummers en ketenprioriteiten maken deel uit van het beleid van de VPN-applicatie, niet van tijdloze constanten. Een duurzaam netwerk dat afhangt van het invoegen van een regel in een tabel die een ander programma opnieuw genereert, breekt bij de volgende update, meestal tijdens een herverbinding en niet op een gunstig moment.

Een tweede basisketen met een accept-uitspraak toevoegen overrulet niet automatisch de drop van een latere keten. Basisketens hebben hooks en prioriteiten, en de eerste uitspraak in de volgorde wint; een accept in de ene keten annuleert geen drop die een andere keten eerder bereikt. Kijk naar de volledige regelset en de volgorde van het routeringsbeleid, niet naar de ene teller die opliep. Een teller bewijst dat een regel liep, nooit dat haar uitspraak de toegepaste was.

Integreer, of verplaats het subnet

De twee ontwerpen verschillen in wie de omzeiling bezit. Een geïntegreerd ontwerp houdt één machine en één beleid, tegen de prijs van afhankelijkheid van de tabellevenscyclus van de VPN-applicatie en van een set markeringen die haar documentatie kan wijzigen. Een speciale router voor het stroomafwaartse netwerk haalt die afhankelijkheid volledig weg: het subnet heeft zijn eigen uplink en het werkstation blijft een client zonder doorstuurrol.

Kies het tweede wanneer het stroomafwaartse netwerk moet blijven werken tijdens VPN-updates, of wanneer niemand het geïntegreerde beleid na elke release kan testen. Kies het eerste alleen wanneer de integratie gedocumenteerd is en iemand ervoor verantwoordelijk is.

Controleer de grens in vier toestanden: verbonden, opnieuw verbinden, bewust geblokkeerd en gestopt. Controleer naamresolutie en beide adresfamilies in elk daarvan, want een omzeiling die DNS lekt is niet de uitzondering die u ontwierp. De test moet de precieze grens bewijzen, niet alleen dat één pagina is geladen.

Gerelateerde artikelen