VPN-iniz üzərindən SOCKS proksisi kimi SSH dinamik yönləndirməsi
Yalnız SOCKS danışan tətbiqin adi VPN-də proksi son nöqtəsi yoxdur. İki keçid, bir loopback dinləyicisi və SSH serverinin özünün etməli olduğu ad axtarışı.
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 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 |
İ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.