Cloudflare Tunnel dari Nol: Membuat Subdomain hingga Routing ke Aplikasi Lokal
Cloudflare Tunnel merupakan solusi untuk mempublikasikan aplikasi yang berjalan di server lokal ke internet tanpa perlu membuka port, tanpa NAT, dan tanpa IP publik. Tunnel bekerja dengan membuat koneksi outbound dari server menuju jaringan Cloudflare, sehingga lebih aman dibandingkan melakukan port forwarding.
Pada artikel ini kita akan membahas langkah demi langkah mulai dari instalasi, membuat Tunnel, menghubungkan subdomain, hingga menjalankan beberapa aplikasi menggunakan satu Tunnel.
Arsitektur
Internet
│
▼
Cloudflare DNS
│
▼
Cloudflare Tunnel
│
(Encrypted Tunnel)
│
▼
cloudflared Service
│
┌────────────────┼────────────────┐
▼ ▼ ▼
localhost:8080 localhost:9000 localhost:8888
Spring API Grafana FastAPI
Contoh pada artikel ini menggunakan:
| Item | Nilai |
|---|---|
| Domain | nirantara.solutions |
| Tunnel | my-tunnel |
| API | api.nirantara.solutions |
| Monitoring | monitor.nirantara.solutions |
Mengapa Menggunakan Cloudflare Tunnel?
Beberapa keuntungan menggunakan Cloudflare Tunnel:
- Tidak perlu membuka port firewall
- Tidak memerlukan IP Public
- Tidak membutuhkan NAT atau Port Forwarding
- Seluruh komunikasi terenkripsi
- Dapat menggunakan HTTPS otomatis
- Mudah menghubungkan banyak aplikasi dengan satu Tunnel
- Mendukung Zero Trust dan Access Policy Cloudflare
Install cloudflared
AlmaLinux / Rocky Linux / RHEL
sudo dnf install \
https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
atau
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
sudo rpm -ivh cloudflared-linux-x86_64.rpm
Cek versi:
cloudflared --version
Login ke Cloudflare
Jalankan:
cloudflared tunnel login
Browser akan terbuka menuju halaman Cloudflare.
Pilih domain yang akan digunakan, misalnya:
nirantara.solutions
Apabila berhasil, akan muncul file:
~/.cloudflared/cert.pem
File ini digunakan untuk mengelola Tunnel dan DNS melalui CLI.
Membuat Tunnel
Misalnya Tunnel akan diberi nama:
my-tunnel
Jalankan:
cloudflared tunnel create my-tunnel
Contoh hasil:
Tunnel credentials written to
/home/nirantara/.cloudflared/8f58f0a9-xxxx.json
Lihat daftar Tunnel:
cloudflared tunnel list
Contoh:
ID NAME
8f58f0a9-xxxx-xxxx-xxxx-xxxxxxxxxxxx my-tunnel
Struktur Folder
Setelah Tunnel dibuat, folder .cloudflared akan berisi:
~/.cloudflared/
├── cert.pem
├── config.yml
└── 8f58f0a9-xxxx.json
Membuat Konfigurasi Tunnel
Buat file:
~/.cloudflared/config.yml
Isi:
tunnel: my-tunnel
credentials-file: /home/nirantara/.cloudflared/8f58f0a9-xxxx.json
ingress:
- hostname: api.nirantara.solutions
service: http://localhost:8080
- service: http_status:404
Konfigurasi di atas berarti:
https://api.nirantara.solutions
│
▼
http://localhost:8080
Menambahkan Beberapa Subdomain
Satu Tunnel dapat melayani banyak aplikasi sekaligus.
Contoh:
tunnel: my-tunnel
credentials-file: /home/nirantara/.cloudflared/8f58f0a9-xxxx.json
ingress:
- hostname: api.nirantara.solutions
service: http://localhost:8080
- hostname: monitor.nirantara.solutions
service: http://localhost:9000
- hostname: bot.nirantara.solutions
service: http://localhost:8085
- hostname: rag.nirantara.solutions
service: http://localhost:8888
- service: http_status:404
Dengan konfigurasi tersebut, satu proses cloudflared dapat melayani empat aplikasi berbeda.
Membuat DNS Route
Inilah langkah yang sering membuat bingung pengguna baru.
Misalnya ingin membuat:
api.nirantara.solutions
jalankan:
cloudflared tunnel route dns my-tunnel api.nirantara.solutions
atau menggunakan UUID Tunnel:
cloudflared tunnel route dns 8f58f0a9-xxxx api.nirantara.solutions
Output:
Added CNAME api.nirantara.solutions
Perintah tersebut secara otomatis membuat record DNS CNAME menuju Tunnel Cloudflare.
Menambahkan Subdomain Baru
Misalnya ingin menambahkan:
chat.nirantara.solutions
Edit config.yml:
- hostname: chat.nirantara.solutions
service: http://localhost:8090
Kemudian buat DNS:
cloudflared tunnel route dns my-tunnel chat.nirantara.solutions
Restart service:
sudo systemctl restart cloudflared
Selesai.
Menjalankan Tunnel
Secara manual:
cloudflared tunnel run my-tunnel
Apabila berhasil akan muncul log:
Connected to Cloudflare
Sekarang aplikasi dapat diakses melalui:
https://api.nirantara.solutions
Menjalankan Sebagai Service
Install service:
sudo cloudflared service install
Enable:
sudo systemctl enable cloudflared
Start:
sudo systemctl start cloudflared
Status:
systemctl status cloudflared
Melihat log:
journalctl -u cloudflared -f
Menghapus DNS Route
Apabila suatu subdomain sudah tidak digunakan:
cloudflared tunnel route dns delete api.nirantara.solutions
Atau hapus record langsung melalui Dashboard DNS Cloudflare.
Informasi Tunnel
Melihat daftar Tunnel:
cloudflared tunnel list
Melihat detail Tunnel:
cloudflared tunnel info my-tunnel
Menghapus Tunnel
Stop service:
sudo systemctl stop cloudflared
Kemudian hapus Tunnel:
cloudflared tunnel delete my-tunnel
Contoh Implementasi Nyata
Misalnya sebuah server menjalankan beberapa layanan berikut:
| Subdomain | Aplikasi | Port |
|---|---|---|
| api.nirantara.solutions | Spring Boot REST API | 8080 |
| monitor.nirantara.solutions | Grafana | 9000 |
| bot.nirantara.solutions | Telegram Bot API | 8085 |
| rag.nirantara.solutions | FastAPI RAG | 8888 |
| chat.nirantara.solutions | Chat Service | 8090 |
Seluruh aplikasi tersebut cukup menggunakan satu Cloudflare Tunnel.
Kemudian buat DNS masing-masing:
cloudflared tunnel route dns my-tunnel api.nirantara.solutions
cloudflared tunnel route dns my-tunnel monitor.nirantara.solutions
cloudflared tunnel route dns my-tunnel bot.nirantara.solutions
cloudflared tunnel route dns my-tunnel rag.nirantara.solutions
cloudflared tunnel route dns my-tunnel chat.nirantara.solutions
Restart service:
sudo systemctl restart cloudflared
Seluruh aplikasi kini dapat diakses melalui HTTPS tanpa membuka satu pun port pada firewall.
Troubleshooting
cloudflared tunnel login gagal
Pastikan domain telah menggunakan Nameserver Cloudflare dan akun memiliki hak akses terhadap zona domain tersebut.
cloudflared tunnel route dns gagal
Biasanya disebabkan oleh:
- Belum login (
cloudflared tunnel login) - File
cert.pemtidak ditemukan - Domain bukan milik akun Cloudflare yang sedang digunakan
Error 1016 Origin DNS Error
Penyebab umum:
- Tunnel belum berjalan
- Hostname tidak ada pada
config.yml - Service lokal tidak aktif
Pastikan aplikasi dapat diakses terlebih dahulu:
curl http://localhost:8080
Subdomain Tidak Bisa Diakses
Periksa beberapa hal berikut:
- Tunnel sedang berjalan
- DNS sudah dibuat
config.ymlbenar- Service lokal aktif
- Firewall lokal tidak memblokir akses ke localhost
Penutup
Cloudflare Tunnel merupakan salah satu solusi terbaik untuk mempublikasikan aplikasi internal tanpa harus membuka port ke internet. Dengan satu Tunnel, kita dapat menghubungkan berbagai layanan seperti REST API, Grafana, FastAPI, dashboard internal, maupun aplikasi lainnya menggunakan subdomain yang berbeda.
Selain meningkatkan keamanan, pendekatan ini juga menyederhanakan pengelolaan infrastruktur karena tidak lagi bergantung pada IP publik, port forwarding, atau konfigurasi NAT yang kompleks. Bagi organisasi yang mengembangkan layanan internal maupun aplikasi berbasis mikroservis, Cloudflare Tunnel menjadi pilihan yang sederhana, aman, dan mudah dikelola.
Published by Nirantara
Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by jsturana.