02. Cloudflare Virtual Mesh

02. Cloudflare Virtual Mesh Enrollment

Cloudflare Virtual Mesh mengenkripsi semua traffic antar-server dalam infrastructure secara otomatis menggunakan Cloudflare One Client (WARP). Setiap server dalam mesh mendapatkan IP privat virtual dari range Carrier-Grade NAT (CGNAT) <CLOUDFLARE_MESH_SUBNET> yang diassign oleh Cloudflare, memungkinkan komunikasi encrypted end-to-end tanpa direct public IP exposure melalui Zero Trust tunnel.

2.1 Prasyarat

  • Akses ke dashboard Cloudflare One (https://one.dash.cloudflare.com)
  • Sudah melakukan baseline security setup (bagian 01)
  • Token enrollment dari dashboard Cloudflare

Tentang CGNAT IP Space (<CLOUDFLARE_MESH_SUBNET>)

Range IP <CLOUDFLARE_MESH_SUBNET> adalah Carrier-Grade NAT (CGNAT) address space yang diperuntukkan khusus oleh Cloudflare untuk virtual IP addresses. IP addresses ini:

  • Bukan IP publik: Virtual IP yang diassign oleh Cloudflare untuk setiap device running Cloudflare One Client (WARP)
  • Machine-to-machine communication: Memfasilitasi komunikasi terenkripsi antar-device dalam infrastructure melalui Zero Trust network
  • No direct internet exposure: Devices terhubung via secure outbound tunnel ke Cloudflare edge, bukan accepting inbound connections
  • Unique per network: Setiap enrollment mendapat unique virtual IP dalam range ini

2.2 Instalasi Cloudflare WARP Client

Step 1: Setup Repository dan Install Paket

# Add Cloudflare GPG key
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg

# Add repository
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list

# Install cloudflare-warp
sudo apt-get update && sudo apt-get install -y cloudflare-warp

# Enable IP forwarding (diperlukan untuk connector mode)
sudo sysctl -w net.ipv4.ip_forward=1

# Make IP forwarding persistent
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.d/99-cloudflare.conf
sudo sysctl -p /etc/sysctl.d/99-cloudflare.conf

2.3 Memahami Virtual Mesh Architecture

Network Flow:

Server A (<CLOUDFLARE_MESH_IP_A>) --[Tunnel]--> Cloudflare Edge --[Tunnel]--> Server B (<CLOUDFLARE_MESH_IP_B>)
   (Local 127.0.0.1)                                              (Local 127.0.0.1)
   |                                                               |
   +------ Firewall memungkinkan traffic dari <CLOUDFLARE_MESH_SUBNET> ------+

Setiap server:

  1. Menjalankan Cloudflare WARP client (cloudflare-warp service)
  2. Mendapat virtual IP dari CGNAT space (<CLOUDFLARE_MESH_IP_PATTERN>)
  3. Membuat outbound tunnel ke Cloudflare edge (bukan inbound listener)
  4. Dapat berkomunikasi dengan server lain via IP virtual tersebut
  5. Traffic dijamin encrypted end-to-end oleh Cloudflare infrastructure

2.4 Enroll Server ke Virtual Mesh

Step 1: Dapatkan Token Enrollment dari Dashboard

  1. Login ke https://one.dash.cloudflare.com
  2. Navigasi ke AccessConnectors (atau NetworkVirtual Mesh tergantung UI versi)
  3. Klik Add connector atau Create new enrollment
  4. Cloudflare akan menampilkan enrollment command unik dengan token

Step 2: Jalankan Enrollment Command di Server

Token enrollment hanya valid untuk waktu tertentu. Copy dan jalankan command yang digenerate dari dashboard:

# Command dari dashboard (contoh format):
warp-cli connector new <ENROLLMENT_TOKEN_HERE> && warp-cli connect

# Contoh dengan token nyata (format):
# warp-cli connector new <YOUR_ENROLLMENT_TOKEN> && warp-cli connect

Catatan: Token berbeda untuk setiap server dan enrollment, jangan share token antar server.

Step 3: Verifikasi Enrollment Berhasil

# Cek status koneksi ke mesh
sudo warp-cli status

# Verifikasi IP mesh (<CLOUDFLARE_MESH_IP_PATTERN>)
sudo ip addr show | grep <CLOUDFLARE_MESH_IP_PREFIX>

# Lihat interface mesh
sudo ip link show | grep warp

# Test connectivity health
sudo warp-cli tunnel-health

2.5 Konfigurasi UFW untuk Mesh Network

Setelah enrollment berhasil, izinkan traffic dari mesh subnet:

# Allow SSH dari mesh
sudo ufw allow from <CLOUDFLARE_MESH_SUBNET> to any port 22 proto tcp

# Allow database dari mesh
sudo ufw allow from <CLOUDFLARE_MESH_SUBNET> to any port 3306 proto tcp  # MySQL
sudo ufw allow from <CLOUDFLARE_MESH_SUBNET> to any port 5432 proto tcp  # PostgreSQL
sudo ufw allow from <CLOUDFLARE_MESH_SUBNET> to any port 5672 proto tcp  # RabbitMQ
sudo ufw allow from <CLOUDFLARE_MESH_SUBNET> to any port 6379 proto tcp  # Redis/Valkey

# Reload firewall
sudo ufw reload

2.6 Verifikasi Konektivitas Antar Server

Setelah semua server ter-enroll, verifikasi komunikasi melalui mesh:

# Dari server A, test SSH ke server B menggunakan IP mesh
# Contoh: server B memiliki IP mesh <CLOUDFLARE_MESH_IP_TEST>
ssh app-user@<CLOUDFLARE_MESH_IP_TEST>

# Monitor tunnel health dari server A
sudo warp-cli tunnel-health

# Lihat routing table untuk mesh
sudo ip route | grep <CLOUDFLARE_MESH_IP_PREFIX>

# Test connectivity dengan ping (jika ICMP diizinkan)
ping <CLOUDFLARE_MESH_IP_TEST>

2.7 Sistem Management & Monitoring

Melihat Status Service

# Status service warp
sudo systemctl status warp-svc

# Enable/disable untuk auto-start
sudo systemctl enable warp-svc
sudo systemctl disable warp-svc

# Restart service
sudo systemctl restart warp-svc

Melihat Logs

# Real-time logs
sudo journalctl -u warp-svc -f

# Recent logs
sudo journalctl -u warp-svc -n 50

# Logs dari dashboard Cloudflare One juga mencatat activity

Monitoring dari Dashboard

  1. Login ke https://one.dash.cloudflare.com
  2. Navigasi ke AccessConnectors
  3. Lihat status koneksi setiap server (Connected/Disconnected)
  4. Check last seen time untuk verifikasi health

2.8 Troubleshooting

Issue Solusi
Enrollment command tidak ditemukan di dashboard Pastikan sudah navigate ke Access → Connectors dan memiliki permission yang tepat
Token expired saat enrollment Refresh halaman dashboard untuk generate token baru, token biasanya valid 1 jam
Server tidak mendapat IP <CLOUDFLARE_MESH_IP_PATTERN> Jalankan sudo warp-cli status dan check error messages, cek logs dengan sudo journalctl -u warp-svc
Koneksi ke server lain di mesh gagal Verifikasi UFW rules sudah allow <CLOUDFLARE_MESH_SUBNET>, cek kedua server ter-enroll di dashboard, test dengan ping <CLOUDFLARE_MESH_IP_PATTERN>
Service warp-svc tidak jalan Cek service: sudo systemctl status warp-svc, restart: sudo systemctl restart warp-svc
IP forwarding tidak persistent setelah reboot Pastikan sudah edit /etc/sysctl.d/99-cloudflare.conf dan jalankan sudo sysctl -p
Connection drops atau timeout Monitor with sudo warp-cli tunnel-health, check network latency, restart service jika perlu

2.9 Best Practices

  • Catat enrollment token: Simpan enrollment command di dokumentasi deployment untuk referensi, tapi jangan commit ke git/public
  • Monitor enrollment status: Verifikasi di dashboard bahwa semua devices muncul dan connected, set up alerts untuk disconnected devices
  • Automation: Untuk deployment multiple servers, automasi enrollment command generation via Cloudflare API atau script wrapper
  • Keep client updated: Jalankan sudo apt update && sudo apt upgrade -y cloudflare-warp secara berkala
  • Network segregation: Meski mesh encrypted, tetap terapkan UFW rules yang ketat untuk defense-in-depth
  • Backup credentials: Jika menggunakan automation, encrypt dan backup token di secure vault terpisah
  • Test failover: Secara berkala test disconnect/reconnect untuk memastikan service resilience