SSH dünaamiline edastus SOCKS-proksina üle teie VPN-i
Rakendusel, mis räägib ainult SOCKS-iga, pole tavalises VPN-is ühtki proksi lõpp-punkti. Kaks hüpet, üks loopback-kuulaja ja üks nimeotsing, mille peab tegema SSH-server ise.
Rakendusel, mis räägib ainult SOCKS-iga, pole tavalises VPN-is millegagi rääkida, sest tunnel kannab pakette ja rakendus tahab proksi lõpp-punkti. OpenSSH saab selle lõpp-punkti pakkuda, kui juurdepääsu omanik seda lubab, sest dünaamiline edastus muudab ühe SSH-seansi kohalikuks proksiks. Seejärel tuleb selgelt hoida kahte hüpet: tunnel, mis jõuab SSH-hostini, ja ühendus, mille see host edasi avab. Nende eraldamine selgitab nii seda, miks see lahendus töötab, kui ka seda, mida see kunagi ei tee.
Milleks SSH-kuulaja saab ja milleks mitte
Dünaamiline edastus paneb SSH-kliendi lokaalselt kuulama ja rääkima SOCKS4 või SOCKS5-iga kõigega, mis ühendub. Iga päring nimetab sihtkoha ja SSH-server avab edasise ühenduse, mistõttu võib sihtkoha otsing toimuda kaugemas otsas. See on rakendustasandi TCP-edastus, mitte VPN kogu seadmele. See ei kanna UDP-assotsiatsiooni, ICMP-d ega midagi rakendustele, mis ignoreerivad proksiseadeid täielikult. Ka hüpe SSH-serverist rakenduseni ei ole teie tunneli sees, mis loeb siis, kui sihtkoht võtab liiklust vastu ainult tuntud võrkudest.
Eeldused on reaalsed: marsruut SSH-hostini, volitatud konto, kontrollitud serveri hostivõti ja luba edastada. Ühtegi neist proksi ei loo, ja viimane on tavaliselt esimene, mis puudub. Kinnitage kõik neli enne muu silumist, sest kliendi poolelt näeb tõrge ühesugune välja, ükskõik milline neist puudub.
Käivitage see loopbackil selgesõnalise pordiga
Valige kasutamata kohalik port ja siduge see selgesõnaliselt loopbackiga, selle asemel et aadress ära jätta. Kolm allolevat valikut on igaüks ühel põhjusel.
ssh -D 127.0.0.1:1080 -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
[email protected]
-N jätab kaugkäsud vahele ja -T jätab pseudoterminali vahele, nii et seanss on ainult edastamiseks. ExitOnForwardFailure paneb kliendi väljuma, kui kuulajat ei saa luua, selle asemel et töötada ilma soovitud edastuseta. ControlPath=none hoiab seansi olemasolevast multipleksitud ühendusest eemal, mis võiks lisada oma edastused. Loopback hoiab kuulaja LAN-ist eemal, kuid jagatud masinas ei ole see volituste piir, sest ka teised kohalikud protsessid pääsevad sellele ligi. OpenSSH kliendi viide dokumenteerib kõik need lipud, ja loopbacki hoiatus tuleneb sellest, mis kuulav socket on.
Saatke nimed proksist läbi, mitte sellest mööda
SOCKS5 klient võib sihtkoha ise lahendada või paluda proksil seda teha, ja see valik otsustab, milline lahendaja vastab. socks5h puhul saadab curl hostinime proksist läbi, nii et otsing toimub SSH-serveris. Tavalise socks5 puhul lahendab sülearvuti kõigepealt ja reisib ainult ühendus, mis kahjustab vaikselt mõtte, kui nimi on sisemine. Allolev päring tühjendab ka proksivaba loendi, nii et päritud NO_PROXY väärtus ei saa seda proksist mööda suunata.
curl -sS --noproxy '' --proxy socks5h://127.0.0.1:1080 https://app.corp.example/health
Sertifikaadi valideerimine ja rakenduse enda sisselogimine kehtivad endiselt, sest proksi ei asenda kumbagi. Jääb kaks otsingut: sülearvuti peab jõudma SSH-hostini lubatud VPN- ja DNS-teed pidi ning SSH-server peab rakenduse nime ise lahendama. Teist saab eraldi testida enne, kui mingi liiklus proksist läbi läheb.
ssh [email protected] getent hosts app.corp.example
Tõestage üks lubatud sihtkoht ja sulgege siis seanss
Testige sihtkohta, mille poliitika lubab, ja seda, mille see peaks tagasi lükkama, sest töötav edastus tõestab ainult, et kuulaja töötab, ja mitte midagi enamat. Rakendus näeb allikaaadressi, mille SSH-server valib, ja see ei ole teie sülearvuti tunneli aadress. Kui kaugem ots logib ühendusi allika järgi, on see erinevus esimene, mida päringu tagasilükkamisel kontrollida.
Peatage seanss selle omanikprotsessi kaudu, mitte tappes kõrvalise shelli. Seejärel kinnitage, et kuulaja on kadunud, sest port, mis veel vastab, on seanss, mida te tegelikult ei sulgenud. Eemaldage ainult proksiseade, mille see harjutus lisas, ja jätke ülejäänud rakenduse konfiguratsioon puutumata. Järelevalveta terminal, mis hoiab edastusreeglit, ei ole teenus, ja püsiv proksi vajab kinnitatud elutsüklit, mitte unustatud akent.
ss -ltn | grep 1080
Tõrked, mida see lahendus ei suuda parandada
Mõned sümptomid osutavad otse ülaltoodud piiridele ja nende varajane äratundmine säästab õhtupooliku proksi silumist. Tabel seob selle, mida näete, sellega, mida see tavaliselt tähendab. Kõik viimases veerus on disainiküsimus, mitte konfiguratsiooniviga.
| What you see | What it usually means | Where to look |
|---|---|---|
| The app connects and nothing follows | It ignores proxy settings entirely | Its own network settings, not the SSH session |
| A name resolution error for the destination | The SSH server cannot resolve it | Server resolver and search domains |
| A UDP-only application fails | Dynamic forwarding carries TCP only | This arrangement cannot serve it |
| curl works, the browser does not | The browser is not using the socks5h endpoint | Browser proxy configuration |
| The listener answers after the session ended | Another process owns port 1080 | The ss output, then the owning process |
Esimesed kolm rida on need, mida inimesed valesti diagnoosivad, sest igaüks tekitab ühenduskatse, mitte vea proksi enda kohta. Sülearvutis lahendatav nimi ei ütle serveri lahendaja kohta midagi ja tõrget loetakse hoopis sertifikaadi- või ajapiirangu probleemiks. Ainult UDP-ga rakendused seisavad disainist väljas, mitte selle sees katki, ja ükski lisavalik ssh ei muuda seda. Brauseri rida on tavaline meeldetuletus, et proksiseaded kehtivad iga rakenduse kohta eraldi. Viimane rida on põhjus, miks sulgemiskontroll olemas on: port, mis veel kuulab, tähendab, et nüüd omab seda miski muu.