Setup Cloudflare Tunnel
Apa itu Cloudflare Tunnel?
Cloudflare Tunnel (dulu bernama Argo Tunnel) adalah cara untuk mengekspos server lokal ke internet tanpa perlu membuka port di firewall atau melakukan port forwarding di router.
Perbandingan: Tunnel vs Port Forwarding
| Aspek | Port Forwarding | Cloudflare Tunnel |
|---|---|---|
| Buka port di firewall | ✅ Ya | ❌ Tidak perlu |
| IP publik statis | ✅ Diperlukan | ❌ Tidak perlu |
| SSL/TLS | ❌ Manual | ✅ Otomatis |
| Proteksi DDoS | ❌ Tidak | ✅ Ya |
| Hide IP asli | ❌ Tidak | ✅ Ya |
| Konfigurasi | Sederhana | Sedang |
| Cocok untuk | Lab lokal, testing | Production, production-like |
Instalasi cloudflared
Di Linux (Ubuntu/Debian)
# Download dan install cloudflared
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o /tmp/cloudflared.deb
sudo dpkg -i /tmp/cloudflared.deb
# Verifikasi
cloudflared version
Atau via Package Manager
# Download binary langsung
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
sudo mv cloudflared-linux-amd64 /usr/local/bin/cloudflared
sudo chmod +x /usr/local/bin/cloudflared
Login & Autentikasi
cloudflared tunnel login
Perintah ini akan:
- Membuka browser untuk login ke akun Cloudflare
- Meminta izin akses ke domain yang kamu kelola
- Menyimpan sertifikat di
~/.cloudflared/cert.pem
tipJika bekerja di server tanpa browser (SSH), gunakan
cloudflared tunnel loginlalu buka URL yang muncul di browser lokalmu.
Membuat Tunnel Baru
# Buat tunnel dengan nama
cloudflared tunnel create nama-tunnel-ku
# Output contoh:
# Created tunnel nama-tunnel-ku with id abc123-def456-...
# Credentials file created at: /home/user/.cloudflared/abc123-def456-....json
Melihat Daftar Tunnel
cloudflared tunnel list
Output:
ID NAME STATUS
abc123-def456-7890-aaaa-bbbbcccc nama-tunnel-ku active
xyz789-... tunnel-lama inactive
Konfigurasi Ingress Rules
Buat file config.yml di
~/.cloudflared/config.yml:
tunnel: abc123-def456-7890-aaaa-bbbbcccc
credentials-file: /home/user/.cloudflared/abc123-def456-7890-aaaa-bbbbcccc.json
ingress:
# Service 1: Web app di port 8080
- hostname: app.domain.com
service: http://vuln.cybersecurity.or.id
# Service 2: API di port 3000
- hostname: api.domain.com
service: http://localhost:3000
# Service 3: SSH via tunnel
- hostname: ssh.domain.com
service: ssh://localhost:22
# Service 4: TCP generic (database)
- hostname: db.domain.com
service: tcp://localhost:3306
# Default fallback - 404 jika tidak ada hostname yang cocok
- service: http_status:404
Multi-Service dalam Satu Tunnel
Kamu bisa mengekspos banyak service dalam satu tunnel seperti contoh
di atas. Cukup atur hostname berbeda untuk setiap
service.
tipGunakan
http_status:404sebagai ingress terakhir untuk mencegah akses ke service yang tidak terdaftar.
Validasi Konfigurasi
cloudflared tunnel validate --config ~/.cloudflared/config.yml
Routing DNS
Setelah tunnel aktif, arahkan DNS domain ke tunnel:
# Route subdomain ke tunnel
cloudflared tunnel route dns nama-tunnel-ku app.domain.com
cloudflared tunnel route dns nama-tunnel-ku api.domain.com
cloudflared tunnel route dns nama-tunnel-ku ssh.domain.com
Ini secara otomatis membuat record DNS CNAME di
Cloudflare yang mengarah ke
*.nama-tunnel-ku.cfargotunnel.com.
Menjalankan Tunnel
Manual (Testing)
cloudflared tunnel run nama-tunnel-ku
Sebagai Systemd Service (Auto-start)
# Install service systemd
sudo cloudflared service install
# Atau buat manual
sudo cloudflared tunnel install --name nama-tunnel-ku --config ~/.cloudflared/config.yml
Lalu kelola seperti service biasa:
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared
sudo systemctl restart cloudflared
sudo systemctl stop cloudflared
Melihat Log
sudo journalctl -u cloudflared -f
Atau jika ingin log lebih detail:
cloudflared tunnel run nama-tunnel-ku --loglevel debug
Perintah Penting
| Perintah | Deskripsi |
|---|---|
cloudflared tunnel list |
Lihat semua tunnel |
cloudflared tunnel create <nama> |
Buat tunnel baru |
cloudflared tunnel delete <nama> |
Hapus tunnel |
cloudflared tunnel cleanup <nama>
|
Bersihkan DNS records yang tidak terpakai |
cloudflared tunnel info <nama> |
Detail tunnel |
cloudflared tunnel route dns <nama> <domain>
|
Route DNS ke tunnel |
cloudflared tunnel run <nama> |
Jalankan tunnel |
cloudflared tunnel validate -c config.yml
|
Validasi konfigurasi |
cloudflared tunnel login |
Login ke Cloudflare |
cloudflared tunnel token <nama> |
Dapatkan token tunnel |
Troubleshooting
1. Error 502 Bad Gateway
Artinya cloudflared berhasil terhubung ke Cloudflare, tapi service lokal tidak merespon.
# Cek apakah service lokal berjalan
curl http://vuln.cybersecurity.or.id
# Cek log tunnel
sudo journalctl -u cloudflared -f --no-pager | grep -i error
Penyebab umum:
- Service lokal mati atau crash
- Bind address service hanya ke
127.0.0.1- harus ke0.0.0.0 - Port salah di config.yml
2. Tunnel Down / Tidak Bisa Connect
# Cek status tunnel
cloudflared tunnel list
# Restart service
sudo systemctl restart cloudflared
# Cek koneksi internet
ping -c 3 1.1.1.1
3. DNS Tidak Merespon
# Verifikasi record DNS
dig app.domain.com +short
# Cek routing tunnel
cloudflared tunnel route dns nama-tunnel-ku app.domain.com
# Route ulang jika perlu
4. SSL Error di Browser
Pastikan di Cloudflare Dashboard:
- SSL/TLS → Overview set ke Full (strict)
- SSL/TLS → Edge Certificates pastikan ada certificate untuk domainmu
5. Permission Denied pada Credentials File
# Pastikan file credentials terbaca oleh user yang menjalankan cloudflared
chmod 600 ~/.cloudflared/*.json
Multiple Tunnels untuk Service Berbeda
Kadang lebih baik menggunakan tunnel terpisah untuk environment berbeda:
# Tunnel untuk production
cloudflared tunnel create production-tunnel
# Tunnel untuk staging
cloudflared tunnel create staging-tunnel
Masing-masing punya config.yml dan systemd service
sendiri.
Kesimpulan
Cloudflare Tunnel adalah solusi modern untuk mengekspos service lokal ke internet dengan aman, tanpa ribet setup firewall, port forwarding, atau sertifikat SSL manual.
Keuntungan utama:
- ✅ Tidak perlu buka port di firewall
- ✅ SSL otomatis dari Cloudflare
- ✅ Proteksi DDoS bawaan
- ✅ Hidden IP asli server
- ✅ Bisa expose banyak service dengan satu tunnel
Workflow cepat untuk memulai:
# 1. Install
sudo dpkg -i cloudflared.deb
# 2. Login
cloudflared tunnel login
# 3. Buat tunnel
cloudflared tunnel create tunnel-ku
# 4. Konfigurasi (edit ~/.cloudflared/config.yml)
# 5. Route DNS
cloudflared tunnel route dns tunnel-ku app.domain.com
# 6. Install & start service
sudo cloudflared service install
sudo systemctl enable --now cloudflared
Dengan Cloudflare Tunnel, lab lokal kamu bisa diakses dari mana saja dengan aman dan mudah!