Kembali ke Beranda
Networking

Cloudflare Tunnel dari Nol: Membuat Subdomain hingga Routing ke Aplikasi Lokal

Cloudflare Tunnel memungkinkan aplikasi lokal dipublikasikan ke internet tanpa membuka port firewall atau menggunakan IP publik. Artikel ini membahas instalasi cloudflared, pembuatan Tunnel, konfigurasi config.yml, penambahan subdomain, pembuatan DNS Route, menjalankan Tunnel sebagai service, hingga troubleshooting umum. Di akhir artikel juga disertakan contoh implementasi satu Tunnel untuk melayani beberapa aplikasi seperti Spring Boot, FastAPI, Grafana, dan layanan internal lainnya.

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:

ItemNilai
Domainnirantara.solutions
Tunnelmy-tunnel
APIapi.nirantara.solutions
Monitoringmonitor.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:

SubdomainAplikasiPort
api.nirantara.solutionsSpring Boot REST API8080
monitor.nirantara.solutionsGrafana9000
bot.nirantara.solutionsTelegram Bot API8085
rag.nirantara.solutionsFastAPI RAG8888
chat.nirantara.solutionsChat Service8090

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.pem tidak 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.yml benar
  • 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.

cloudflarecloudflare tunnelcloudflaredzero trustreverse proxysecure tunneldnscnamesubdomainhttpsssltlslinuxalmalinuxrocky linuxrhelubuntuserverdevopsself hostedspring bootfastapigrafanamonitoringapinetworkingfirewallport forwardingnathomelabnirantara
Nirantara Logo

Published by Nirantara

Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by jsturana.

Learn more about Nirantara