Hur en lokal SSH-vidarebefordran bär en TCP-OpenVPN-session
En lokal port, två autentiserade relationer, tre transporter. Vad SSH-vidarebefordran flyttar och var loopen och certifikatkontrollerna fortfarande gäller.
Här staplas tre transporter och var och en har sin egen infattning. VPN-nyttolasten färdas inuti en TLS-session, den TLS-sessionen färdas inuti en TCP-anslutning till en loopback-port, och byten i den anslutningen färdas inuti SSH till en relay-värd, som öppnar den riktiga TCP-anslutningen till VPN-lyssnaren. Ingenting i arrangemanget ändrar det som OpenVPN autentiserar, och ingenting i det gör en UDP-lyssnare nåbar över TCP. Läs resten som en beskrivning av bytevägen, inte som ett recept för att kringgå en nätverkskontroll.
Vad den lokala vidarebefordran faktiskt flyttar
SSH-klienten lyssnar på en lokal port. När en lokal process ansluter paketerar klienten byten i sin krypterade kanal, och serversidan öppnar en ny TCP-anslutning till målet som anges i vidarebefordringsbegäran.
Det målet löses av relayen, inte av din maskin, och därför fungerar ett namn som bara finns inuti det avlägsna nätet fortfarande. Det betyder också att relayen måste kunna nå VPN-lyssnaren och ha en returväg till den. Ett namn som löses på din laptop säger ingenting om vad relayen kan se.
Att starta SSH-sessionen bevisar bara att relayen är nåbar och autentiserad. Det säger ingenting om huruvida nästa lyssnare är igång, om en brandvägg mellan relayen och lyssnaren accepterar anslutningen, eller om VPN:n accepterar din profil.
Rikta klienten mot den lokala lyssnaren
Ett deklarerat exempel: relayen kan nå en TCP-lyssnare på gw.internal.example:443, och en hög lokal port exponerar den vägen bara för den här maskinen.
ssh -N -L 127.0.0.1:24011:gw.internal.example:443 [email protected]OpenSSH-handboken beskriver den lokala vidarebefordran som att lokalt acceptera TCP-anslutningar och öppna nästa anslutning från den avlägsna sidan. Bind lyssnaren till loopback i stället för till alla gränssnitt, eftersom en vidarebefordran som är nåbar från nätet är en öppen relay med ditt namn på. En jokerteckenbindning exponerar också porten för alla andra lokala konton på en delad maskin.
Ställ sedan in VPN-klienten i TCP-läge och rikta den mot 127.0.0.1:24011. Om profilen använder UDP kan den här designen inte hjälpa: vidarebefordran bär en byteström och det finns ingen datagramväg genom den.
Håll de två autentiseringarna åtskilda
SSH autentiserar relay-värden. OpenVPN autentiserar fortfarande VPN-motparten, och loopback-målet ändrar inte det kravet. Att stänga av certifikatkontrollerna för att socketen nu pekar på localhost är den sämsta genvägen i den här designen. Det förvandlar ett transportarrangemang till ett förtroendearrangemang, och ingen har godkänt det andra.
Behåll profilens förtroendeankare, serverrollskontrollen och namneverifieringen intakta. Om din klient jämför servernamnet med adressen den ringde kan loopback behöva en uttrycklig naminnställning i stället för en avstängd kontroll, och profildokumentationen är platsen där man bekräftar vilket fält som jämförs.
Behandla relayen som en andra part i förtroendeberättelsen: dess administratör kan se anslutningsmetadata och kan omdirigera vidarebefordran om konfigurationen ändras. Arrangemanget behöver godkännande från både relayen och ägaren av VPN-tjänsten, inte bara från den som behöver det i dag.
Bygg inte en loop under tunneln
När VPN:n installerar rutter behöver SSH-anslutningen som bär den fortfarande en väg till relayen som inte går genom tunneln. Om standardvägen flyttas till VPN:n och relayen bara är nåbar genom samma tunnel kollapsar transporten och VPN:n följer med. Felet ser ut som en tappad tunnel snarare än ett routingfel, och därför diagnostiseras det fel.
Den vanliga lösningen är en värdväg till relay-adressen fäst vid det fysiska gränssnittet innan tunneln kommer upp, plus en kontroll att vägen överlever en återanslutning. Verifiera den med en vägsökning för relay-adressen i stället för att anta att ordningen var korrekt.
Räkna också med att den här stapeln är långsammare och ömtåligare än en direkt anslutning, eftersom det nu finns två ordnade transporter och ännu en ändpunkt att underhålla. Det är ett sätt att korsa en nätverksgräns, inte en prestandateknik.
Stäng lyssnaren när du är klar
Stoppa SSH-sessionen när tunneln inte längre behövs, och bekräfta att den lokala porten har frigjorts. En glömd vidarebefordran håller en autentiserad väg öppen på en maskin som kan vara delad.
Gå igenom relayens tillåtna vidarebefordringsmål också, eftersom en eftergiven konfiguration gör varje komprometterat konto till en allmän vridpunkt. Skriv ner porten, relayen och målet tillsammans, så att nästa person kan se vad vidarebefordran var till för och om den fortfarande är godkänd.