Kalau kamu menjalankan VPS sebagai gerbang — misalnya meneruskan koneksi dari internet ke server lain, ke container, atau ke ujung tunnel WireGuard — kamu butuh port forwarding di level Linux dengan iptables. Banyak panduan memberi perintah copy-paste tanpa menjelaskan kenapa, sehingga saat tidak jalan pengguna buntu. Artikel ini menjelaskan tiga konsep inti (PREROUTING, POSTROUTING, MASQUERADE) plus contoh lengkap dan cara membuat rules-nya permanen. IP pada contoh memakai alamat dokumentasi (RFC 5737) — ganti dengan IP-mu.
Konsep: PREROUTING, POSTROUTING, MASQUERADE
iptables memproses paket lewat beberapa "chain". Untuk port forwarding, dua yang penting ada di tabel NAT. PREROUTING diproses sebelum routing diputuskan — di sinilah kita pakai DNAT untuk mengubah alamat/port tujuan paket yang masuk (misalnya: paket ke port 8080 di IP publik dialihkan ke server internal). POSTROUTING diproses setelah routing, tepat sebelum paket keluar — di sinilah MASQUERADE/SNAT mengubah alamat sumber agar paket balasan tahu jalan pulang. Tanpa POSTROUTING yang benar, paket sampai ke tujuan tapi balasannya tersesat.
| Chain | Kapan Diproses | Fungsi Utama |
|---|---|---|
| PREROUTING | Sebelum routing | DNAT — ubah tujuan paket masuk |
| POSTROUTING | Sebelum paket keluar | MASQUERADE/SNAT — ubah sumber |
| FORWARD (filter) | Saat transit | Izinkan/blok paket diteruskan |
Langkah 1: Aktifkan IP Forwarding
Secara default, kernel Linux tidak meneruskan paket antar-interface. Aktifkan dulu, kalau tidak semua rule forwarding tidak akan berfungsi.
# Aktifkan sekarang
sysctl -w net.ipv4.ip_forward=1
# Buat permanen (bertahan setelah reboot)
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
Langkah 2: Aturan Port Forwarding (DNAT + MASQUERADE)
Skenario: VPS dengan IP publik 203.0.113.10 meneruskan port 8080 ke server internal 10.10.0.2 (misalnya ujung tunnel WireGuard). Interface keluar VPS adalah eth0.
# ══════════════════════════════════════════
# cekipsaya.com — network intelligence tools
# gratis untuk Indonesia: cek IP, DNS, ping,
# traceroute, blacklist check & more.
# ══════════════════════════════════════════
# DNAT: paket masuk ke port 8080 -> teruskan ke 10.10.0.2:8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 \
-j DNAT --to-destination 10.10.0.2:8080
# MASQUERADE: ubah sumber agar balasan kembali lewat VPS
iptables -t nat -A POSTROUTING -p tcp -d 10.10.0.2 --dport 8080 \
-j MASQUERADE
# Izinkan FORWARD (kalau policy forward = DROP)
iptables -A FORWARD -p tcp -d 10.10.0.2 --dport 8080 -j ACCEPT
Langkah 3: Verifikasi Aturan
# Lihat semua rule di tabel NAT (dengan counter)
iptables -t nat -L -n -v
# Lihat rule FORWARD
iptables -L FORWARD -n -v
Langkah 4: Bikin Rules Permanen (iptables-persistent)
Rule iptables hilang saat reboot. Agar bertahan, simpan dengan paket iptables-persistent (Debian/Ubuntu) yang otomatis memuat ulang rules saat boot.
# Install (akan menawarkan menyimpan rules saat ini)
apt update && apt install -y iptables-persistent
# Simpan ulang setelah ada perubahan rules
netfilter-persistent save
Seorang admin menyiapkan VPS untuk meneruskan port web ke server di balik tunnel WireGuard. Ia menambah rule DNAT di PREROUTING dengan benar, tapi koneksi selalu timeout. Setelah dicek, ternyata paket sampai ke server internal namun balasannya keluar lewat gateway server itu sendiri, bukan kembali ke VPS — karena tidak ada rule MASQUERADE di POSTROUTING. Setelah menambah MASQUERADE, forwarding langsung jalan. Pelajaran: DNAT saja tidak cukup, balasan harus diurus.
FAQ — Pertanyaan yang Sering Ditanyakan
Kesimpulan
Port forwarding dengan iptables adalah fondasi yang dipakai VPS untuk meneruskan koneksi internet ke layanan lain — termasuk ke ujung tunnel WireGuard. Tiga konsep kuncinya: DNAT di chain PREROUTING (ubah tujuan paket masuk), MASQUERADE di POSTROUTING (agar balasan kembali lewat jalur benar), dan ip_forward diaktifkan. Jangan lupa membuat rules permanen dengan iptables-persistent agar tidak hilang saat reboot. Konsep ini langsung dipakai di panduan VPS + WireGuard untuk bypass CGNAT.