Solusi DDNS (Dynamic DNS) dengan CloudFlare + MikroTik

Saat membangun server sendiri dengan jaringan seperti indihome, kita terkendala dengan mahalnya IP statis. Karena kita menggunakan IP dinamis, kita tidak bisa mengakses server kita secara remote setelah modem reboot. Ada beberapa layanan yang memungkinkan kita mengakses IP yang berubah-ubah dengan mengetikkan nama host seperti no-ip.com. Layanan gratis no-ip.com memberikan nama host seperti namakamu.ddns.net. Dengan syarat harus login ke no-ip.com setiap bulan untuk melakukan renew. Hal tersebut sangat tidak nyaman bagi saya.

Karena domain saya saat ini menggunakan layanan DNS dari CloudFlare.com, saya mencoba membuat script PHP untuk update IP menggunakan CloudFlare API v4.


Sekilas tentang CloudFlare

CloudFlare adalah penyedia DNS untuk domain yang menurut saya terbaik saat ini. Jaringan CloudFlare sangat cepat dan stabil. Boleh dikatakan diatas layanan gratis lainnya. Bahkan CloudFlare ditunjuk oleh Google sebagai Google Cloud Platform Technology Partner. Untuk menggunakan CloudFlare sebagai DNS sepenuhnya, saya sarankan untuk menonaktifkan fitur CDN.

Caranya klik Overview , lalu klik Advanced dibawah status domain. Pada bagian "Pause Website" klik tombol Pause.


Bagaimana cara kerjanya?

Kita menggunakan client seperti router MikroTik untuk melakukan fetch berkala pada script PHP yang diletakkan diluar jaringan kita. Script PHP membaca IP publik kita dan melakukan update IP di CloudFlare jika terjadi perubahan.

Sebenarnya MikroTik memiliki layanan DDNS sejak v6.14. Yang memberikan nama host seperti 529c0491d41c.sn.mynetname.net. Namun menurut pengalaman saya kurang reliable.

Berikut adalah script PHP untuk update IP di CloudFlare:

  1. <?php 
  2.  
  3. // PHP CloudFlare IP Updater v4 
  4. // When you need DDNS with CloudFlare.com 
  5. // (c) 2018 anggit.com 
  6.  
  7. if (!(isset($_GET['user'], $_GET['pass']) 
  8.     && $_GET['user'] === 'aku' 
  9.     && $_GET['pass'] === 'rahasia' 
  10.     )) { 
  11.         exit; 
  12.     } 
  13.  
  14. $headers = array( 
  15.     'X-Auth-Email: example@gmail.com', 
  16.     'X-Auth-Key: 5d59f22ef88d9b6351d529e5c2c23156fdf3b, 
  17.     'Content-Type: application/json' 
  18. ); 
  19.  
  20. $url  = 'https://api.cloudflare.com/client/v4/zones/504f0c70c8577b41c1d18bd0eff98a47/dns_records'; 
  21. $host = 'homeserver.anggit.com'; 

Pada bagian X-Auth-Email (baris 15) diisi akun email yang terdaftar di CloudFlare. X-Auth-Key (baris 16) adalah Api Key yang bisa didapatkan di halaman My Profile CloudFlare.


cloudflare-api-key

$url (baris 20) adalah API endpoint yang didapatkan dengan cara klik DNS lalu klik API di kanan bawah "DNS Records". $host (baris 21) adalah nama host atau subdomain dengan tipe A record yang digunakan sebagai DDNS. Script diatas hanya bagian config. Script lengkapnya disini.


Penggunaan

Upload script PHP di penyedia hosting, misal jika menggunakan hosting gratis 000webhost.com: http://namakamu.000webhostapp.com/ip-update/index.php. Eksekusi url tersebut secara berkala (dari jaringan internet kita) menggunakan parameter GET user dan pass:

  1. http://namakamu.000webhostapp.com/ip-update/index.php?user=aku&pass=rahasia 

Sebelumnya pastikan set CHMOD 777 pada directory /ip-update.

Jika menggunakan router MikroTik, buat saja script dengan nama ip-update:

  1. :log info "DDNS update"; 
  2. /tool fetch url="http://namakamu.000webhostapp.com/ip-update/index.php?user=aku&pass=rahasia"; 

Lalu eksekusi otomatis dengan interval misal satu jam, menggunakan System:Scheduler. Untuk lebih cepatnya paste baris berikut ke terminal di MikroTik:

  1. /system scheduler add name="DDNS update" on-event="ip-update" interval=1h 

Done! Mudah dan murah bukan? :)

Update:

Alternatif lebih mudah: Solusi IP Dinamis dengan ClouDNS.net

Saya tidak memperbarui artikel ini. Sekarang saya menggunakan SSH reverse tunneling dengan cara ini: https://anggit.com/archive/202201/post/1708151300/mengonlinekan-localhost-dengan-vps-gratis-ngadem-in.html