Port forwarding dg NAT

Ceritanya saya punya mesin, katakanlah bernama C, yang cuma bisa diakses dari dalam jaringan lokal. Saya juga punya mesin bernama M yang bisa diakses dari jaringan lokal DAN juga dari internet. Nah, berhubung si C bisa diakses oleh M, tentu saja saya bisa mengakses C dari internet dg menghubungi M terlebih dahulu.

Cara yang biasa saya lakukan adalah dg membuat koneksi ke M melalui SSH. Setelah di dalam M, saya buka lagi koneksi ke C, lagi-lagi melalui SSH. Intinya saya harus menyiapkan koneksi ke M via SSH terlebih dahulu sebelum saya bisa menghubungi si C. Caranya sendiri pernah saya tuliskan sebelumnya: port forwarding dengan SSH atau dengan membuat socks proxy.

Lama-lama saya malas juga membuat koneksi SSH ke M setiap saya ingin menghubungi C. Mengingat saya memiliki akses administrator di mesin M, akhirnya saya mencoba cara lain, yaitu port forwarding dg NAT alias Network Address Translation. Cara kerja NAT akan saya bahas di lain waktu (kalau ingat, kalau lagi gak malas, kalau mau :P) jadi skr lgs ke inti solusinya saja.

Pertama-tama, aktifkan dulu IP forwarding. (oh iya.. perintah2 ini dikerjakan di mesin M)

# echo 1 > /proc/sys/net/ipv4/ip_forward

Pastikan perintah di atas dijalankan oleh root.. atau versi dengan sudo nya adalah seperti berikut.

$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Kalau IP forwarding sudah diatur, mari kita buat NAT, atau lebih tepatnya DNAT alias Destination NAT berhubung yang akan dibelokkan itu adalah alamat tujuan koneksi.

$ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --source 1.2.3.4 --dport 12345 -j DNAT --to 10.20.30.40:22

Saya ingin membuat NAT yg terbatas dari segi alamat sumber. Dalam contoh di atas, hanya koneksi dari alamat 1.2.3.4 yang akan dialihkan. Selain dari itu, koneksi akan berhenti sampai di sini saja. Selain itu hanya koneksi yg nyampe di eth0 dg protokol tcp di port 12345 yang akan dilayani.

Jika ada koneksi yg sesuai, koneksi ini lalu akan dibelokkan ke mesin dg IP 10.20.30.40, yaitu mesin C, pada port 22.

Singkatnya, jika ada mesin dg IP 1.2.3.4 membuat koneksi ke eth0 di mesin M dg protokol tcp dg 12345, maka koneksi akan dibelokkan ke mesin dg IP 10.20.30.40 pada port 22.

Nah kalau sudah begini, saya dari rumah (yg pake IP 1.2.3.4) bisa membuat koneksi ke mesin C melalui si M tanpa harus membuat koneksi SSH dulu ke M.

rumah$ ssh M -p 12345

Perintah SSH di atas akan langsung terhubung dg mesin C walau koneksi ditujukan ke M karena si M akan membelokkan koneksi ke C.

Selain tuk mengakses C dg SSH langsung dari komputer rumah, yg seperti ini saya pakai juga tuk keperluan lain.. misalnya..

Di mesin M ini saya juga punya sebuah instance virtual machine (VM) dengan VirtualBox. Saya mengaktifkan layanan virtual desktop (dengan RDP) di VirtualBox ini berhubung mesin M ini ada entah-di-mana sehingga saya tidak punya akses fisik langsung. Antara VM dengan host-nya (si M) sudah terjalin hubungan baik melalui jaringan host-only di VirtualBox. Kalau saya ingin mengakses si VM maka, seperti tadi, saya harus mengakses M terlebih dahulu. Dengan melakukan port forwarding, saya bisa mengakses si VM dari C scr langsung.