Untung pernah main SSH tunnelling dulu

Ahad, 14 September 2025, 1:30 am
Hampir² rosak network settings satu server kat ofis .
Ini cerita minggu lalu, berkenaan #docker bridge #networking & deploying app guna docker compose.
Saya ingat nak tulis pasal basic docker terlebih dulu, baru dapat faham pasal isu ini, tapi rasa macam banyak gambarajah nak dilukis, lain kali bila dah datang rajin barulah buat.
Saya nak deploy web app guna docker compose. Setiap docker compose baru yang di-up akan tambah satu bridge network untuk connect containers dalam docker ke network interface pada komputer. Network prefix untuk bridge network asal yang docker pakai ialah 172.17.0.0/16. Kemudian untuk setiap bridge network baru, akan ditambah nombor pada oktet kedua, jadi 172.18.0.0/16, kemudian 172.19.0.0/16 dan seterusnya.
Sekarang rujuk pada gambar di atas, ia adalah ringkasan network prefix yang dipakai kat ofis. Server² pakai LAN connection, prefix 192.168.0.0/24, manakala peranti yang bersambung pada WiFi guna prefix 172.20.0.0/16, sama macam yang digunakan docker bridge network.
Saya nak deploy web app ke satu development server, 192.168.0.219 (vm-219), yang dah beberapa kali up docker compose untuk staging environment. Bila run docker compose up
untuk web app baru ni, tiba² connection ke server putus. Saya ingat server tu down lepas deploy web app, jadi panik sebentar .
Kami ada satu lagi development server kat 192.168.0.220 (vm-220). Lepas check² segala connection status dari beberapa lokasi, klu yang saya perolehi:
- Dari laptop yang sambung guna WiFi, ping ke vm-219 ada response. Tapi bila cuba
ssh
, connection timed out. - Bila nak cuba access web app dari browser, pun tak dapat, connection timed out.
- Dari vm-220, dapat ping &
ssh
ke vm-219 tapi tak dapat pakai password yang disimpan.
Dapat connect ke vm-219 tu tandanya server tengah running, tak down, lega dah hilang panik .
Hipotesis saya berkaitan problem dengan network connection ini ialah: bila run docker compose up
, docker create satu bridge network yang guna prefix 172.20.0.0/16, sama dengan network prefix WiFi, yang mengakibatkan semua network trafik yang nak reply balik ke peranti kat WiFi network, akan pergi ke docker network bridge yang baru tu, sebab tu banyak connection timed out.
Sambungan ssh
dari laptop ke vm-219, saya dah setup public-key authentication. Dari vm-220 ke vm-219 pulak tak ada setup begitu, kena pakai password. Nak dapatkan password yang betul, minggu lalu ramai staf in-charge cuti, nak tanya mesti lambat dapat reply.
Jadi macam mana nak connect? Kalau dari laptop connect terus ke vm-219, akan berlaku connection timed out. Kalau dari vm-220 nak connect ke vm-219, tak tahu password pulak.
Kat sinilah ilmu tunnelling tu dimanfaatkan. Secara spesifiknya, SSH local port forwarding. Disebabkan vm-220 dapat connect terus ke vm-219, saya nak forwardkan local port 2022 ke vm-219 port 22 menerusi vm-220. Jadi dapatlah saya connect terus ke vm-219 dan gunakan public-key authentication untuk login.
Command yang digunakan adalah, pertama, untuk establish port forwarding connection:
ssh -L 2022:192.168.0.219:22 user@192.168.0.220
Kemudian, untuk masuk ke vm-219:
ssh -p 2022 user@localhost
Maka dapatlah login ke vm-219 dan check network route settings. Memang betul lah prefix yang docker network bridge tu yang kacau. Lepas delete bridge network tu kat docker & ip route
, barulah dapat connect seperti sedia kala.
14 September 2025
12 September 2025