Aplikácia na kancelárskom serveri sa pripája k MySQL na localhost, skopírujete toto meno hostiteľa do desktopového klienta a spojenie buď zlyhá, alebo otvorí inú databázu. VPN nezmenila význam toho slova: localhost stále označuje stroj, na ktorom beží klient. VPN presunula pakety, nie rozhrania. Rozhodnite, ku ktorému koncovému bodu má notebook dospieť, skôr než sa dotknete trasy.

Krok 1: rozhodnite, ku ktorému koncovému bodu má notebook dospieť

Obe riešenia sú legitímne a odpovedajú na rôzne otázky. Priamy prístup znamená, že databáza počúva na privátnej adrese, kam sa tunel dostane, a notebook sa pripája na túto adresu. Presmerovaný prístup znamená, že databáza zostáva na loopbacku a relácia SSH prenáša port na váš stroj. Vyberte jedno vedome, pretože ich miešanie dáva spojenie, ktoré funguje zo zlého dôvodu.

Pre priamy prístup si vyžiadajte vlastné privátne meno alebo adresu hostiteľa databázy a jeho port od toho, kto ju spravuje. Adresa VPN brány nie je adresou databázy, ak nejde o ten istý stroj. Potom overte, že listener je skutočne naviazaný na toto rozhranie, pretože trasa k rozhraniu na ňom listener nevytvorí.

Krok 2: presmerujte port len vtedy, keď listener zostane lokálny

Ak má databáza zostať len na loopbacku, presmerujte ju cez SSH a lokálny koniec naviažte tiež na loopback. Adresa naviazania vľavo patrí vášmu notebooku; cieľ vpravo sa vykladá zo strany SSH servera, ako opisuje referencia OpenSSH. Zámena týchto dvoch rolí je obvyklým dôvodom, prečo presmerovanie vyzerá, že funguje, ale nič nenaviaže.

ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:13306:127.0.0.1:3306 [email protected]
ss -ltn 'sport = :13306'

Ak SSH pristane na odskokovom hostiteľovi namiesto hostiteľa databázy, loopback vpravo označuje odskokového hostiteľa a cieľ sa musí zmeniť na adresu, na ktorú sa tento hostiteľ dostane. ExitOnForwardFailure zachytí zlyhanie pri nadviazaní presmerovania, ale nedokazuje, že neskoršie spojenia k cieľu uspejú. Ponechajte overovanie kľúča hostiteľa zapnuté a neponúkajte port presmerovania celej svojej LAN tým, že ho naviažete na všetky rozhrania.

Zastavte sa, ak má databáza zostať len na loopbacku a nemôžete použiť SSH. Potom je priamy prístup zlé riešenie, nie konfigurácia na vynútenie.

Krok 3: prinúťte klienta na TCP

V Unixe klient MySQL, ktorému zadáte localhost, predvolene zvolí unixový socket, takže zmena iba portu ho môže nechať hľadať socket, ktorý nemá nič spoločné s vaším presmerovaním. Použite explicitný protokol TCP a adresu loopback, aby klient otvoril spojenie na váš port presmerovania.

mysql --protocol=TCP --host=127.0.0.1 --port=13306 --user=DB_USER --password

Voľba hesla bez hodnoty sa pýta, namiesto toho aby tajomstvo vložila na príkazový riadok, a to je zvyk, ktorý stojí za to dodržať. Iné nástroje majú pre rovnaký rozdiel vlastný prepínač a niektoré ovládače tiež zaobchádzajú s localhost zvlášť. Overte, čo váš klient robí, namiesto toho aby ste predpokladali, že sa prepínač preniesol. Účet databázy tiež potrebuje oprávnenie, ktoré zodpovedá zdroju, ktorý server vidí, a to je hostiteľ presmerovania, nie váš notebook.

Zastavte sa, ak nástroj nemožno prinútiť na TCP. Potom použite iného klienta alebo priamy prístup k privátnemu listeneru.

Krok 4: dokážte, ku ktorému koncovému bodu ste skutočne dospeli

Opýtajte sa servera, čím si myslí, že spojenie je. Premenné mena hostiteľa, portu a socketu povedia, či ste prišli cez TCP a ktorý listener odpovedal, a zoznam spojení ukazuje zdrojovú adresu, ktorú server zaznamenal. Ten dôkaz je užitočnejší než ďalšia zmena trasy.

mysql --protocol=TCP -h 127.0.0.1 -P 13306 -u DB_USER -p -e "SELECT @@hostname, @@port, @@socket"

Zaznamenajte, ktorý koncový bod ste skúsili: lokálny unixový socket, svoj port presmerovania alebo privátny listener. Tieto tri zlyhania majú rôzne opravy a meniť trasu VPN, kým klient ešte hovorí s nesprávnym localhostom, je zbytočná práca. V poznámkach držte oddelene aj autentifikáciu SSH a autentifikáciu databázy, pretože zlyhanie v jednej vyzerá z desktopového klienta ako zlyhanie v druhej. Potom presmerovanie po dokončení odstráňte.

Kontrolný zoznam končí, keď dokážete pomenovať koncový bod, protokol klienta, zdrojovú adresu, ktorú server videl, a oprávnenie, ktoré to umožnilo. Štyri fakty a ďalší problém so spojením zaberie minúty namiesto popoludnia.

Súvisiace články