Én maskine har allerede godkendt VPN-adgang, en anden maskine mangler præcis én privat HTTPS-tjeneste, og en lokal SSH-videresendelse kan bygge bro over det hul uden at give den anden maskine en tunnel. Videresendelsen bærer én TCP-destination i stedet for hele netværket, og netop den begrænsning er pointen. Gå gennem de fem trin nedenfor i rækkefølge, fordi hvert trin fejler af en forskellig grund, og et senere trin kan ikke redde et tidligere hul. Hvis en forudsætning mangler, løser dette design det ikke, og ingen kommandojustering vil hjælpe.

Trin et: bekræft de tre forudsætninger

Tre ting skal allerede være sande, før nogen kommando betyder noget. Du har brug for tilladelse til at bruge den første maskine som videresendelsesvært, fungerende SSH-adgang til den og en serverpolitik, der tillader den tilsigtede destination. En SSH-konto oprettet til filoverførsel kan have videresendelse slået fra, og en server, der tillader videresendelse, kan stadig begrænse, hvilke destinationer der kan nås gennem den. Spørg før du tester, fordi brug af en kollegas arbejdsstation som springpunkt uden aftale er et politisk problem, selv når kommandoen kører fejlfrit.

To kommandoer afgør den tekniske halvdel af den liste. Den første beviser, at kontoen og nøglen virker uden en interaktiv prompt, og den anden udskriver den effektive serverpolitik i stedet for det kommenterede eksempel i konfigurationsfilen.

ssh -o BatchMode=yes [email protected] 'echo ok'
sudo sshd -T | grep -E 'allowtcpforwarding|permitopen'

Trin to: bind en loopback-port og hold sessionen i live

På den maskine, der kører klientprogrammet, skal du åbne en lokal videresendelse til den private tjeneste. Bind den udtrykkeligt til loopback, så den ikke offentliggøres på det lokale netværk, og vælg en høj port, som ingen lokal tjeneste holder. Hold sessionen kørende, mens du arbejder, fordi lukning af den lukker lytteren. ExitOnForwardFailure gør et afvist bind eller en optaget port til en øjeblikkelig afslutning i stedet for en session, der bliver oppe uden videresendelse, og det er den fejltilstand, der spilder mest tid.

Den private forbindelse oprettes fra springværten, så dens DNS, ruter, VPN-politik og tjenesteadgang skal alle virke. SSH-sessionen skaber ikke den rækkevidde, springværten mangler, og den kan ikke reparere en rute, som VPN'en aldrig har skubbet. Bekræft lytteren, hvor den faktisk er, i stedet for at stole på kommandoens tavshed.

ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:9443:portal.lab.example:443 [email protected]
ss -ltn '( sport = :9443 )'

Trin tre: behold HTTPS-navnet, når stikket er lokalt

At browse til https://127.0.0.1:9443/ ændrer TLS-servernavnet og programmets autoritet. Et certifikat udstedt til portal.lab.example validerer ikke mod en loopback-adresse, og den resulterende fejl ser ud som et brudt certifikat snarere end en videresendelsesgenvej. Til en kommandolinjetest skal du beholde den rigtige URL og kun ændre stikkets destination. Det er, hvad --connect-to gør, og curl-manualen dokumenterer den firefelts form, der bruges nedenfor.

curl --noproxy portal.lab.example --connect-to portal.lab.example:443:127.0.0.1:9443 https://portal.lab.example/

Navnet bliver i URL'en, i TLS-håndtrykket og i Host-headeren, mens TCP-forbindelsen går til den lokale lytter. Uden-proxy-indstillingen holder testen på denne videresendelse i stedet for at lade en konfigureret HTTP-proxy opfange den, og at holde certifikatvalideringen slået til er det, der gør resultatet meningsfuldt.

Trin fire: vid, hvad en enkelt videresendelse ikke kan dække

En enkelt TCP-videresendelse dækker én destinationsport. En side, der omdirigerer til et andet værtsnavn, indlæser ressourcer fra en vært inde i det private netværk eller sender til en anden port, har brug for sin egen videresendelse, og hver af dem kræver samme politikcheck som den første. Browserarbejdsgange tilføjer deres egne krav, fordi browseren skal have besked om at sende det rigtige navn til den lokale port gennem en proxykonfiguration eller en lokal mapping. En kommandolinjetest, der lykkes, beviser derfor ikke, at browseren vil gøre det, selv om den beviser vejen.

UDP, SMB-opdagelse og domænelogin rejser slet ikke gennem en TCP-videresendelse. Hvis det egentlige behov er generel netværksadgang, er dette design det forkerte værktøj, og en understøttet fjernadgangsgateway er det rigtige.

Trin fem: ryd op og skriv det ned

Stop sessionen, når testen er færdig, og bekræft, at lytteren er væk. Hvis den valgte port allerede var optaget, skal du vælge en anden ubrugt loopback-port og opdatere URL'en, testkommandoen og noten sammen i stedet for at afslutte en urelateret lokal tjeneste for at frigøre nummeret. At lade en videresendelse stå åben på en bærbar computer gør en diagnose til en uadministreret tjeneste.

Skriv springværten, den videresendte destination, den lokale port og hvem der godkendte ordningen ned. En videresendelse, der kun findes i nogens shell-historik, er en genstart fra en gentaget undersøgelse, og den næste person vil ikke vide, hvilken af de tre forudsætninger der allerede er kontrolleret.

Relaterede artikler