Panduan Praktis SSH Tunnels: Local dan Remote Port Forwarding untuk Developer
AW
Axel W

Dipublikasikan 30 Juni 2026

Panduan Praktis SSH Tunnels: Local dan Remote Port Forwarding untuk Developer

SSH adalah salah satu protokol paling fundamental yang masih digunakan secara luas di era cloud native dan AI agent saat ini. Dari sekian banyak fitur SSH, SSH Tunnels menjadi andalan banyak developer dan DevOps engineer untuk menyelesaikan masalah konektivitas tanpa perlu tool tambahan. Artikel ini akan membahas cara kerja local dan remote port forwarding dengan contoh praktis yang bisa langsung dicoba.

Menurut tutorial dari iximiuz Labs, SSH tunnels memungkinkan kita mengakses layanan di jaringan privat melalui mesin bastion publik, membuka port localhost dari VM remote di browser lokal, atau bahkan mengekspos server lokal ke internet. Semua ini bisa dilakukan dengan satu baris command.

Apa itu SSH Port Forwarding

SSH port forwarding adalah fitur yang memungkinkan traffic jaringan dialihkan melalui koneksi SSH yang terenkripsi. Ada dua mode utama: local port forwarding (mengakses layanan remote dari mesin lokal) dan remote port forwarding (mengekspos layanan lokal ke mesin remote). Keduanya menggunakan opsi -L dan -R pada command SSH.

Local Port Forwarding: Akses Layanan Remote dari Lokal

Mode ini paling sering digunakan. Skenarionya: ada layanan yang berjalan di localhost atau interface privat dari mesin remote, dan Anda ingin mengaksesnya dari laptop. Contoh umumnya termasuk mengakses database privat, web app internal, atau port container yang tidak dipublish ke publik.

Command dasarnya adalah:

ssh -L [local_addr:]local_port:remote_addr:remote_port [user@]sshd_addr

Artinya, SSH client di mesin lokal akan mendengarkan pada local_port. Setiap traffic ke port tersebut akan diteruskan ke remote_addr:remote_port yang dicapai dari mesin remote. Berikut contoh praktisnya:

# Akses database PostgreSQL di remote server dari laptop
ssh -f -N -L 5433:localhost:5432 user@203.0.113.30

# Sekarang koneksi ke localhost:5433 akan diteruskan ke remote:5432
psql -h localhost -p 5433 -U dbuser -d mydb

Opsi -f menjalankan SSH di background, sedangkan -N mencegah eksekusi command remote. Kombinasi ini ideal untuk tunneling jangka panjang.

Remote Port Forwarding: Ekspos Layanan Lokal ke Remote

Remote port forwarding adalah kebalikan dari local forwarding. Skenarionya: Anda punya layanan di laptop atau jaringan lokal, dan ingin mesin remote (atau siapa pun yang bisa mengakses mesin remote) dapat mengaksesnya.

Command dasarnya:

ssh -R [bind_address:]remote_port:local_addr:local_port [user@]gateway_addr

Contoh praktis: mengekspos web server development di laptop ke VPS publik:

# Ekspos localhost:3000 ke port 8080 di remote server
ssh -f -N -R 8080:localhost:3000 user@vps.example.com

Perlu diperhatikan, binding ke non-loopback address di remote memerlukan konfigurasi GatewayPorts yes pada file konfigurasi SSH server. Tanpa ini, port hanya akan bind ke 127.0.0.1 di sisi remote.

Dynamic Port Forwarding dengan SOCKS Proxy

Selain forwarding ke satu tujuan fixed, SSH juga bisa menjadi SOCKS proxy dinamis menggunakan opsi -D. Ini sangat berguna ketika Anda perlu mengakses banyak layanan di jaringan privat melalui satu bastion.

# Jalankan SOCKS proxy di port 1080
ssh -f -N -D 1080 user@bastion.example.com

# Gunakan curl melalui proxy
curl --socks5-hostname localhost:1080 http://internal-service.private/

Dengan satu command ini, semua host dan port yang bisa dijangkau bastion menjadi accessible dari laptop Anda tanpa perlu setup tunnel terpisah untuk masing-masing layanan.

Cheat Sheet dan Mnemonik

Untuk menghafal command dengan mudah, gunakan mnemonik berikut:

  • ssh -L: Local membuka port di mesin lokal, mengarah ke tujuan remote.

  • ssh -R: Remote membuka port di mesin remote, mengarah ke tujuan lokal.

  • ssh -D: Dynamic, membuat SOCKS proxy di mesin lokal.

Sisi kiri command (setelah -L atau -R) selalu menunjukkan sisi yang membuka port baru. Urutannya selalu bind_address:port:target_address:target_port.

Troubleshooting SSH Tunnels

Meski konsepnya sederhana, SSH tunnels sering membuat frustrasi saat tidak berfungsi sesuai harapan. Berikut masalah umum dan solusinya:

  • Connection refused pada local port. Pastikan tidak ada service lain yang sudah mendengarkan di port tersebut. Gunakan lsof -i :PORT untuk mengecek.

  • Bind address failed. Jika Anda mencoba bind ke 0.0.0.0 agar tunnel bisa diakses dari mesin lain di jaringan lokal, pastikan opsi GatewayPorts diaktifkan di client config atau gunakan -L 0.0.0.0:port:....

  • Timeout saat mengakses remote service. Cek firewall di mesin remote. Port forwarding SSH berjalan di layer aplikasi, jadi firewall di level network masih bisa memblok traffic.

Keamanan dan Best Practice

Meski SSH terenkripsi, tunneling tetap membuka jalur baru ke jaringan Anda. Beberapa aturan keamanan yang harus diikuti:

  • Gunakan key-based authentication dan matikan password login di server SSH.

  • Batasi user yang bisa melakukan port forwarding melalui opsi AllowTcpForwarding di konfigurasi server.

  • Pantau tunnel yang aktif dengan ss -tlnp atau lsof -i secara berkala.

  • Jangan expose port forwarding ke publik tanpa firewall rules yang ketat.

Studi Kasus: Akses Database Staging dari Laptop

Bayangkan Anda adalah backend engineer yang perlu men-debug data di database staging yang berjalan di private subnet AWS. Security team tidak membuka port 5432 ke publik, tetapi Anda punya akses SSH ke bastion host di public subnet. Dengan local port forwarding, Anda bisa:

ssh -f -N -L 15432:staging-db.internal:5432 ec2-user@bastion.company.com

Sekarang Anda bisa membuka database client dan connect ke localhost:15432 seolah-olah database berjalan di laptop Anda. Setelah selesai, jangan lupa kill tunnel dengan kill pada PID SSH tersebut atau gunakan ssh -O exit -L 15432:... jika menggunakan ControlMaster.

Kesimpulan

SSH tunnels adalah tool powerful yang sudah tersedia di hampir setiap sistem Unix-like. Dengan memahami local, remote, dan dynamic forwarding, Anda bisa mengatasi berbagai skenario konektivitas tanpa memerlukan VPN atau tool third-party. Pastikan untuk selalu memeriksa konfigurasi GatewayPorts dan firewall di kedua sisi sebelum troubleshooting koneksi yang gagal.

Sumber utama artikel ini berasal dari iximiuz Labs. Dokumentasi resmi SSH Academy juga tersedia di ssh.com untuk referensi lebih lanjut.