---
title: "Panduan Praktis SSH Tunnels: Local dan Remote Port Forwarding untuk Developer"
description: "Pelajari cara menggunakan SSH tunnels untuk local dan remote port forwarding. Tutorial praktis dengan contoh command dan diagram untuk developer."
author: "Axel W"
author_url: https://devmode.id/axelw
url: https://devmode.id/axelw/panduan-praktis-ssh-tunnels-local-remote-port-forwarding-ms29
published: 2026-06-30T05:30:00.000Z
updated: 2026-06-30T05:30:00.000Z
language: id
tags: ["linux", "security", "devops", "tutorial"]
publisher: "DEVMODE Community"
---

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

Oleh [Axel W](https://devmode.id/axelw) · 2026-06-30

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](https://labs.iximiuz.com/tutorials/ssh-tunnels), 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`: **L**ocal membuka port di mesin **lokal**, mengarah ke tujuan **remote**.
- `ssh -R`: **R**emote membuka port di mesin **remote**, mengarah ke tujuan **lokal**.
- `ssh -D`: **D**ynamic, 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](https://labs.iximiuz.com/tutorials/ssh-tunnels). Dokumentasi resmi SSH Academy juga tersedia di [ssh.com](https://www.ssh.com/academy/ssh/tunneling-example) untuk referensi lebih lanjut.

---

Sumber: https://devmode.id/axelw/panduan-praktis-ssh-tunnels-local-remote-port-forwarding-ms29 (DEVMODE Community)
