Reverse Proxy Gratis dengan HTTPS Otomatis: Panduan Cloudflare Tunnel
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.