MySQL localhost lewat VPN: tetap berarti proses lokal
Basis data yang disebut aplikasi sebagai localhost ada di server, bukan di laptop Anda. Gunakan listener privat atau penerusan SSH, lalu paksa klien memakai TCP.
Aplikasi di server kantor terhubung ke MySQL di localhost, Anda menyalin nama host itu ke klien desktop, dan koneksinya gagal atau membuka basis data lain. VPN tidak mengubah arti kata itu: localhost tetap merujuk ke mesin yang menjalankan klien. VPN memindahkan paket, bukan antarmuka. Putuskan titik akhir mana yang harus dicapai laptop sebelum Anda menyentuh rute.
Langkah 1: putuskan titik akhir mana yang harus dicapai laptop
Kedua rancangan sah dan menjawab pertanyaan berbeda. Akses langsung berarti basis data mendengarkan di alamat privat yang bisa dicapai terowongan, dan laptop terhubung ke alamat itu. Akses diteruskan berarti basis data tetap di loopback dan sesi SSH membawa port ke mesin Anda. Pilih satu dengan sengaja, karena mencampurnya menghasilkan koneksi yang berfungsi karena alasan yang salah.
Untuk akses langsung, dapatkan nama atau alamat privat host basis data itu sendiri beserta portnya dari pihak yang mengelolanya. Alamat gateway VPN bukan alamat basis data kecuali mesinnya sama. Lalu pastikan listener benar-benar terikat ke antarmuka itu, karena rute ke antarmuka tidak membuat listener di sana.
Langkah 2: teruskan port hanya jika listener tetap lokal
Jika basis data harus tetap hanya di loopback, teruskan lewat SSH dan ikat ujung lokal ke loopback juga. Alamat ikat di kiri milik laptop Anda; target di kanan ditafsirkan dari sisi server SSH, seperti yang dijelaskan referensi OpenSSH. Membalik kedua peran itu adalah alasan umum penerusan tampak berfungsi tetapi tidak terhubung ke apa pun.
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:13306:127.0.0.1:3306 [email protected]
ss -ltn 'sport = :13306'
Jika SSH mendarat di host lompat alih-alih host basis data, loopback di kanan merujuk ke host lompat itu, dan target harus diubah ke alamat yang bisa dicapai host tersebut. ExitOnForwardFailure menangkap kegagalan membentuk penerusan, tetapi tidak membuktikan bahwa koneksi berikutnya ke target berhasil. Biarkan pemeriksaan kunci host menyala, dan jangan tawarkan port penerusan ke seluruh LAN Anda dengan mengikatnya ke semua antarmuka.
Berhenti jika basis data harus tetap hanya di loopback dan Anda tidak bisa memakai SSH. Maka akses langsung adalah rancangan yang salah, bukan konfigurasi yang perlu dipaksakan.
Langkah 3: paksa klien memakai TCP
Di Unix, klien MySQL yang diberi localhost memilih soket Unix secara bawaan, jadi mengubah port saja bisa membuatnya mencari soket yang tidak ada hubungannya dengan penerusan Anda. Gunakan protokol TCP eksplisit dan alamat loopback agar klien membuka koneksi ke port penerusan Anda.
mysql --protocol=TCP --host=127.0.0.1 --port=13306 --user=DB_USER --password
Opsi kata sandi tanpa nilai akan bertanya alih-alih menaruh rahasia di baris perintah, dan itulah kebiasaan yang layak dipertahankan. Alat lain punya sakelar sendiri untuk pembedaan yang sama, dan sebagian driver juga memperlakukan localhost secara khusus. Periksa apa yang dilakukan klien Anda alih-alih menganggap tanda itu ikut terbawa. Akun basis data juga perlu izin yang cocok dengan sumber yang dilihat server, yaitu host penerusan, bukan laptop Anda.
Berhenti jika alat itu tidak bisa dipaksa memakai TCP. Maka gunakan klien lain, atau gunakan akses langsung ke listener privat.
Langkah 4: buktikan titik akhir mana yang sebenarnya Anda capai
Tanyakan ke server apa yang menurutnya koneksi itu. Variabel nama host, port, dan soket memberi tahu apakah Anda datang lewat TCP dan listener mana yang menjawab, dan daftar koneksi menunjukkan alamat sumber yang dicatat server. Bukti itu lebih berguna daripada perubahan rute lagi.
mysql --protocol=TCP -h 127.0.0.1 -P 13306 -u DB_USER -p -e "SELECT @@hostname, @@port, @@socket"
Catat titik akhir mana yang Anda coba: soket Unix lokal, port penerusan Anda, atau listener privat. Ketiga kegagalan itu punya perbaikan berbeda, dan mengubah rute VPN saat klien masih berbicara dengan localhost yang salah adalah usaha sia-sia. Simpan juga autentikasi SSH dan autentikasi basis data secara terpisah di catatan, karena kegagalan di satu terlihat seperti kegagalan di yang lain dari klien desktop. Lalu hapus penerusan itu setelah selesai.
Daftar periksa berakhir ketika Anda bisa menyebutkan titik akhir, protokol klien, alamat sumber yang dilihat server, dan izin yang mengizinkannya. Empat fakta, dan masalah koneksi berikutnya memakan beberapa menit alih-alih satu sore.