Bypass NAT Router: Akses Home Server dari Internet Pakai FRP

Apa itu FRP dan Mengapa Kita Butuh Ini?

FRP (Fast Reverse Proxy) adalah tool yang membantu kita mengakses komputer/server di rumah dari internet, padahal kita tidak punya IP publik atau berada di belakang router/NAT.

Analogi sederhana: Bayangkan rumah kamu ada di gang yang tidak punya alamat jelas. FRP seperti menyewa kantor pos (VPS) yang punya alamat jelas, lalu semua surat yang datang ke kantor pos akan diteruskan ke rumah kamu.

Yang kita butuhkan:

  • VPS dengan IP publik (sebagai "kantor pos")
  • Home Server di rumah (komputer yang ingin diakses)

Architecture Overview

User → VPS (xxx.xxx.xxx.xxx) → Home Router → Home Server (192.168.2.115)
           ↑ frps (server)                        ↑ frpc (client)
Architecture overview
https://gabrieltanner.org/blog/port-forwarding-frp/

Penjelasan:

  • frps = FRP Server, jalan di VPS
  • frpc = FRP Client, jalan di Home Server
  • User akan connect ke Server, lalu Server forward traffic ke Client

Step 1: Install frp di VPS

Mengapa di VPS dulu?

Karena VPS adalah "gerbang" kita ke internet. Server harus siap dulu sebelum client connect.

Login ke VPS kamu via SSH:

ssh [email protected]

Download FRP versi terbaru:

# Pindah ke folder temporary
cd /tmp

# Download FRP (check versi terbaru di: https://github.com/fatedier/frp/releases)
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz

# Extract file
tar -xzf frp_0.65.0_linux_amd64.tar.gz

# Masuk ke folder hasil extract
cd frp_0.65.0_linux_amd64

# Copy binary ke system directory (agar bisa dijalankan dari mana saja)
cp frps /usr/local/bin/

# Copy config template ke /etc
cp frps.toml /etc/frps.toml

# Cek apakah sudah terinstall
frps -v

Penjelasan:

  • /usr/local/bin/ → tempat program yang bisa dijalankan global
  • /etc/ → tempat menyimpan file konfigurasi
  • frps -v → cek versi, kalau keluar nomor versi berarti install sukses

Step 2: Konfigurasi frps di VPS

Mengapa perlu config?

Config file memberitahu FRP bagaimana cara kerja, port apa yang dipakai, dan keamanan seperti apa.

Edit config file:

nano /etc/frps.toml

Paste config ini:

# frps.toml - Server Config

bindAddr = "0.0.0.0"
bindPort = 7000

# TAMBAHKAN INI (penting untuk HTTP/HTTPS proxy!)
vhostHTTPPort = 80
vhostHTTPSPort = 443

# Dashboard (Web GUI)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "passwordkamu"

# Authentication token
auth.method = "token"
auth.token = "rahasia_token_12345"

# Log
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 7

Penjelasan setiap baris:

  • bindAddr → IP yang dipakai server (0.0.0.0 = semua interface)
  • bindPort = 7000 → Port untuk komunikasi antara server dan client
  • vhostHTTPPort = 80 → Port untuk HTTP traffic (website)
  • vhostHTTPSPort = 443 → Port untuk HTTPS traffic (website dengan SSL)
  • webServer.port = 7500 → Port untuk dashboard monitoring
  • auth.token → Password rahasia yang harus sama di client dan server (seperti kunci pintu)
  • log → Menyimpan log untuk troubleshooting

⚠️ PENTING: Ganti password dan token dengan kombinasi yang kuat!

Cara save file:

  • Tekan Ctrl+O (save)
  • Tekan Enter
  • Tekan Ctrl+X (exit)

Step 3: Buat systemd service untuk frps

Mengapa perlu systemd service?

Agar FRP server jalan otomatis setiap kali VPS reboot. Tanpa ini, kamu harus manual jalanin setiap kali VPS restart.

Buat file service:

nano /etc/systemd/system/frps.service

Paste ini:

[Unit]
Description=frp server
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frps -c /etc/frps.toml
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

Penjelasan:

  • After=network.target → Tunggu sampai network ready dulu
  • Restart=on-failure → Auto restart kalau crash
  • ExecStart → Command untuk jalanin FRP server
  • WantedBy=multi-user.target → Aktif saat boot

Save file, lalu jalankan commands ini:

# Reload systemd (biar tahu ada service baru)
systemctl daemon-reload

# Enable auto-start saat boot
systemctl enable frps

# Start service sekarang
systemctl start frps

# Cek status (harusnya "active (running)")
systemctl status frps

Step 4: Buka firewall di VPS

Mengapa perlu buka port?

Firewall seperti satpam VPS yang blokir semua koneksi masuk. Kita perlu kasih izin port tertentu agar bisa diakses dari luar.

Kalau pakai UFW (Ubuntu/Debian):

ufw allow 7000/tcp comment 'frp server'
ufw allow 7500/tcp comment 'frp dashboard'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw allow 2222/tcp comment 'SSH tunnel'

Atau kalau pakai iptables:

iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
iptables -A INPUT -p tcp --dport 7500 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

Penjelasan port:

  • 7000 → Komunikasi FRP server-client
  • 7500 → Dashboard monitoring
  • 80/443 → Website kamu
  • 2222 → SSH tunnel ke home server

Step 5: Test Dashboard

Buka browser, ketik: http://xxx.xxx.xxx.xxx:7500

Login dengan:

  • Username: admin
  • Password: (sesuai yang kamu set di config)

Atau test pakai curl:

curl -u 'admin:passwordkamu' http://xxx.xxx.xxx.xxx:7500

Kalau berhasil, kamu akan lihat dashboard kosong (normal, karena belum ada client connect).

Dashboard frp
https://github.com/fatedier/frp/

Step 6: Install frp di Home Server

Sekarang giliran Home Server

SSH ke home server kamu:

ssh [email protected]

Install FRP (sama seperti di VPS):

cd /tmp
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
tar -xzf frp_0.65.0_linux_amd64.tar.gz
cd frp_0.65.0_linux_amd64

sudo cp frpc /usr/local/bin/
sudo cp frpc.toml /etc/frpc.toml

frpc -v

Step 7: Konfigurasi frpc di Home Server

Ini config paling penting!

Config ini memberitahu client: "connect ke server mana, dan forward traffic apa saja".

sudo nano /etc/frpc.toml

Paste config ini:

# frpc.toml - Client Config

serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 7000

# Authentication (harus sama dengan server!)
auth.method = "token"
auth.token = "rahasia_token_12345"

# Log
log.to = "/var/log/frpc.log"
log.level = "info"
log.maxDays = 7

# Proxies

# HTTP Web (port 80 di home → port 80 di VPS)
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["xxx.xxx.xxx.xxx"]

# HTTPS Web (port 443 di home → port 443 di VPS)
[[proxies]]
name = "web-https"
type = "https"
localIP = "127.0.0.1"
localPort = 443
customDomains = ["xxx.xxx.xxx.xxx"]

# SSH (port 22 di home → port 2222 di VPS)
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2222

Atau jika menggunakan domain

serverAddr = "45.77.169.158"
serverPort = 7000

auth.method = "token"
auth.token = "rahasia_token_12345"

log.to = "/var/log/frpc.log"
log.level = "info"
log.maxDays = 7

# Forward all HTTP traffic to NPM
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = [
  "domainku.com",
  "*.domainku.com",
]

# (Optional) If you want HTTPS FRP passthrough to NPM
[[proxies]]
name = "web-https"
type = "https"
localIP = "127.0.0.1"
localPort = 443
customDomains = [
  "domainku.com",
  "*.domainku.com",
]

# SSH Tunnel
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2201

Penjelasan:

  • serverAddr → IP VPS kamu
  • auth.tokenHARUS SAMA dengan token di server
  • [[proxies]] → Definisi tunnel yang mau dibuat

Penjelasan setiap proxy:

  1. Proxy "web":
    • Akses http://xxx.xxx.xxx.xxx → diteruskan ke port 80 home server
  2. Proxy "web-https":
    • Akses https://xxx.xxx.xxx.xxx → diteruskan ke port 443 home server
  3. Proxy "ssh":
    • SSH ke xxx.xxx.xxx.xxx:2222 → diteruskan ke port 22 home server

⚠️ Catatan: Kalau web kamu jalan di Docker, pastikan port 80/443 sudah di-expose!


Step 8: Buat systemd service untuk frpc

Buat service agar client jalan otomatis:

sudo nano /etc/systemd/system/frpc.service

Paste:

[Unit]
Description=frp client
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frpc -c /etc/frpc.toml
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

Jalankan:

sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
sudo systemctl status frpc

Step 9: Verify Koneksi

Cek logs di VPS:

tail -f /var/log/frps.log

Harusnya muncul log seperti ini:

[I] [service.go:xxx] client login info: ip [192.168.x.x]
[I] [proxy.go:xxx] proxy added: [web]
[I] [proxy.go:xxx] proxy added: [web-https]
[I] [proxy.go:xxx] proxy added: [ssh]

Cek logs di Home Server:

sudo tail -f /var/log/frpc.log

Buka Dashboard:

http://xxx.xxx.xxx.xxx:7500

Kamu harusnya lihat:

  • ✅ Client connected
  • ✅ 3 proxies active (web, web-https, ssh)

Step 10: Test Akses

Test HTTP:

curl http://xxx.xxx.xxx.xxx

Harusnya dapat response dari website di home server kamu!

Test SSH:

ssh -p 2222 [email protected]

Harusnya connect ke home server kamu!


Troubleshooting

Kalau tidak connect:

  1. Cek status service: systemctl status frps dan systemctl status frpc
  2. Cek logs: tail -f /var/log/frps.log dan tail -f /var/log/frpc.log
  3. Pastikan token sama di server dan client
  4. Pastikan firewall tidak block port 7000

Kalau HTTP tidak bisa diakses:

  1. Pastikan web server jalan di home: curl http://localhost:80
  2. Cek logs FRP
  3. Pastikan customDomains benar

Kesimpulan

Sekarang home server kamu bisa diakses dari internet melalui VPS!

Yang sudah kita setup:

  • ✅ FRP Server di VPS
  • ✅ FRP Client di Home Server
  • ✅ HTTP/HTTPS tunnel
  • ✅ SSH tunnel
  • ✅ Auto-start service
  • ✅ Dashboard monitoring

Selamat mencoba! 🚀