Community discussions

MikroTik App
 
ecarlevaro
just joined
Topic Author
Posts: 4
Joined: Wed Jan 02, 2013 12:22 am

Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Wed Jan 29, 2014 5:20 am

Since I had problems with this script, http://wiki.mikrotik.com/wiki/Dynamic_D ... _No-IP_DNS for update IP address to No-IP DNS server I rewrite it to make compatible for RouterOS version 6.7.

The problem with that script is the function :toarray,
:set noiphostarray [:toarray $noiphost]
That line produces a malfunction of the script because it never saves the value of the current IP address in var $previousIP, so the script is constantly updating the IP address when it is not necessary because it hasn't changed.

Here is my debugged script working on RouterOS version 6.7:
# No-IP automatic Dynamic DNS update

#--------------- Change Values in this section to match your setup ------------------

# No-IP User account info
:local noipuser "YOUR-NO-IP-USERNAME";
:local noippass "YOUR-NO-IP-PASSWORD";

# Set the hostname or label of network to be updated.
:local noiphost "YOUR-NO-IP-HOSTNAME";

# Change to the name of interface that gets the dynamic IP address
:local inetinterface "INTERFACE-THAT-YOU-WANT-TO-UPDATE-IP-ADDRESS";

#------------------------------------------------------------------------------------
# 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;
		:local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP";
		:log info "No-IP: Sending update for $noiphost";
		/tool fetch url=($url . "&hostname=$noiphost") user=$noipuser password=$noippass mode=http dst-path=("no-ip_ddns_update-" . $host . ".txt")
		:log info "No-IP: Host $noiphost 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.";
}
Credits for Riverron http://wiki.mikrotik.com/wiki/User:Riverron
 
IMD
just joined
Posts: 3
Joined: Mon Aug 26, 2013 3:50 pm

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.

Thu Jun 05, 2014 7:27 pm

Hi,

i have a RB2011UAS-2HnD-IN with OS v6.12 and always the script log this:

Current IP (A.B.C.D) is not equal to previous IP (), update needed

NOTE1: IP omitted
NOTE2: i have change this line: :log info "No-IP: Current IP ($currentIP) is not equal to previous IP ($previousIP), update needed";

The script DO NOT saves the value of the previousIP, so always must update which it is not correct.

Any tip ?
 
User avatar
rextended
Forum Guru
Forum Guru
Posts: 12657
Joined: Tue Feb 25, 2014 12:49 pm
Location: Italy
Contact:

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.

Fri Jun 06, 2014 1:38 am

 
letsjump
just joined
Posts: 8
Joined: Sat Dec 19, 2015 12:10 pm

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Sat Dec 26, 2015 3:52 pm

Since I had some problem while updating, I decide to modify this script setting previousIP as a local variable with its IP resolved by DNS:
 :local previousIP [:resolve "$noiphost"];
so this is the updated script:
# No-IP automatic Dynamic DNS update

#--------------- Change Values in this section to match your setup ------------------

# No-IP User account info
:local noipuser "your@email.com"
:local noippass "yourpassword"

# 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 "yourname.ddns.net"

# Change to the name of interface that gets the dynamic IP address
:local inetinterface "yourinterface"

#------------------------------------------------------------------------------------
# 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];
       }
   }

   :local previousIP [:resolve "$noiphost"];

   :log info "DNS IP: $previousIP, interface IP: $currentIP";

   :if ($currentIP != $previousIP) do={
      :log info "No-IP: Current IP $currentIP is not equal to previous IP $previousIP, update needed";
     # :set previousIP $currentIP;
      :local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP";
      :log info "No-IP: Sending update for $noiphost";
      /tool fetch url=($url . "&hostname=$noiphost") user=$noipuser password=$noippass mode=http dst-path=("no-ip_ddns_update-" . $host . ".txt")
      :log info "No-IP: Host $noiphost 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.";
}
 
hostgator1
just joined
Posts: 3
Joined: Tue Feb 02, 2016 9:28 pm

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Wed Feb 24, 2016 7:47 am

Is this script working on 6.34.2 ?
Thx
 
nightowl
newbie
Posts: 25
Joined: Sat Aug 28, 2010 5:11 am

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Thu Feb 25, 2016 2:20 am

This Mikrotik Noip update script works on 6.27 and it survived an upgrade to 6.34.1
You still need to setup the system scheduler just change the on-event=to match the name of the script
/system scheduler add comment="Update No-IP DDNS" disabled=no interval=5m \
name=no-ip_ddns_update on-event=no-ip_ddns_update policy=read,write,test

Since I had some problem while updating, I decide to modify this script setting previousIP as a local variable with its IP resolved by DNS:
 :local previousIP [:resolve "$noiphost"];
so this is the updated script:
# No-IP automatic Dynamic DNS update

#--------------- Change Values in this section to match your setup ------------------

# No-IP User account info
:local noipuser "your@email.com"
:local noippass "yourpassword"

# 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 "yourname.ddns.net"

# Change to the name of interface that gets the dynamic IP address
:local inetinterface "yourinterface"

#------------------------------------------------------------------------------------
# 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];
       }
   }

   :local previousIP [:resolve "$noiphost"];

   :log info "DNS IP: $previousIP, interface IP: $currentIP";

   :if ($currentIP != $previousIP) do={
      :log info "No-IP: Current IP $currentIP is not equal to previous IP $previousIP, update needed";
     # :set previousIP $currentIP;
      :local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP";
      :log info "No-IP: Sending update for $noiphost";
      /tool fetch url=($url . "&hostname=$noiphost") user=$noipuser password=$noippass mode=http dst-path=("no-ip_ddns_update-" . $host . ".txt")
      :log info "No-IP: Host $noiphost 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.";
}
 
hostgator1
just joined
Posts: 3
Joined: Tue Feb 02, 2016 9:28 pm

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Thu Feb 25, 2016 7:55 am

Thanks it's working!
 
hjmargarido
just joined
Posts: 1
Joined: Sun May 22, 2016 10:38 pm

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Sun May 22, 2016 11:07 pm

all things seems to work but the ip on no-ip page dont update...
running 6.36rc13
 
kokkolo
just joined
Posts: 1
Joined: Sun Sep 25, 2016 1:50 am

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Sun Sep 25, 2016 2:01 am

I have simplified the whole script like this and it works on RouterOS 6.33.5. Hope this helps.
##############Script Settings##################

:local NOIPUser "your_uname"
:local NOIPPass "your_passwd"
:local WANInter "ether1"

###############################################

:local NOIPDomain "$NOIPUser.no-ip.org"

:local IpCurrent [:resolve myip.opendns.com server=208.67.222.222];
:put $IpCurrent

:if ([:resolve $NOIPDomain] != $IpCurrent) do={
      /tool fetch mode=http user=$NOIPUser password=$NOIPPass url="http://dynupdate.no-ip.com/nic/update\3Fhostname=$NOIPDomain&myip=$Ipcurrent" keep-result=no
      :log info "NO-IP Update: $NOIPDomain - $IpCurrent"
}

 
spamdog
just joined
Posts: 3
Joined: Wed Oct 26, 2016 2:10 pm

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Wed Oct 26, 2016 2:16 pm

Hello!

Since 6.36 os the script works , but he scheduler didn't start it.
 
qbek
just joined
Posts: 20
Joined: Mon Sep 21, 2015 3:34 pm
Location: Poland

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Sat Nov 05, 2016 7:40 pm

all things seems to work but the ip on no-ip page dont update...
running 6.36rc13
I noticed the same thing since June 2016. I got email's "Please confirm your hostname now or it will be deleted". Nothing have been changed in script.
Now I have 6.35 on Mikrotik. Any solutions?
 
letsjump
just joined
Posts: 8
Joined: Sat Dec 19, 2015 12:10 pm

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Tue Oct 17, 2017 7:45 pm

Another working solution on 6.40.3
:# No-IP automatic Dynamic DNS update

#--------------- Change Values in this section to match your setup ------------------

# No-IP User account info
:local noipuser "YOURNOIPUSER"
:local noippass "YOURPASS"

# 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 "YOURNOIP.ddns.net"

# Change to the name of interface that gets the dynamic IP address
:local inetinterface "pppoe-out1"

#------------------------------------------------------------------------------------
# No more changes need

#:global previousIP;

:if ([/interface get $inetinterface value-name=running]) do={

# Get the current IP on the interface

:local currentIP [:put [:pick [/ip address  get [:pick [find interface=$inetinterface] 1] address] 0 [:find [ip address  get [:pick [find interface=$inetinterface] 1] 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];
       }
   }

   :local previousIP [:resolve "$noiphost"];

   :log info "DNS IP: $previousIP, interface IP: $currentIP";

   :if ($currentIP != $previousIP) do={
      :log info "No-IP: Current IP $currentIP is not equal to previous IP $previousIP, update needed";
     # :set previousIP $currentIP;
      :local url "http://dynupdate.no-ip.com/nic/update\3Fmyip=$currentIP";
      :log info "No-IP: Sending update for $noiphost";
      /tool fetch url=($url . "&hostname=$noiphost") user=$noipuser password=$noippass mode=http dst-path=("no-ip_ddns_update-" . $host . ".txt")
      :log info "No-IP: Host $noiphost 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.";
}
 
linhchivas
just joined
Posts: 2
Joined: Fri Dec 29, 2017 1:03 pm

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Fri Dec 29, 2017 1:10 pm

it dont work with my router version 6.36.2.Can you help me
 
luizamorimsouza
just joined
Posts: 1
Joined: Thu Aug 09, 2018 4:59 am

Re: Dynamic DNS Update Script for No-IP DNS for Router OS V.6.7

Thu Aug 09, 2018 5:06 am

try change on-event=no-ip_ddns_update for on-event="/system script run no-ip_ddns_update". worked for me