VPN-іңіз арқылы SOCKS проксиі ретінде SSH динамикалық бағыттау
Тек SOCKS тілінде сөйлейтін қолданбаның қарапайым VPN-де прокси соңғы нүктесі жоқ. Екі секіріс, бір loopback тыңдаушысы және SSH сервері өзі жасауы керек бір атау іздеу.
Тек SOCKS тілінде сөйлейтін қолданбаның қарапайым VPN-де сөйлесетін ештеңесі жоқ, өйткені туннель пакеттерді тасымалдайды, ал қолданба прокси соңғы нүктесін қалайды. OpenSSH бұл нүктені рұқсат иесі рұқсат еткенде бере алады, себебі динамикалық бағыттау бір SSH сессиясын жергілікті проксиге айналдырады. Одан кейін екі секірісті бөлек ұстау керек: SSH хостқа жететін туннель және сол хост әрі қарай ашатын байланыс. Оларды ажырату бұл құрылымның неге жұмыс істейтінін және оның ешқашан не істемейтінін түсіндіреді.
SSH тыңдаушысы неге айналады және неге айналмайды
Динамикалық бағыттау SSH клиентін жергілікті тыңдауға және қосылғанның бәрімен SOCKS4 немесе SOCKS5 сөйлеуге мәжбүр етеді. Әр сұраныс мақсатты атайды және SSH сервері әрі қарайғы байланысты ашады, сондықтан мақсатты іздеу алыс жақта болуы мүмкін. Бұл қолданба деңгейіндегі TCP бағыттау, бүкіл құрылғы үшін VPN емес. Ол UDP бірлестігін де, ICMP-ді де, прокси параметрлерін мүлдем елемейтін қолданбаларға ештеңе де тасымалдамайды. SSH серверінен қолданбаға дейінгі секіріс те сіздің туннеліңіздің ішінде емес, бұл мақсат трафикті тек белгілі желілерден қабылдағанда маңызды.
Алғышарттар нақты: SSH хостқа маршрут, рұқсат етілген тіркелгі, тексерілген сервер хост кілті және бағыттауға рұқсат. Олардың ешқайсысын прокси жасамайды, ал соңғысы әдетте бірінші болып жетіспейді. Басқа нәрсені жөндеуден бұрын төртеуін де растаңыз, өйткені клиент жағынан сәтсіздік бірдей көрінеді, қайсысы жетіспесе де.
Оны loopback-те айқын портпен іске қосыңыз
Пайдаланылмаған жергілікті портты таңдап, мекенжайды қалдырмаудың орнына оны loopback-ке айқын байлаңыз. Төмендегі үш опцияның әрқайсысы бір себеппен бар.
ssh -D 127.0.0.1:1080 -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
[email protected]
-N қашықтағы команданы өткізіп жібереді, ал -T псевдотерминалды өткізіп жібереді, сондықтан сессия тек бағыттау үшін бар. ExitOnForwardFailure тыңдаушы жасалмаған кезде клиентті шығарады, сіз сұраған бағыттаусыз жұмыс істеудің орнына. ControlPath=none сессияны өз бағыттауларын қосуы мүмкін бар мультиплекстік байланыстан тыс ұстайды. Loopback тыңдаушыны LAN-нан тыс ұстайды, бірақ ортақ машинада бұл рұқсат шекарасы емес, өйткені басқа жергілікті процестер де оған жете алады. OpenSSH клиентінің анықтамасы осы флагтардың бәрін құжаттайды, ал loopback туралы ескерту тыңдайтын сокеттің не екенінен шығады.
Атауларды проксидің ішінен жіберіңіз, айналасынан емес
SOCKS5 клиенті мақсатты өзі шеше алады немесе проксиден соны сұрай алады, және бұл таңдау қай шешушінің жауап беретінін анықтайды. socks5h арқылы curl хост атауын прокси арқылы жібереді, сондықтан іздеу SSH серверінде болады. Қарапайым socks5 арқылы ноутбук алдымен шешеді және тек байланыс жүреді, бұл атау ішкі болғанда мақсатты үнсіз жояды. Төмендегі сұраныс проксисіз тізімді де тазалайды, сондықтан мұрагерлік NO_PROXY мәні оны проксидің айналасынан алып өте алмайды.
curl -sS --noproxy '' --proxy socks5h://127.0.0.1:1080 https://app.corp.example/health
Сертификатты тексеру және қолданбаның өз кіруі әлі де қолданылады, өйткені прокси екеуін де алмастырмайды. Екі іздеу қалады: ноутбук рұқсат етілген VPN және DNS жолымен SSH хостқа жетуі керек, ал SSH сервері қолданба атауын өзі шешуі керек. Екіншісін кез келген трафик проксиден өтпес бұрын жеке тексеруге болады.
ssh [email protected] getent hosts app.corp.example
Бір рұқсат етілген мақсатты дәлелдеңіз, содан кейін сессияны жабыңыз
Саясат рұқсат ететін мақсатты және ол бас тартуы тиіс мақсатты сынаңыз, өйткені жұмыс істейтін бағыттау тек тыңдаушының жұмыс істейтінін дәлелдейді, одан артық емес. Қолданба SSH сервері таңдаған бастау мекенжайын көреді, және ол сіздің ноутбугіңыздың туннель мекенжайы емес. Алыс жақ байланыстарды бастауы бойынша журналдаса, сұраныс қабылданбағанда ең алдымен сол айырмашылықты тексеру керек.
Сессияны оған ие процеске сүйеніп тоқтатыңыз, байланысы жоқ shell-ді өлтіру арқылы емес. Содан кейін тыңдаушы кеткенін растаңыз, өйткені әлі жауап беретін порт — шын мәнінде жаппаған сессияңыз. Тек осы жаттығу енгізген прокси параметрін алып тастаңыз, қолданба конфигурациясының қалғанын тыныш қалдырыңыз. Бағыттау ережесін ұстап тұрған қадағалаусыз терминал қызмет емес, және тұрақты проксиге бекітілген өмірлік цикл қажет, ұмытылған терезе емес.
ss -ltn | grep 1080
Бұл құрылым түзе алмайтын ақаулар
Кейбір белгілер тікелей жоғарыдағы шектеулерге сілтейді, және оларды ерте тану прокси жөндеуінің бір түстен кейінгі уақытын үнемдейді. Кесте көргеніңізді оның әдетте нені білдіретінімен байланыстырады. Соңғы бағандағының бәрі конфигурация қатесі емес, дизайн сұрағы.
| 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 |
Алғашқы үш жолды адамдар қате диагноз қояды, өйткені әрқайсысы прокси туралы қате емес, байланыс әрекетін тудырады. Ноутбукте шешілетін атау сервердің шешушісі туралы ештеңе айтпайды, ал сәтсіздік оның орнына сертификат немесе уақыт шегі мәселесі ретінде оқылады. Тек UDP-мен жұмыс істейтін қолданбалар дизайнның ішінде бұзылмаған, оның сыртында тұр, және ешқандай қосымша ssh опциясы мұны өзгертпейді. Браузер жолы прокси параметрлері әр қолданба үшін бөлек екенін еске салады. Соңғы жол жабу тексерісінің не үшін бар екенін көрсетеді: әлі тыңдап тұрған порт енді оған басқа нәрсенің ие екенін білдіреді.