Setting Script Update Dynamic DNS di MikroTik Untuk Dyndns, No-IP atau ChangeIP

Contoh skenario jaringan dengan modem ADSL telkom speedy
Modem ADSL ————–> MikroTik –> IP Server Internal
Bridge/IP Forwarding–> NAT ——->IP lokal tujuan
Dalam skenario diatas, kita akan menentukan settingan modem ADSL/speedy kita. Apakah mode bridge (Dial PPPoE Speedy di MikroTik), atau pakai mode forwarding (Setting Forwarding di Modem ADSL). Jika dalam mode forwarding, artinya mikrotik Anda dibelakang NAT modem ADSLnya, atau bahasa saya kena routing oleh modemnya. Anda harus terlebih dahulu setting forwarding (virtual server, port mapping, etc) pada modem ADSL Anda. Jika dalam mode bridge, IP public speedy anda akan langsung berada di interfaces wan mikrotik Anda.

Seperti yang sebelumnya saya sebutkan, kita bisa memanfaatkan fitur script dan scheduler untuk update otomatis IP Dynamic DNS kita. Dalam script ini mempunyai fungsi :
  • Update otomatis IP Dynamic DNS kita untuk layanan Dyndns, No-IP atau ChangeIP.
  • Opsi tangkap IP public dibelakang NAT atau tidak.
  • Log tanggal update, dan perubahan IP sebelumnya dengan IP barunya.
  • Otomatis menghapus record DNS internal kita (flush DNS mikrotik) agar hostname DDNS terupdate dengan IP barunya.
Masukan script ini di winbox System > Scripts, kolom “Name: update_ip_ddns” dan pada kolom “Source:” isi dengan script dibawah ini :
#************************************************************************************************
# Script Update Dynamic DNS di MikroTik Untuk Dyndns, No-IP dan ChangeIP
# Thanks to : forum.mikrotik.com, threadnya lupa ^_^
# Roes / Tested & Work @ ROS v.6.13 18-6-2014
#************************************************************************************************
# ganti dengan infomasi account anda, username/password/hostname DDNS Anda
#************************************************************************************************

:local username "username_anda"
:local password "password_anda"
:local hostname "hostname.anda"

# 2 pilihan untuk menangkap IP public anda "http" atau "iface"
# - http: akan menangkap/mencari IP public yang anda gunakan (skenario jika anda dibelakang NAT modem ADSL)
# - iface: akan menggunakan ip public yang di set di interface WAN mikrotik Anda

:local discoverBy "http"

# nama interface WAN yang akan digunakan menangkap IP public Anda (jika pilihan discoverBy = iface)

:local iface "nama_interface_wan_anda"

# pilih salah satu layanan Dynamic DNS yang anda gunakan: "dyndns", "noip", and "changeip"

:local service "changeip"

# Schedule(hari) untuk maksa update jika IP tidak berubah-ubah (agar account DDNS anda tetap aktif)
:local forceUpdate 15

#************************************************************************************************
# dibawah ini jangan di ganti2 jika anda tidak tahu apa yang anda lakukan
#************************************************************************************************

:local force
:global lastUpdate
:local currentIP

:if ($discoverBy="http") do={
   /tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
   :local result [/file get dyndns.checkip.html contents]
   :local resultLen [:len $result]
   :local startLoc [:find $result ": " -1]
   :set startLoc ($startLoc + 2)
   :local endLoc [:find $result "</body>" -1]
   :set currentIP [:pick $result $startLoc $endLoc]
} else={
   :set currentIP [ /ip address get [find interface=$iface disabled=no] address ]
   :for i from=( [:len $currentIP] - 1) to=0 do={
      :if ( [:pick $currentIP $i] = "/") do={ :set currentIP [:pick $currentIP 0 $i] }
   }
}

:local resolvedIP [:resolve $hostname]
:local date [ /system clock get date ]
:local months ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
:local month [ :pick $date 0 3 ]; :local day [ :pick $date 4 6 ]; :local year [ :pick $date 7 11 ];
:local mm ([ :find $months $month -1 ] + 1);
:if ($mm < 10) do={ :set month ("0" . $mm); } else={ :set month $mm; }
:set date ($year . $month . $day);

:if ([ :typeof $lastUpdate ]=[:nothing] || (($date-$lastUpdate) >= $forceUpdate  && $forceUpdate > 0)) do={
   :set force true
}

:put ("Current IP: $currentIP ($discoverBy), Last update: $lastUpdate")

# Determine if dyndns update is needed
:if (($currentIP != $resolvedIP) || ($force = true)) do={
   
    :if ($service = "dyndns") do={
       /tool fetch user=$username password=$password mode=http address="members.dyndns.org" \
            src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/output.txt"
    }
    :if ($service = "noip") do={
       /tool fetch user=$username password=$password mode=http address="dynupdate.no-ip.com" \
            src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/output.txt"
    }
    :if ($service = "changeip") do={
       /tool fetch user=$username password=$password mode=http address="nic.changeip.com" \
            src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/output.txt"
    }
    :local result [/file get output.txt contents]
    :log info ("dynamic-dns-updater: Service = $service, Hostname = $hostname")
    :log info ("dynamic-dns-updater: CurrentIP = $currentIP, Resolved IP = $resolvedIP")
    :log info ("dynamic-dns-updater: Update result: ".$result)
    /ip dns cache flush
    :set lastUpdate $date
}

Kemudian kita buat Schedule agar update DDNS setiap 5 Menit

/system scheduler add disabled=no interval=5m name="Update DDNS setiap 5 menit" on-event=update_ip_ddns policy=\ ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api start-date=mar/30/2014 start-time=14:24:00

Jika Untuk Khusus No-ip Pake script yang ini:
# No-IP automatic Dynamic DNS update #————— Change Values in this section to match your setup —————— # No-IP User account info :local noipuser “email-id-no-ip-anda“ :local noippass “password-no-ip-id-anda“ # Set the hostname or label of network to be updated. # Hostnames with spaces are unsupported. Replace the value in the quotations below with your host names. # To specify multiple hosts, separate them with commas. :local noiphost “nama-domain-anda“ # Change to the name of interface that gets the dynamic IP address :local inetinterface “pppoe-user-speedy-anda“ #———————————————————————————— # No more changes need :global previousIP :if ([/interface get $inetinterface value-name=running]) do={ # Get the current IP on the interface :local currentIP [/ip address get [find interface="$inetinterface" disabled=no] address] # Strip the net mask off the IP address :for i from=( [:len $currentIP] – 1) to=0 do={ :if ( [:pick $currentIP $i] = “/”) do={ :set currentIP [:pick $currentIP 0 $i] } } :if ($currentIP != $previousIP) do={ :log info “No-IP: Current IP $currentIP is not equal to previous IP, update needed” :set previousIP $currentIP # The update URL. Note the “\3F” is hex for question mark (?). Required since ? is a special character in commands. :local url “http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP” :local noiphostarray :set noiphostarray [:toarray $noiphost] :foreach host in=$noiphostarray do={ :log info “No-IP: Sending update for $host” /tool fetch url=($url . “&hostname=$host”) user=$noipuser password=$noippass mode=http dst-path=(“no-ip_ddns_update-” . $host . “.txt”) :log info “No-IP: Host $host updated on No-IP with IP $currentIP” } } else={ :log info “No-IP: Previous IP $previousIP is equal to current IP, no update needed” } } else={ :log info “No-IP: $inetinterface is not currently running, so therefore will not update.” }
ATAU jika RB anda diatas versi 6.14 pake aja bawaanya
Dengan habisnya IPv4 membuat IP Public semakin mahal. Untuk berlangganan IP Public static tentu akan memaksa kita untuk merogoh kocek lebih dalam. Sedangkan IP Public dynamic biasanya lebih murah. Dengan harga murah IP Public dynamic, terkadang menimbulkan kesulitan tersendiri bagi admin jaringan yang hendak membuat router menyediakan service yang bisa diakses dari jaringan internet menggunakan IP Public. Misalnya VPN, atau hanya sekedar meremote router dari internet. 
Akan tetapi, IP Public Dynamic sudah tidak lagi menjadi masalah di MikroTikRouterOS mulai versi 6.14. Di versi ini terdapat fitur baru yang bernama IP Cloud. Fitur ini menyediakan layanan yang bisa dikatakan hampir sama seperti service DDNS (Dynamic DNS) yang banyak tersedia di Internet. Dengan fitur ini, service router yang sebelumnya diakses dengan IP Public, diganti dengan DNS yang disediakan oleh MikroTik.com. Dan ketika IP Public berubah, router akan melakukan update ke MikroTik.com sehingga service router tetap bisa diakses dengan DNS yang telah diberikan sebelumnya.
Jika sebelumnya kita bisa menggunakan layanan DDNS dari pihak ketiga, kita membutuhkan script yang cukup rumit agar router melakukan update ke penyedia DDNS. Dengan fitur IP Cloud, cukup masuk ke menu IP --> Cloud, kemudian centang "Enabled" dan selesai. 
Sebelum menjalankan fitur Ip Cloud ini, pastikan router sudah terkoneksi ke internet, agar router dapat melakukan request DNS ke IP Cloud Server. Jika statusnya sudah "updated", maka kita bisa menggunakan nama Domain untuk remote Router atau mengakses service yang dijalankan oleh router seperti VPN dari jaringan internet. Setiap menit router akan selalu mengecheck outgoing IP Router dan akan melakukan update IP ke IP Cloud Server. Dengan begitu, walau IP public router berubah-ubah, kita tetap bisa remote atau VPN ke router menggunakan nama domain yang sama. Contoh remote router via winbox dengan menggunakan domain
 
Agar fitur IP Cloud ini dapat berjalan dengan baik, pastikan router terkoneksi secara langsung dengan internet, sehingga ip public terpasang di router. Jika router hanya  memiliki IP private maka akan muncul informasi "DDNS server received request from IP 202.65.xxx.x but your local IP was 192.168.128.102; DDNS service might not work." Untuk saat ini fitur IP Cloud hanya support untuk IPv4 dan belum support IPv6. 
Selain remote router, bisa juga untuk melakukan dial VPN, karena ternyata dial VPN, misalnya PPTP, ternyata juga bisa menggunakan domain. Contoh implementasi : 
Selain dapat update Dynamic DNS, fitur IP Cloud juga bisa dimanfaatkan untuk update pengaturan waktu pada router jika NTP Client tidak aktif. Caranya, selain centang "Enabled" pada menu IP Cloud, centang juga "Update Time". Dan perlu diketahui, fitur IP Cloud tersedia mulai RouterOS versi 6.14, dan tidak ada di routerOS sebelum 6.14. Format nama domain yang diberikan berdasarkan serial number RouterBoard yang kita gunakan, jadi format domain ditulis seperti berikut : 
[SN RouterBoard].sn.mynetname.net
SN disini maksudnya serial number, jadi DNS di-generate berdasarkan serial number yang terdapat pada router. Perlu diketahui bahwa fitur IP Cloud ini hanya support untuk produk RouterBoard, dan belum support untuk produk x86. Perlu diketahui, router MikroTIk akan menggunakan protokol UPD dengan port 39752 untuk melakukan request atau update IP Address ke server IP Cloud. Pastikan jika Anda membuat rule firewall filter, tidak melakukan block terhadap protokol dan port tersebut.

0 Response to "Setting Script Update Dynamic DNS di MikroTik Untuk Dyndns, No-IP atau ChangeIP"

Post a Comment

Ilmu ibarat sempax, kita harus menggunakannya, tapi tak perlu memamerkannya