Yalnız SOCKS danışan tətbiqin adi VPN-də danışacağı heç nə yoxdur, çünki tunel paketlər daşıyır, tətbiq isə proksi son nöqtəsi istəyir. OpenSSH bu son nöqtəni giriş sahibi icazə verdikdə təmin edə bilər, çünki dinamik yönləndirmə bir SSH sessiyasını yerli proksiyə çevirir. Sonra düzgün saxlanmalı iki keçid var: SSH hostuna çatan tunel və həmin hostun sonra açdığı bağlantı. Bunları ayırmaq həm bu quruluşun niyə işlədiyini, həm də nəyi heç vaxt etməyəcəyini izah edir.

SSH dinləyicisinin nə olub nə olmadığı

Dinamik yönləndirmə SSH müştərisini yerli olaraq dinləməyə və qoşulan hər şeylə SOCKS4 və ya SOCKS5 danışmağa məcbur edir. Hər sorğu bir təyinat adlandırır və SSH serveri sonrakı bağlantını açır, buna görə təyinat axtarışı uzaq tərəfdə baş verə bilər. Bu, tətbiq səviyyəsində TCP yönləndirməsidir, bütün cihaz üçün VPN deyil. O, UDP assosiasiyası, ICMP və proksi tənzimləmələrini tamamilə görməzdən gələn tətbiqlər üçün heç nə daşımır. SSH serverindən tətbiqə keçid də tunelinizin içində deyil, bu, təyinat trafiki yalnız tanınmış şəbəkələrdən qəbul etdikdə vacibdir.

İlkin şərtlər realdır: SSH hostuna marşrut, icazəli hesab, təsdiqlənmiş server host açarı və yönləndirmə icazəsi. Bunların heç birini proksi yaratmır və sonuncusu adətən ilk çatışmayan olur. Başqa hər şeyi sazlamadan əvvəl dördünü də təsdiqləyin, çünki hansının olmamasından asılı olmayaraq nasazlıq müştəri tərəfindən eyni görünür.

Onu açıq portla loopback üzərində başladın

İstifadə olunmayan yerli port seçin və ünvanı boş buraxmaq əvəzinə onu açıq şəkildə loopback-ə bağlayın. Aşağıdakı üç seçim hər biri bir səbəbdən mövcuddur.

ssh -D 127.0.0.1:1080 -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
  [email protected]

-N uzaq əmri, -T isə psevdo-terminalı atlayır, beləliklə sessiya yalnız yönləndirmə üçün mövcuddur. ExitOnForwardFailure dinləyici yaradıla bilmədikdə müştərinin çıxmasına səbəb olur, əvəzində istədiyiniz yönləndirmə olmadan işləmir. ControlPath=none sessiyanı öz yönləndirmələrini əlavə edə bilən mövcud multipleks bağlantıdan kənarda saxlayır. Loopback dinləyicini LAN-dan kənarda saxlayır, lakin paylaşılan maşında bu, avtorizasiya sərhədi deyil, çünki digər yerli proseslər də ona çata bilər. OpenSSH müştəri sənədi bütün bu açarları sənədləşdirir və loopback xəbərdarlığı dinləyən soketin nə olduğundan irəli gəlir.

Adları proksinin ətrafından deyil, onun içindən göndərin

SOCKS5 müştərisi təyinatı özü həll edə və ya proksidən bunu istəyə bilər və bu seçim hansı həlledicinin cavab verəcəyini müəyyən edir. socks5h ilə curl host adını proksidən keçirir, beləliklə axtarış SSH serverində baş verir. Sadə socks5 ilə noutbuk əvvəlcə həll edir və yalnız bağlantı gedir, bu da ad daxili olduqda məqsədi səssizcə puça çıxarır. Aşağıdakı sorğu həm də proksisiz siyahını təmizləyir, beləliklə miras qalmış NO_PROXY dəyəri onu proksinin ətrafından yönləndirə bilməz.

curl -sS --noproxy '' --proxy socks5h://127.0.0.1:1080 https://app.corp.example/health

Sertifikat yoxlaması və tətbiqin öz girişi hələ də qüvvədədir, çünki proksi heç birini əvəz etmir. İki axtarış qalır: noutbuk SSH hostuna icazəli VPN və DNS yolu ilə çatmalıdır və SSH serveri tətbiq adını özü həll etməlidir. İkincisi hər hansı trafik proksidən keçməmişdən əvvəl tək başına sınaqdan keçirilə bilər.

ssh [email protected] getent hosts app.corp.example

İcazə verilən bir təyinatı sübut edin, sonra sessiyanı bağlayın

Siyasətin icazə verdiyi və imtina etməli olduğu bir təyinatı sınayın, çünki işləyən yönləndirmə yalnız dinləyicinin işlədiyini sübut edir, başqa heç nəyi deyil. Tətbiq SSH serverinin seçdiyi mənbə ünvanını görür, bu isə noutbukunuzun tunel ünvanı deyil. Uzaq tərəf bağlantıları mənbəyə görə jurnal qeyd edirsə, sorğu rədd edildikdə ilk yoxlanmalı şey məhz bu fərqdir.

Sessiyanı əlaqəsiz bir shell öldürməklə deyil, ona sahib olan proses vasitəsilə dayandırın. Sonra dinləyicinin getdiyini təsdiqləyin, çünki hələ cavab verən port həqiqətən bağlamadığınız sessiyadır. Yalnız bu məşqin gətirdiyi proksi tənzimləməsini silin və tətbiq konfiqurasiyasının qalanını toxunulmaz buraxın. Yönləndirmə qaydası saxlayan nəzarətsiz terminal xidmət deyil və daimi proksi unudulmuş pəncərə deyil, təsdiqlənmiş həyat dövrü tələb edir.

ss -ltn | grep 1080

Bu quruluşun aradan qaldıra bilmədiyi nasazlıqlar

Bəzi simptomlar birbaşa yuxarıdakı məhdudiyyətlərə işarə edir və onları erkən tanımaq bir nahar vaxtı proksi sazlama işinə qənaət edir. Cədvəl gördüyünüzləri adətən nə demək olduğu ilə uyğunlaşdırır. Son sütundakı hər şey konfiqurasiya səhvi deyil, dizayn sualıdır.

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

İlk üç sətir insanların səhv diaqnoz qoyduğu sətirlərdir, çünki hər biri proksinin özü ilə bağlı xəta deyil, bağlantı cəhdi yaradır. Noutbukda həll olunan ad serverin həlledicisi barədə heç nə demir və nasazlıq əvəzində sertifikat və ya vaxt aşımı problemi kimi oxunur. Yalnız UDP ilə işləyən tətbiqlər dizaynın içində xarab deyil, onun xaricində dayanır və əlavə ssh seçimi bunu dəyişmir. Brauzer sətri proksi tənzimləmələrinin hər tətbiqə aid olduğunu xatırladan adi sətirdir. Son sətir bağlanma yoxlamasının niyə mövcud olduğunun cavabıdır: hələ dinləyən port artıq başqa bir şeyin sahibliyindədir.

Əlaqəli məqalələr