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 опциясы муну өзгөртпөйт. Браузер сабы прокси жөндөөлөрү ар бир колдонмо үчүн өзүнчө экенин эске салат. Акыркы сап жабуу текшерүүсүнүн эмне үчүн бар экенин көрсөтөт: дагы эле угуп турган порт ага азыр башка нерсе ээ экенин билдирет.