Dynamísk SSH-áframsending sem SOCKS-milliþjónn yfir VPN-ið þitt
Forrit sem talar aðeins SOCKS hefur engan milliþjónaendapunkt á venjulegu VPN. Tvö stökk, einn loopback-hlustun og eitt nafnleit sem SSH-þjónninn verður að gera sjálfur.
Forrit sem talar aðeins SOCKS hefur ekkert til að tala við á venjulegu VPN, því göngin flytja pakka og forritið vill milliþjónaendapunkt. OpenSSH getur veitt þann endapunkt þegar eigandi aðgangsins leyfir það, því dynamísk áframsending breytir einni SSH-lotu í staðbundinn milliþjón. Síðan eru tvö stökk sem þarf að halda aðskildum: göngin sem ná til SSH-hýsisins, og tengingin sem sá hýsill opnar áfram. Að skilja þau að útskýrir bæði hvers vegna fyrirkomulagið virkar og hvað það mun aldrei gera.
Hvað SSH-hlustunin verður og hvað ekki
Dynamísk áframsending lætur SSH-biðlarann hlusta á staðnum og tala SOCKS4 eða SOCKS5 við allt sem tengist. Hver beiðni nefnir áfangastað og SSH-þjónninn opnar tenginguna áfram, þess vegna getur leitin að áfangastaðnum farið fram hinum megin. Þetta er TCP-áframsending á forritastigi, ekki VPN fyrir allt tækið. Hún flytur enga UDP-samtengingu, ekkert ICMP og ekkert fyrir forrit sem hunsa milliþjónastillingar algjörlega. Stökkið frá SSH-þjóninum til forritsins er líka ekki inni í göngunum þínum, sem skiptir máli þegar áfangastaðurinn tekur aðeins við umferð frá þekktum netum.
Forsendurnar eru raunverulegar: leið að SSH-hýsinum, heimilaður reikningur, staðfestur hýsillykill þjónsins og leyfi til að senda áfram. Ekkert þeirra er búið til af milliþjóninum, og hið síðasta vantar yfirleitt fyrst. Staðfestu öll fjögur áður en þú greinir eitthvað annað, því frá biðlaranum lítur bilunin eins út, hvað sem vantar.
Ræstu það á loopback með skýrum porti
Veldu ónotað staðbundið port og bindu það skýrt við loopback í stað þess að sleppa vistfanginu. Þrír valkostirnir hér að neðan eru hver fyrir sig af einni ástæðu.
ssh -D 127.0.0.1:1080 -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
[email protected]
-N sleppir fjartengdu skipuninni og -T sleppir gerviskjá, svo lotan er aðeins til að senda áfram. ExitOnForwardFailure lætur biðlarann hætta þegar ekki er hægt að búa til hlustunina, í stað þess að keyra án áframsendingarinnar sem þú baðst um. ControlPath=none heldur lotunni utan við fyrirliggjandi margfaltengingu sem gæti bætt við sínum eigin áframsendingum. Loopback heldur hlustuninni utan LAN, en á sameiginlegri vél er það ekki heimildarmörk, því aðrar staðbundnar ferlar komast líka að henni. Tilvísun OpenSSH-biðlarans skjalfestir alla þessa rofa, og viðvörunin um loopback leiðir af því hvað hlustandi socket er.
Sendu nöfn í gegnum milliþjóninn, ekki í kringum hann
SOCKS5-biðlari getur leyst áfangastaðinn sjálfur eða beðið milliþjóninn um það, og það val ræður því hvaða leysir svarar. Með socks5h sendir curl hýsilnafnið í gegnum milliþjóninn, svo leitin fer fram á SSH-þjóninum. Með venjulegu socks5 leysir fartölvan fyrst og aðeins tengingin ferðast, sem eyðileggur hljóðlega tilganginn þegar nafnið er innra. Beiðnin hér að neðan hreinsar líka listann án milliþjóns, svo arfkennt NO_PROXY gildi getur ekki beint henni fram hjá milliþjóninum.
curl -sS --noproxy '' --proxy socks5h://127.0.0.1:1080 https://app.corp.example/health
Staðfesting skírteinis og innskráning forritsins sjálfs gilda áfram, því milliþjónninn kemur í stað hvors tveggja. Tvær leitir standa eftir: fartölvan verður að ná SSH-hýsinum um leyfða VPN- og DNS-leið, og SSH-þjónninn verður að leysa nafn forritsins sjálfur. Hægt er að prófa hina síðari eina sér áður en nokkur umferð fer í gegnum milliþjóninn.
ssh [email protected] getent hosts app.corp.example
Sannaðu einn leyfðan áfangastað og lokaðu svo lotunni
Prófaðu áfangastað sem stefnan leyfir og einn sem hún ætti að hafna, því virk áframsending sannar aðeins að hlustunin virki og ekkert meira. Forritið sér upprunavistfangið sem SSH-þjónninn velur, og það er ekki gönguvistfang fartölvunnar þinnar. Þar sem fjarlægi endinn skráir tengingar eftir uppruna, er sá munur fyrstur til að skoða þegar beiðni er hafnað.
Stöðvaðu lotuna í gegnum ferlið sem á hana, í stað þess að drepa ótengda skel. Staðfestu svo að hlustunin sé farin, því port sem svarar enn er lota sem þú lokaðir í raun ekki. Fjarlægðu aðeins milliþjónastillinguna sem þessi æfing kynnti, og láttu restina af stillingum forritsins í friði. Ómannaður skjár sem heldur áframsendingarreglu er ekki þjónusta, og varanlegur milliþjónn þarf samþykkt lífsferli, ekki gleymdan glugga.
ss -ltn | grep 1080
Bilanir sem þetta fyrirkomulag getur ekki lagað
Sum einkenni benda beint á takmörkin hér að ofan, og að þekkja þau snemma sparar síðdegi í milliþjónagreiningu. Taflan tengir það sem þú sérð við það sem það þýðir venjulega. Hvað sem er í síðasta dálki er hönnunarspurning, ekki stillingarvilla.
| 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 |
Fyrstu þrjár raðirnar eru þær sem fólk greinir rangt, því hver þeirra framleiðir tengingartilraun í stað villu um milliþjóninn sjálfan. Nafn sem leysist á fartölvunni segir ekkert um leysi þjónsins, og bilunin er frekar lesin sem vandamál með skírteini eða tímamörk. Forrit sem nota aðeins UDP standa utan hönnunarinnar, ekki brotin innan hennar, og enginn auka ssh-valkostur breytir því. Vafraröðin er venjulega áminningin um að milliþjónastillingar gilda fyrir hvert forrit. Síðasta röðin er ástæðan fyrir því að lokaprófið er til: port sem hlustar enn þýðir að eitthvað annað á það núna.