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

Холбоотой нийтлэлүүд