Тек 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 seeWhat it usually meansWhere to look
The app connects and nothing followsIt ignores proxy settings entirelyIts own network settings, not the SSH session
A name resolution error for the destinationThe SSH server cannot resolve itServer resolver and search domains
A UDP-only application failsDynamic forwarding carries TCP onlyThis arrangement cannot serve it
curl works, the browser does notThe browser is not using the socks5h endpointBrowser proxy configuration
The listener answers after the session endedAnother process owns port 1080The ss output, then the owning process

Алғашқы үш жолды адамдар қате диагноз қояды, өйткені әрқайсысы прокси туралы қате емес, байланыс әрекетін тудырады. Ноутбукте шешілетін атау сервердің шешушісі туралы ештеңе айтпайды, ал сәтсіздік оның орнына сертификат немесе уақыт шегі мәселесі ретінде оқылады. Тек UDP-мен жұмыс істейтін қолданбалар дизайнның ішінде бұзылмаған, оның сыртында тұр, және ешқандай қосымша ssh опциясы мұны өзгертпейді. Браузер жолы прокси параметрлері әр қолданба үшін бөлек екенін еске салады. Соңғы жол жабу тексерісінің не үшін бар екенін көрсетеді: әлі тыңдап тұрған порт енді оған басқа нәрсенің ие екенін білдіреді.

Қатысты мақалалар