En maskin, två jobb, en brandvägg: en Wi-Fi-uplink, ett litet Ethernet-subnät bakom den och en desktop-VPN-klient som antar att allt som lämnar maskinen är lokalt. Lokalt startade program går ut via den lokala utgångsvägen. Enheter bakom arbetsstationen kommer in på Ethernet-porten och behöver ett vidarebefordranbeslut. Ett undantag skrivet för den första vägen ser aldrig den andra, och därför kringgår en webbläsare tunneln medan enheterna inte gör det.

Två paketvägar, en policy

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

Den första raden är vad de flesta split-tunneling-guider beskriver. Den andra är en routerkonfiguration som råkar ligga på samma maskin. Att smälta dem till en mental modell är felet; de delar en kärna men inte en policy. Rita båda vägarna innan du redigerar någon regel, och resten av designen följer av vilken väg som saknas.

Tabellen förklarar också varför en maskin kan klara ett test och misslyckas med ett annat. Webbläsaren på arbetsstationen bevisar den lokala vägen; en bärbar dator kopplad till Ethernet-porten bevisar vidarebefordranvägen. Validera varje ändring med båda, annars förblir den andra otestad hur många gånger webbläsaren än uppdateras.

Vad ett programundantag faktiskt klassificerar

Ett undantag per program fungerar oftast genom att markera paket från en process eller en användare och sedan routa den markerade trafiken utanför tunneln. Det är en konstruktion för lokal utgång. Ett paket från en nedströms enhet har ingen lokal process, så det matchar aldrig väljaren, vilken väljaren än är.

Vilken väljaren än är, är de två listorna inte samma lista, och det är hela poängen. Mullvads Linux-guide beskriver markeringar som dess brandvägg och routingpolicy förbrukar, och dess exempel riktar sig mot lokal utgång; de är inte en beskrivning som stöds av en nedströms router. Att kopiera dem ger en maskin som tror att den har ett undantag medan den vidarebefordrar allt in i tunneln.

Skriv transitkontraktet

Namnge nedströms källprefix och ingångsgränssnittet tillsammans och begränsa sedan det prefixet vid ingången. Utan begränsningen kan varje enhet som når porten hävda en undantagen adress och lämna via kringgåendet. Behandla det som två frågor: får dessa värdar använda denna uplink överhuvudtaget, och får de nå arbetsstationen eller tunnelns privata intervall? Det är extra behörigheter, inte bieffekter av uplinkvalet.

Tillåt vidarebefordran och filtrera den sedan. Linux-gatewayen behöver aktiverad vidarebefordran, regler som tillåter den avsedda trafiken i båda riktningarna och antingen en returväg uppströms eller medvetet begränsad källöversättning. Enbart NAT väljer inte uplinken och ger ingen passage genom ett filter; det skriver bara om en adress efter dessa beslut.

Klassificering för transit måste ske före beslutet om vidarebefordranvägen, vilket betyder prerouting-steget och inte output. En regel placerad efter beslutet kan fortfarande ändra paketet, men inte ändra vart paketet redan skickats.

Markeringar tillhör programmet som äger dem

Markeringsvärden, tabellnummer och kedjeprioriteter är en del av VPN-programmets policy, inte tidlösa konstanter. Ett varaktigt nätverk som är beroende av att infoga en regel i en tabell som ett annat program återskapar går sönder vid nästa uppdatering, vanligtvis under en återanslutning och inte vid en lämplig tidpunkt.

Att lägga till en andra baskedja med en accept-dom åsidosätter inte nödvändigtvis en senare kedjas drop. Baskedjor har krokar och prioriteringar, och den första domen i ordningen vinner; en accept i en kedja annullerar inte en drop som en annan kedja når först. Titta på hela regeluppsättningen och routingpolicyns ordning, inte på den enda räknare som ökade. En räknare bevisar att en regel kördes, aldrig att dess dom var den som tillämpades.

Integrera, eller flytta subnätet

De två designerna skiljer sig i vem som äger kringgåendet. En integrerad design behåller en maskin och en policy, till priset av beroende av VPN-programmets tabellivscykel och av en uppsättning markeringar som dess dokumentation kan ändra. En dedikerad router för nedströmsnätet tar bort det beroendet helt: subnätet har sin egen uplink och arbetsstationen förblir en klient utan vidarebefordranroll.

Välj den andra när nedströmsnätet måste fortsätta fungera genom VPN-uppdateringar, eller när ingen kan testa den integrerade policyn efter varje version. Välj den första bara när integrationen är dokumenterad och någon äger den.

Verifiera gränsen i fyra tillstånd: ansluten, återansluter, avsiktligt blockerad och stoppad. Kontrollera namnmatchning och båda adressfamiljerna under varje, eftersom ett kringgående som läcker DNS inte är det undantag du designade. Testet ska bevisa den exakta gränsen, inte bara att en sida laddades.

Relaterade artiklar