AWS Client VPN med delad tunnel: vilka rutter du bör publicera
Delad tunnel är en ruttlista, inte en kryssruta. Bestäm vart internettrafiken går, vilka privata prefix som publiceras och vilken resolver som används.
Konsolen erbjuder en växel för delad tunnel, så beslutet känns som en kryssruta. Det är det inte. Det som faktiskt når klienten är slutpunktens publicerade ruttmängd, och den listan avgör vilka privata prefix som använder tunneln, om vanlig internettrafik stannar lokalt eller går ut via AWS, och vilken resolver klienten fortfarande kan prata med. Tre frågor avgör designen, och vart och ett av dem kan besvaras illa medan anslutningen ändå lyckas.
En flagga för delad tunnel är inte en destinationslista
AWS beskriver delad tunnel som att slutpunktsrutter läggs till i klientens rutttabell när anslutningen upprättas. En rutt till den privata VPC:n begränsar tunneln till den destinationen; allt annat följer klientens vanliga väg. En standardrutt är en annan instruktion med en annan effekt, därför varnar dokumentationen för delad tunnel mot att publicera 0.0.0.0/0 på en slutpunkt som är konfigurerad för det här läget: det bryter förbindelsen snarare än utökar den. Slutpunktens rutttabell är policyn, och klientens rutttabell är resultatet du kan granska.
Läs slutpunktens rutttabell och klientens installerade rutter tillsammans. Etiketten beskriver en avsikt; ruttarna beskriver vad som händer.
Första beslutet: ska vanlig internettrafik stanna lokalt?
Om surfning ska använda användarens egen anslutning, publicera bara de privata destinationer som jobbet behöver och sluta där. Lägg inte till en internetrutt för att en guide för full tunnel hade en, och anta inte att den extra rutten förbättrar säkerheten. Den ändrar vägen, lägger inte till en policy och kostar oftast latens du inte hade budgeterat för.
Om internettrafik ska gå ut via AWS, bygg den dokumenterade internetåtkomstarkitekturen: slutpunktsrutt, auktoriseringsregler, den associerade subnätets väg, säkerhetspolicy och en fungerande utgång uppströms. En standardrutt ensam ger inget av det.
Andra beslutet: vilka privata prefix, auktoriserade av vem?
Publicera den minsta uppsättning destinationer som tjänar den faktiska arbetsbelastningen, och kontrollera att varje associerat subnät kan routa dit. Slutpunktens ruttmål och subnätets VPC-routing är olika lager, och en rutt som finns i det ena är inte bevis om det andra. Auktorisering är åter separat: en destination kan vara nåbar och ändå nekas eftersom klientens grupp inte har en regel som tillåter den.
Att testa en enda lyckad session bevisar en enda väg. Kontrollera varje associerat subnät, eftersom en subnätsassociation som lades till senare är precis där den saknade rutten brukar ligga.
När en destination måste vara nåbar via namn, notera att nästa fråga är namnmatchning, inte rutten.
Tredje beslutet: vilken resolver följer tunneln?
En klient kan få en DNS-server som bara är nåbar via VPN, och den resolvern fungerar bara om dess adress själv ligger inom en auktoriserad rutt. Verifiera båda halvorna: resolverns adress följer en publicerad rutt, och servern svarar på de namn som applikationen frågar efter. En förfrågan som lyckas på adress men misslyckas på värdnamn pekar på namngivning, inte på routning, och att felsöka tunneln i det fallet slösar bort eftermiddagen.
Offentliga namn bör lösas upp som före anslutningen, vilket är ännu ett skäl att vara precis om vad du publicerar.
Ändra ruttmängden och verifiera sedan båda världarna
AWS dokumenterar att ändrade rutter på en slutpunkt med delad tunnel återställer klientanslutningar. Planera ändringen med det i åtanke: tillämpa den, återanslut via den stödda klienten och läs de installerade ruttarna på nytt i stället för att lita på tillståndet som tillämpades före redigeringen. Föråldrat tillämpat tillstånd är den vanligaste orsaken till att en korrekt ändring ser trasig ut.
Acceptera designen först när en privat resurs och en offentlig destination båda beter sig som avsett, via namn och via adress, i de adressfamiljer du faktiskt stöder. En tunnel som autentiserar är inte samma sak som en tunnel som delar korrekt.
Skriv ruttlistan i runbooken bredvid resonemanget, så att nästa person kan skilja ett avsiktligt undantag från ett glömt.