Aplikace na kancelářském serveru se připojuje k MySQL na localhost, vy zkopírujete toto jméno hostitele do desktopového klienta a spojení buď selže, nebo otevře jinou databázi. VPN nezměnila význam toho slova: localhost pořád označuje stroj, na kterém běží klient. VPN přemístila pakety, ne rozhraní. Rozhodněte, ke kterému koncovému bodu má notebook dojít, než se dotknete trasy.

Krok 1: rozhodněte, ke kterému koncovému bodu má notebook dojít

Obě řešení jsou legitimní a odpovídají na různé otázky. Přímý přístup znamená, že databáze naslouchá na privátní adrese, kam se tunel dostane, a notebook se připojuje na tuto adresu. Přesměrovaný přístup znamená, že databáze zůstává na loopbacku a relace SSH přenáší port na váš stroj. Vyberte jedno vědomě, protože jejich smíchání dává spojení, které funguje ze špatného důvodu.

Pro přímý přístup si vyžádejte vlastní privátní jméno nebo adresu hostitele databáze a jeho port od toho, kdo ji spravuje. Adresa VPN brány není adresou databáze, pokud nejde o stejný stroj. Pak ověřte, že listener je skutečně navázán na toto rozhraní, protože trasa k rozhraní na něm listener nevytvoří.

Krok 2: přesměrujte port jen tehdy, když listener zůstane místní

Pokud má databáze zůstat jen na loopbacku, přesměrujte ji přes SSH a místní konec navažte také na loopback. Adresa navázání vlevo patří vašemu notebooku; cíl vpravo se vykládá ze strany SSH serveru, jak popisuje reference OpenSSH. Záměna těchto dvou rolí je obvyklým důvodem, proč přesměrování vypadá, že funguje, ale nic nenaváže.

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

Pokud SSH přistane na odskokovém hostiteli místo hostitele databáze, loopback vpravo označuje odskokového hostitele a cíl se musí změnit na adresu, na kterou se tento hostitel dostane. ExitOnForwardFailure zachytí selhání navázání přesměrování, ale nedokazuje, že pozdější spojení k cíli uspějí. Ponechte ověřování klíče hostitele zapnuté a nenabízejte port přesměrování celé své LAN tím, že jej navážete na všechna rozhraní.

Zastavte se, pokud má databáze zůstat jen na loopbacku a nemůžete použít SSH. Přímý přístup je pak špatné řešení, ne konfigurace k vynucení.

Krok 3: přinuťte klienta na TCP

V Unixu klient MySQL, kterému zadáte localhost, ve výchozím stavu zvolí unixový socket, takže změna pouze portu ho může nechat hledat socket, který s vaším přesměrováním nemá nic společného. Použijte explicitní protokol TCP a adresu loopback, aby klient otevřel spojení na váš port přesměrování.

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

Volba hesla bez hodnoty se ptá, místo aby tajemství vložila na příkazový řádek, a to je zvyk, který stojí za to dodržet. Jiné nástroje mají pro stejný rozdíl vlastní přepínač a některé ovladače také zacházejí s localhost zvlášť. Ověřte, co váš klient dělá, místo abyste předpokládali, že se přepínač přenesl. Účet databáze také potřebuje oprávnění, které odpovídá zdroji, který server vidí, a to je hostitel přesměrování, ne váš notebook.

Zastavte se, pokud nástroj nelze přinutit na TCP. Pak použijte jiného klienta nebo přímý přístup k privátnímu listeneru.

Krok 4: dokažte, ke kterému koncovému bodu jste skutečně došli

Zeptejte se serveru, čím si myslí, že spojení je. Proměnné jména hostitele, portu a socketu řeknou, zda jste přišli přes TCP a který listener odpověděl, a seznam spojení ukazuje zdrojovou adresu, kterou server zaznamenal. Ten důkaz je užitečnější než další změna trasy.

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

Zaznamenejte, který koncový bod jste zkusili: místní unixový socket, svůj port přesměrování nebo privátní listener. Tyto tři neúspěchy mají různé opravy a měnit trasu VPN, zatímco klient ještě mluví se špatným localhostem, je zbytečná práce. V poznámkách držte odděleně i autentizaci SSH a autentizaci databáze, protože selhání v jedné vypadá z desktopového klienta jako selhání v druhé. Potom přesměrování po dokončení odstraňte.

Kontrolní seznam končí, když dokážete pojmenovat koncový bod, protokol klienta, zdrojovou adresu, kterou server viděl, a oprávnění, které to dovolilo. Čtyři fakta a další problém se spojením zabere minuty místo odpoledne.

Související články