VPN üzərindən MySQL localhost: yenə də yerli proses deməkdir
Tətbiqin localhost adlandırdığı verilənlər bazası serverdədir, noutbukda deyil. Şəxsi dinləyicidən və ya SSH ötürməsindən istifadə edin, sonra müştərini TCP-yə məcbur edin.
Ofis serverindəki tətbiq MySQL-ə localhost ünvanı ilə qoşulur, siz həmin host adını masaüstü müştəriyə köçürürsünüz və bağlantı ya uğursuz olur, ya da başqa verilənlər bazası açılır. VPN sözün mənasını dəyişməyib: localhost yenə də müştərini işlədən maşına işarə edir. VPN paketləri yerindən tərpətdi, interfeysləri yox. Marşruta toxunmazdan əvvəl noutbukun hansı son nöqtəyə çatmalı olduğunu qərarlaşdırın.
Addım 1: noutbukun hansı son nöqtəyə çatmalı olduğunu qərarlaşdırın
İki dizayn qanunidir və fərqli suallara cavab verir. Birbaşa giriş o deməkdir ki, verilənlər bazası tunelin çata bildiyi şəxsi ünvanda dinləyir və noutbuk həmin ünvana qoşulur. Ötürülən giriş o deməkdir ki, verilənlər bazası loopback-də qalır və SSH sessiyası portu sizin maşınınıza daşıyır. Birini qəsdən seçin, çünki onları qarışdırmaq yanlış səbəbdən işləyən bağlantı yaradır.
Birbaşa giriş üçün verilənlər bazası hostunun öz şəxsi adını və ya ünvanını və portunu onu idarə edəndən alın. VPN şlüzünün ünvanı verilənlər bazasının ünvanı deyil, məgər eyni maşındırsa. Sonra dinləyicinin həqiqətən həmin interfeysə bağlandığını təsdiqləyin, çünki interfeysə marşrut dinləyici yaratmır.
Addım 2: portu yalnız dinləyici yerli qalırsa ötürün
Verilənlər bazası yalnız loopback-də qalmalıdırsa, onu SSH ilə ötürün və yerli ucunu da loopback-ə bağlayın. Soldakı bağlama ünvanı noutbukunuza aiddir; sağdakı hədəf SSH serverinin tərəfindən şərh olunur, OpenSSH sənədi bunu təsvir etdiyi kimi. Bu iki rolu tərsinə çevirmək ötürmənin işləyir kimi görünüb heç nəyə qoşulmamasının adi səbəbidir.
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:13306:127.0.0.1:3306 [email protected]
ss -ltn 'sport = :13306'
SSH verilənlər bazası hostuna deyil, atlama hostuna düşürsə, sağdakı loopback atlama hostuna işarə edir və hədəf həmin hostun çata bildiyi ünvana dəyişməlidir. ExitOnForwardFailure ötürmənin qurulmamasını tutur, lakin hədəfə sonrakı bağlantıların uğurlu olduğunu sübut etmir. Host açarının yoxlanmasını açıq saxlayın və ötürmə portunu bütün interfeyslərə bağlayaraq bütün LAN-ınıza təqdim etməyin.
Verilənlər bazası yalnız loopback-də qalmalıdırsa və SSH istifadə edə bilmirsinizsə, dayanın. Birbaşa giriş onda yanlış dizayndır, məcbur ediləcək konfiqurasiya deyil.
Addım 3: müştərini TCP-yə məcbur edin
Unix-də localhost verilən MySQL müştərisi susmaya görə Unix soketi seçir, ona görə yalnız portu dəyişmək onu ötürmənizlə heç bir əlaqəsi olmayan soket axtarmağa buraxa bilər. Açıq TCP protokolunu və loopback ünvanını istifadə edərək müştərini ötürmə portunuza bağlantı açmağa vadar edin.
mysql --protocol=TCP --host=127.0.0.1 --port=13306 --user=DB_USER --password
Dəyərsiz parol seçimi sirri əmr sətrinə qoymaq əvəzinə sorğu verir və bu, saxlanmağa dəyər vərdişdir. Digər alətlərin eyni fərq üçün öz açarı var və bəzi sürücülər də localhost-a xüsusi yanaşır. Bayrağın keçdiyini fərz etmək əvəzinə müştərinizin nə etdiyini yoxlayın. Verilənlər bazası hesabı da serverin gördüyü mənbəyə uyğun icazə tələb edir, bu da noutbukunuz deyil, ötürmə hostudur.
Alət TCP-yə məcbur edilə bilmirsə, dayanın. Onda başqa müştəri istifadə edin və ya şəxsi dinləyiciyə birbaşa girişdən istifadə edin.
Addım 4: həqiqətən hansı son nöqtəyə çatdığınızı sübut edin
Serverdən soruşun ki, bağlantını nə hesab edir. Host adı, port və soket dəyişənləri TCP ilə gəlib-gəlmədiyinizi və hansı dinləyicinin cavab verdiyini bildirir, bağlantı siyahısı isə serverin qeyd etdiyi mənbə ünvanını göstərir. Bu sübut başqa bir marşrut dəyişikliyindən daha faydalıdır.
mysql --protocol=TCP -h 127.0.0.1 -P 13306 -u DB_USER -p -e "SELECT @@hostname, @@port, @@socket"
Hansı son nöqtəni sınadığınızı qeyd edin: yerli Unix soketi, ötürmə portunuz və ya şəxsi dinləyici. Bu üç uğursuzluğun düzəlişi fərqlidir və müştəri hələ yanlış localhost ilə danışarkən VPN marşrutunu dəyişmək boşa səydir. Qeydlərdə SSH autentifikasiyası ilə verilənlər bazası autentifikasiyasını da ayrı saxlayın, çünki masaüstü müştəridən birindəki uğursuzluq digərindəki uğursuzluq kimi görünür. Sonra işiniz bitəndə ötürməni silin.
Yoxlama siyahısı son nöqtəni, müştəri protokolunu, serverin gördüyü mənbə ünvanını və buna icazə verən icazəni adlandıra bildiyiniz zaman bitir. Dörd fakt, və növbəti bağlantı problemi bir günorta əvəzinə dəqiqələr alır.