Reverse Proxy Gratis dengan HTTPS Otomatis: Panduan Cloudflare Tunnel

· Setup

Masalah yang Diwali Reverse Proxy

Kamu punya 5 service di rumah: n8n di port 5678, Nextcloud di 8080, blog di 9000. Semuanya hanya bisa diakses dari jaringan lokal.

Opsi biasa:

  • Port forwarding di router: perlu IP publik (banyak ISP Indonesia sekarang pakai CGNAT, jadi tidak punya)
  • VPS + Nginx: perlu server VPS, biaya Rp30-50 ribu/bulan
  • Cloudflare Tunnel: gratis, tanpa buka port, tanpa IP publik

Yang terakhir ini yang paling masuk akal untuk homelab rumahan.

Cara Kerja Cloudflare Tunnel

Internet → Cloudflare Edge (HTTPS) → Tunnel → service lokal kamu

Cloudflare punya connection ke server kamu yang selalu terbuka (outbound). Trafik masuk dari Cloudflare, diteruskan lewat koneksi itu. Resultnya: tidak ada port yang perlu dibuka di router sama sekali.

Step 1: Install Cloudflared

Di server Ubuntu:

curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared

Step 2: Login dan Buat Tunnel

cloudflared tunnel login

Perintah ini membuka browser, kamu login ke akun Cloudflare, pilih domain yang mau dipakai.

Buat tunnel:

cloudflared tunnel create homelab

Step 3: Konfigurasi Ingress

Buat file ~/.cloudflared/config.yml:

tunnel: homelab
credentials-file: /home/user/.cloudflared/<TUNNEL_ID>.json

ingress:
  - hostname: blog.domainmu.id
    service: http://localhost:9000
  - hostname: n8n.domainmu.id
    service: http://localhost:5678
  - service: http_status:404

Baris terakhir wajib ada. Tanpa itu, tunnel akan menolak semua request yang tidak cocok rule.

Step 4: DNS Record

cloudflared tunnel route dns homelab blog.domainmu.id
cloudflared tunnel route dns homelab n8n.domainmu.id

Perintah ini otomatis bikin DNS record di Cloudflare.

Step 5: Jalankan sebagai Service

sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

Cara Update Ingress Tanpa Restart Tunnel

Kalau pakai file config lokal, setiap perubahan butuh sudo systemctl restart cloudflared.

Alternatif yang lebih nyaman: buat tunnel di dashboard Cloudflare dan pakai token-based config. Dengan token, perubahan ingress bisa dilakukan lewat dashboard dan langsung berlaku tanpa restart.

tunnel: <TUNNEL_ID>
credentials-file: 

Tips Stability

Gunakan protokol yang benar. Default Cloudflare Tunnel pilih QUIC (UDP 7844). Kalau jaringanmu memblokir UDP, paksa HTTP/2:

protocol: http2

Pantau dengan log journal:

sudo journalctl -u cloudflared -f

Jangan lupa warp-routing kalau kamu butuh akses ke private network (misal iSCSI atau NAS yang tidak di-expose ke publik). Tapi hati-hati: ini membuat server kamu bisa menjangkau semua range IP private dalam jaringan tersebut.

Security Checklist

  • Pakai token-based, jangan commit credentials JSON ke git
  • Set Cloudflare Access untuk service yang butuh login (n8n, Nextcloud)
  • Jangan expose service tanpa autentikasi ke publik
  • Cek access log nginx untuk traffic yang tidak dikenal

Kesimpulan

Cloudflare Tunnel mengubahamodel Homelab: dari “hanya bisa diakses dari rumah” jadi “dijangkau dari mana saja dengan HTTPS” tanpa biaya bulanan dan tanpa membuka port. Untuk homelab rumahan, ini hampir selalu pilihan terbaik.