Кеңсе серверіндегі қолданба MySQL-ге localhost арқылы қосылады, сіз сол хост атауын жұмыс үстелі клиентіне көшіресіз, ал қосылым не сәтсіз аяқталады, не басқа дерекқор ашылады. VPN сөздің мағынасын өзгерткен жоқ: localhost әлі де клиентті іске қосатын машинаны білдіреді. VPN пакеттерді жылжытты, интерфейстерді емес. Маршрутқа тиюден бұрын ноутбук қай соңғы нүктеге жетуі керегін шешіңіз.

1-қадам: ноутбук қай соңғы нүктеге жетуі керегін шешіңіз

Екі жоба да заңды және әртүрлі сұрақтарға жауап береді. Тікелей қолжетімділік дерекқордың туннель жететін жеке мекенжайдан тыңдайтынын, ал ноутбуктің сол мекенжайға қосылатынын білдіреді. Жіберілетін қолжетімділік дерекқордың loopback-те қалатынын және SSH сессиясы портты сіздің машинаңызға апаратынын білдіреді. Біреуін әдейі таңдаңыз, өйткені оларды араластыру қате себеппен жұмыс істейтін қосылым береді.

Тікелей қолжетімділік үшін дерекқор хостының өз жеке атауын немесе мекенжайын және оның портын оны басқаратын адамнан алыңыз. VPN шлюзінің мекенжайы дерекқордың мекенжайы емес, егер бұл сол машина болмаса. Содан кейін тыңдаушының шынымен сол интерфейске байланғанын растаңыз, өйткені интерфейске маршрут онда тыңдаушы жасамайды.

2-қадам: портты тыңдаушы жергілікті болып қалса ғана жіберіңіз

Дерекқор тек loopback-те қалуы керек болса, оны SSH арқылы жіберіңіз және жергілікті ұшын да loopback-ке байлаңыз. Сол жақтағы байлау мекенжайы сіздің ноутбукіңізге тиесілі; оң жақтағы мақсат SSH серверінің жағынан түсіндіріледі, OpenSSH анықтамасы сипаттағандай. Осы екі рөлді кері аудару — жіберу жұмыс істеп тұрғандай көрініп, бірақ ештеңеге қосылмауының әдеттегі себебі.

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

Егер SSH дерекқор хостының орнына секіру хостына қонса, оң жақтағы loopback секіру хостын білдіреді, ал мақсатты сол хост жете алатын мекенжайға өзгерту керек. ExitOnForwardFailure жіберуді орнатудағы сәтсіздікті ұстайды, бірақ мақсатқа кейінгі қосылымдардың сәтті болатынын дәлелдемейді. Хост кілтін тексеруді қосулы ұстаңыз және жіберу портын барлық интерфейстерге байлап, бүкіл LAN-ға ұсынбаңыз.

Дерекқор тек loopback-те қалуы керек болса және SSH қолдана алмасаңыз, тоқтаңыз. Онда тікелей қолжетімділік қате жоба, мәжбүрлейтін конфигурация емес.

3-қадам: клиентті TCP-ге мәжбүрлеңіз

Unix-те localhost берілген MySQL клиенті әдепкі бойынша Unix сокетін таңдайды, сондықтан тек портты өзгерту оны сіздің жіберуіңізге қатысы жоқ сокетті іздеуге қалдыруы мүмкін. Айқын TCP протоколы мен loopback мекенжайын қолданып, клиентті жіберу портыңызға қосылым ашуға мәжбүрлеңіз.

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

Мәні жоқ құпиясөз опциясы құпияны пәрмен жолына қоюдың орнына сұрайды, және бұл сақтауға тұрарлық әдет. Басқа құралдардың сол айырмашылық үшін өз ажыратқышы бар, ал кейбір драйверлер localhost-ты ерекше қарастырады. Жалауша өтті деп болжаудың орнына клиентіңіздің не істейтінін тексеріңіз. Дерекқор тіркелгісіне сервер көретін көзге сәйкес келетін рұқсат керек, ал ол сіздің ноутбукіңіз емес, жіберу хосты.

Құралды TCP-ге мәжбүрлеу мүмкін болмаса, тоқтаңыз. Онда басқа клиентті немесе жеке тыңдаушыға тікелей қолжетімділікті қолданыңыз.

4-қадам: шын мәнінде қай соңғы нүктеге жеткеніңізді дәлелдеңіз

Серверден қосылымды не деп санайтынын сұраңыз. Хост атауы, порт және сокет айнымалылары TCP арқылы келгеніңізді және қай тыңдаушы жауап бергенін айтады, ал қосылымдар тізімі сервер жазған көз мекенжайын көрсетеді. Бұл дәлел тағы бір маршрут өзгерісінен пайдалырақ.

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

Қай соңғы нүктені қолданып көргеніңізді жазыңыз: жергілікті Unix сокеті, жіберу портыңыз немесе жеке тыңдаушы. Осы үш сәтсіздіктің түзетуі әртүрлі, ал клиент әлі қате localhost-пен сөйлесіп тұрғанда VPN маршрутын өзгерту — бос әрекет. Жазбаларда SSH аутентификациясы мен дерекқор аутентификациясын бөлек ұстаңыз, өйткені жұмыс үстелі клиентінен біріндегі сәтсіздік екіншісіндегі сәтсіздікке ұқсайды. Содан кейін жұмысты бітіргенде жіберуді алып тастаңыз.

Тізім соңғы нүктені, клиент протоколын, сервер көрген көз мекенжайын және оған рұқсат берген рұқсатты атай алғаныңызда аяқталады. Төрт факт, ал келесі қосылым мәселесі түстен кейін емес, бірнеше минут алады.

Қатысты мақалалар