VPS Murah Nevacloud

Yuk, Pasang Cloudflare Tunnel di VPS: Akses Aplikasi Self-Hosted Tanpa Buka Port

Halo Sobat Online! Coba bayangkan rumah tanpa pintu depan: tidak ada yang bisa masuk sembarangan, tapi penghuninya tetap bisa mengirim dan menerima paket. Kurang lebih begitulah cara kerja Cloudflare Tunnel di VPS. Aplikasi self-hosted seperti n8n, panel admin, atau dashboard monitoring tetap bisa dibuka dari internet, tetapi tidak ada satu pun port yang perlu dibuka di servermu.

Selama ini kita diajari bahwa supaya aplikasi bisa diakses dari luar, port 80/443 harus dibuka dan domain diarahkan ke IP publik VPS. Cara itu memang jalan, tapi setiap port terbuka adalah pintu yang bisa diketuk siapa saja. Dengan cloudflared, arahnya dibalik: server yang menghubungi Cloudflare lebih dulu, lalu permintaan dari pengunjung dikirim balik lewat “terowongan” yang sudah jadi itu.

Apa Itu Cloudflare Tunnel di VPS dan Kenapa Lebih Aman?

Cloudflare Tunnel adalah fitur dari Cloudflare Zero Trust yang menghubungkan servermu ke jaringan edge Cloudflare tanpa perlu membuka port masuk (inbound) sama sekali. Caranya, sebuah daemon ringan bernama cloudflared dijalankan di VPS. Daemon ini yang membuka koneksi keluar ke Cloudflare, lalu menunggu perintah.

Alurnya sederhana:

  1. cloudflared di VPS membuka koneksi keluar ke edge Cloudflare. Dokumentasi resmi meminta kamu memastikan port 7844 tidak diblokir kalau servermu pakai firewall ketat.
  2. Pengunjung membuka https://n8n.domainmu.com. Permintaan itu masuk ke Cloudflare, bukan langsung ke IP VPS-mu.
  3. Cloudflare mengirim permintaan tersebut lewat terowongan yang sudah terbuka, dan cloudflared meneruskannya ke aplikasi lokal — misalnya http://127.0.0.1:5678.

Beberapa keuntungan yang paling terasa:

  • Tanpa IP publik dan tanpa port forwarding. Pengunjung tidak pernah menyentuh IP VPS-mu.
  • TLS otomatis. Sertifikat HTTPS diurus Cloudflare di sisi edge, jadi aplikasi lokalmu boleh tetap berjalan sebagai HTTP biasa.
  • Terlindung dari DDoS di lapisan depan. Trafik jahat disaring Cloudflare sebelum sampai ke VPS.
  • Tidak takut IP berubah. DNS-nya berupa CNAME ke UUID.cfargotunnel.com, bukan alamat IP, jadi ganti IP VPS tidak bikin domain mati.

Yang Perlu Disiapkan Sebelum Mulai

Persiapan di bawah ini singkat, tapi dua poin pertama wajib:

  1. Domain yang sudah memakai nameserver Cloudflare. Ini prasyarat resmi dari dokumentasi Cloudflare Tunnel. Kalau domainmu masih memakai nameserver registrar, pindahkan dulu.
  2. VPS Linux (Ubuntu/Debian) dengan akses SSH dan hak sudo. Artikel ini memakai jalur APT, tapi Cloudflare juga menyediakan paket RPM, biner siap pakai, dan image Docker.
  3. Satu aplikasi yang sudah jalan di localhost. Contoh paling gampang: n8n di http://127.0.0.1:5678. Uji dulu dengan curl -I http://127.0.0.1:5678 — kalau dari dalam VPS saja belum menyala, tunnel tidak akan menolong.

Langkah 1: Pasang cloudflared dari Repositori Resmi

Jangan asal mengunduh biner dari situs tidak jelas. Cloudflare punya repositori paket sendiri, dan inilah urutan perintah resminya untuk Ubuntu/Debian:


sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg \
  | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

# 2. Daftarkan repositori cloudflared
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

# 3. Pasang
sudo apt-get update && sudo apt-get install cloudflared
cloudflared --version

Kalau cloudflared --version sudah menjawab nomor versi, lanjut ke langkah berikutnya. Satu catatan penting dari dokumentasi: Cloudflare hanya mendukung versi cloudflared yang berumur kurang dari satu tahun, jadi jangan biarkan paket ini menua sendirian — rajin-rajin sudo apt-get update && sudo apt-get upgrade.

Langkah 2: Login dan Buat Tunnel Bernama

Sekarang saatnya mendaftarkan tunnel. Perintah pertama akan membuka alamat di browser untuk memilih domain mana yang boleh memakai terowongan ini:


cloudflared tunnel login      # pilih domainmu di browser, hasilnya cert.pem
cloudflared tunnel create vps-donnebanget
cloudflared tunnel list

Perintah create menghasilkan dua hal yang wajib kamu catat:

  • UUID tunnel, misalnya 6ff42ae2-765d-4adf-8112-31c55c1551ef. UUID ini boleh diketahui orang lain.
  • File kredensial bernama <UUID>.json di folder default cloudflared (untuk root biasanya /root/.cloudflared/). Ini rahasia, perlakukan seperti kunci rumah:

chmod 600 ~/.cloudflared/*.json ~/.cloudflared/cert.pem

Jangan pernah menaruh file kredensial atau cert.pem ke dalam repositori Git, walau repositorinya privat.

Langkah 3: Tulis config.yml dan Aturan Ingress

Di sinilah otak dari Cloudflare Tunnel di VPS: file config.yml di dalam folder ~/.cloudflared/. Isinya memetakan nama host ke layanan lokal.


tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json

ingress:
  - hostname: n8n.domainmu.com
    service: http://127.0.0.1:5678
  - hostname: monitor.domainmu.com
    service: http://127.0.0.1:3001
    originRequest:
      connectTimeout: 30s
  - service: http_status:404

Aturan catch-all wajib jadi baris terakhir

Perhatikan baris - service: http_status:404 tanpa hostname. Tanpa aturan catch-all, cloudflared menolak berjalan. Cloudflare memang sengaja begitu: permintaan yang tidak cocok dengan aturan mana pun harus dijawab jelas, bukan diteruskan ke sembarang tempat.

Urutan aturan dibaca dari atas ke bawah, dan aturan pertama yang cocok itulah yang dipakai. Jadi letakkan aturan paling spesifik di atas.

Dua hal yang sering bikin bingung

  • cloudflared tidak memotong path. Kalau aturanmu cocok karena path: /api, permintaan ke https://domainmu.com/api/users tetap dikirim apa adanya ke http://127.0.0.1:8000/api/users. Butuh path dipotong? Lakukan di Nginx atau aturan URL Rewrite di sisi Cloudflare.
  • Wildcard hanya di depan. .domainmu.com sah, tapi test..domainmu.com tidak didukung.

Kalau kamu hanya mengarahkan satu layanan, file konfigurasi bisa jauh lebih pendek — cukup tiga baris, tanpa blok ingress:


url: http://localhost:5678
tunnel: vps-donnebanget
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json

Langkah 4: Arahkan DNS dan Validasi Rute

Tidak perlu membuat record DNS manual di dashboard. Biarkan cloudflared yang membuatnya, karena perintah ini akan menulis CNAME ke <UUID>.cfargotunnel.com:


cloudflared tunnel route dns vps-donnebanget n8n.domainmu.com
cloudflared tunnel route dns vps-donnebanget monitor.domainmu.com

Sesudah itu, uji dulu aturanmu sebelum menghidupkan layanan:


cloudflared tunnel ingress validate                       # cek sintaks config.yml
cloudflared tunnel ingress rule https://n8n.domainmu.com   # lihat aturan mana yang cocok

Perintah kedua itu emas: ia menampilkan nomor aturan yang akan dipakai untuk URL tersebut. Kalau yang muncul ternyata catch-all http_status:404, berarti ada salah ketik di hostname — dan itu lebih baik kamu tahu sekarang daripada setelah tunnel dinyalakan.

Langkah 5: Jalankan Tunnel di Foreground

Sebelum dijadikan layanan permanen, jalankan dulu apa adanya supaya pesan error-nya kelihatan:


cloudflared tunnel run vps-donnebanget

Biarkan terminal itu terbuka, lalu dari laptopmu buka https://n8n.domainmu.com. Kalau halaman n8n muncul dan HTTPS-nya sah, berarti rantainya sudah benar. Ingin memastikan dari sisi VPS:


curl -I https://n8n.domainmu.com --resolve n8n.domainmu.com:443:$(dig +short n8n.domainmu.com | head -1)
cloudflared tunnel info vps-donnebanget    # status dan jumlah koneksi ke edge

Langkah 6: Jadikan Layanan systemd Supaya Otomatis Jalan

Tunnel yang cuma dijalankan manual akan mati begitu SSH ditutup. Karena itu, pindahkan konfigurasi ke lokasi permanen dan pasang sebagai layanan:


sudo mkdir -p /etc/cloudflared
sudo cp ~/.cloudflared/config.yml ~/.cloudflared/<UUID>.json ~/.cloudflared/cert.pem /etc/cloudflared/
sudo sed -i 's|/root/.cloudflared|/etc/cloudflared|g' /etc/cloudflared/config.yml
sudo cloudflared service install
sudo systemctl enable --now cloudflared
systemctl status cloudflared --no-pager
sudo journalctl -u cloudflared -n 30 --no-pager

Yang perlu kamu lihat di log adalah baris Registered tunnel connection beberapa kali, satu per koneksi ke edge Cloudflare. Kalau barisnya tidak ada, hentikan dulu di situ — jangan lanjut ke aplikasi lain. Kalau config.yml disimpan di lokasi lain, sertakan flag --config /path/ke/config.yml saat memasang layanan, supaya unit systemd menunjuk file yang benar. Perlu diingat juga bahwa layanan ini berjalan sebagai root; kalau kamu ingin lebih ketat, buat user khusus lalu ubah direktif User= di unit-nya.

Alternatif: Tunnel dari Dashboard Zero Trust

Kalau kamu tidak suka mengurus file YAML di server, Cloudflare menyediakan jalur remotely-managed tunnel. Konfigurasinya disimpan di dashboard, dan VPS hanya butuh satu perintah berisi token:

  1. Masuk ke dashboard Cloudflare → Networking → Tunnels → Create a tunnel, pilih konektor Cloudflared, lalu beri nama.
  2. Pilih sistem operasi VPS-mu, salin perintah pemasangan yang muncul, dan jalankan di server. Bentuknya seperti sudo cloudflared service install <TOKEN>.
  3. Setelah tunnel terhubung (status hijau/Healthy), buka tab Routes → Add route → Published application, isi subdomain dan Service URL, misalnya http://localhost:5678.

Enaknya, ubah rute cukup di dashboard tanpa menyentuh server. Kekurangannya, konfigurasinya tidak ikut tersimpan di repositori infrastrukturmu, dan token itu sendiri adalah rahasia yang tidak boleh bocor.

Tips Keamanan dan Kesalahan yang Paling Sering Terjadi

Tunnel membuat aplikasimu rapi, tapi bukan otomatis aman. Beberapa catatan yang layak dipegang:

  • Aplikasi tetap harus bind ke localhost. service: http://127.0.0.1:5678 jauh lebih baik daripada membuka ke 0.0.0.0. Kalau perlu, tutup port itu di firewall — tunnel tetap jalan.
  • Tunnel bukan pengganti autentikasi. Panel admin yang dipublikasikan tanpa login akan tetap terbuka untuk dunia. Tambahkan Cloudflare Access di depan hostname admin supaya hanya email tertentu yang boleh masuk.
  • Waspadai tabrakan di YAML. Kesalahan paling umum adalah lupa catch-all dan memakai indentasi tab. Jalankan cloudflared tunnel ingress validate setiap kali selesai mengedit.
  • Jangan buat CNAME manual ke IP VPS. Ini keliru dan bisa membuat aplikasi bocor lewat jalur lain. Pakai cloudflared tunnel route dns.
  • Simpan kredensial dengan aman. File <UUID>.json dan cert.pem setara dengan akses domainmu.
  • Quick tunnel hanya untuk uji coba. Mode tanpa konfigurasi ini memakai alamat acak trycloudflare.com yang berubah setiap dijalankan — enak untuk demo cepat, bukan untuk layanan produksi.

Kesimpulan: Sekali Pasang, Banyak Manfaat

Cloudflare Tunnel di VPS mengubah cara kita berpikir soal mengekspos layanan: bukan lagi “buka port lalu berdoa”, tapi “biarkan server yang menghubungi dunia luar”. Dengan satu daemon, satu file config.yml, dan aturan ingress yang tepat, aplikasi seperti n8n, dashboard uptime, atau panel admin bisa diakses dari mana saja lewat HTTPS, tanpa satu port pun terbuka di VPS-mu.

Sobat Online, luangkan 10 menit hari ini untuk memasangnya di satu subdomain. Setelah rasanya berhasil, tambahkan subdomain kedua dan ketiga — dan kamu akan sadar bahwa mengekspos layanan self-hosted ternyata bisa tidak menakutkan. Selamat mencoba, dan bagikan hasilnya di kolom komentar!

Baca juga

Nevacloud VPS Indonesia

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *