Cloudflare Tunnel pengganti IP Public
Solusi terbaik untuk menghindari ketergantungan pemakaian Public IP adalah menggantinya dengan Cloudflare Tunnel. Metode ini aman, gratis, dan tidak memerlukan inbound open port pada Network Security Group (NSG) karena koneksi bersifat outbound-only.
Tahap 1: Konfigurasi Tunnel (Saat Public IP Masih Aktif)
1. Instalasi Cloudflared di VM
# Download paket cloudflared
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
# Jalankan instalasi
sudo dpkg -i cloudflared.deb2. Otentikasi dan Pembuatan Tunnel
# Login ke akun Cloudflare Anda
cloudflared tunnel loginKlik tautan yang muncul untuk memilih domain Anda. Setelah berhasil, buat tunnel baru:
# Buat tunnel baru dan simpan nama/ID-nya
cloudflared tunnel create azure-ssh-tunnel3. Konfigurasi Routing untuk SSH
Agar Anda bisa masuk via SSH setelah IP Publik dihapus, buat berkas konfigurasi config.yml di direktori ~/.cloudflared/config.yml:
tunnel: <TUNNEL_ID_ANDA>
credentials-file: /home/<USERNAME>/.cloudflared/<TUNNEL_ID_ANDA>.json
ingress:
# Mengarahkan sub-domain khusus untuk akses SSH ke port 22 lokal VM
- hostname: ssh.domainanda.com
service: ssh://localhost:22
- service: http_status:404Hubungkan tunnel tersebut ke DNS Cloudflare:
# Daftarkan hostname ke Cloudflare DNS
cloudflared tunnel route dns azure-ssh-tunnel ssh.domainanda.com4. Menyalin Cloudflared ke folder /etc
Ketika Anda menjalankan perintah dengan sudo, cloudflared mencari file konfigurasi di direktori sistem (/etc/cloudflared) atau di bawah home direktori milik root, bukan di folder user VM anda.
Untuk mendaftarkannya sebagai system service yang berjalan otomatis saat booting, file konfigurasi dan file kredensial .json sebaiknya dipindahkan ke direktori global sistem /etc/cloudflared.
Buat folder konfigurasi global di dalam direktori /etc:
# Buat Direktori Sistem Cloudflared
sudo mkdir -p /etc/cloudflaredSalin file config.yml dan file token .json yang berada di folder user <USERNAME> ke folder sistem yang baru dibuat:
# Salin berkas config.yml
sudo cp /home/<USERNAME>/.cloudflared/config.yml /etc/cloudflared/config.yml
# Salin berkas kredensial .json
sudo cp /home/<USERNAME>/.cloudflared/*.json /etc/cloudflared/
# Amankan hak akses berkas agar hanya bisa dibaca oleh `root`
sudo chmod 600 /etc/cloudflared/<TUNNEL_ID_ANDA>.json
sudo chmod 644 /etc/cloudflared/config.ymlKarena file .json sudah dipindahkan ke /etc/cloudflared, Anda perlu mengubah isi credentials-file di dalam /etc/cloudflared/config.yml agar mengarah ke lokasi baru.
Buka file menggunakan editor teks:
# Sesuaikan Path /config.yml
sudo nano /etc/cloudflared/config.ymlUbah baris credentials-file menjadi seperti ini (sesuaikan dengan ID tunnel Anda):
tunnel: <TUNNEL_ID_ANDA>
credentials-file: /etc/cloudflared/<TUNNEL_ID_ANDA>.json
ingress:
- hostname: ssh.domainanda.com
service: ssh://localhost:22
- service: http_status:404Tekan Ctrl + O lalu Enter untuk menyimpan, dan Ctrl + X untuk keluar dari nano.
5. Jalankan sebagai Service Sistem
Sekarang sistem sudah siap, jalankan kembali perintah instalasi:
sudo cloudflared service installSetelah perintah di atas berhasil, aktifkan dan jalankan service-nya dengan perintah berikut:
# Enable service agar otomatis jalan saat VM restart
sudo systemctl enable cloudflared
# Jalankan service sekarang
sudo systemctl start cloudflaredUntuk memastikan tunnel Anda sudah aktif dan berjalan normal di latar belakang, Anda bisa memeriksa statusnya dengan perintah:
sudo systemctl status cloudflaredTahap 2: Pengujian Koneksi
Jangan tutup sesi SSH utama Anda. Buka jendela terminal baru di komputer lokal Anda (laptop/PC Anda sendiri) untuk menguji apakah tunnel SSH sudah bekerja.
Di komputer lokal Anda, Anda juga harus menginstal cloudflared:
winget install Cloudflare.cloudflaredKemudian jalankan perintah SSH dengan memanfaatkan ProxyCommand:
# Perintah SSH dari komputer lokal Anda melalui Cloudflare Tunnel
ssh -i "C:\path\to\your\private_key.pem" -o ProxyCommand="cloudflared access ssh --hostname %h" username@ssh.domainanda.comTips
Agar tidak perlu mengetik perintah panjang tersebut setiap saat, tambahkan konfigurasi berikut ke dalam berkas ~/.ssh/config di komputer lokal Anda:
Host azure-vm
HostName ssh.domainanda.com
User username
IdentityFile C:\path\to\your\private_key.pem
ProxyCommand cloudflared access ssh --hostname %hGanti C:\path\to\your\private_key.pem dengan lokasi asli file privat key Anda di Windows.
Setelah disimpan, Anda cukup menjalankan perintah ini di PowerShell:
ssh azure-vmDengan metode ini, VM Anda kini sepenuhnya privat (tidak memiliki Public IP), namun tetap dapat Anda kendalikan via SSH dari mana saja melalui jaringan aman Cloudflare.
