Cursos

Script para resolver Dyndns en nuestro Mikrotik

En este script, veremos como podemos resolver un dominio dyndns en nuestro mikrotik, para luego encolar este script cada 5 minutos. Con esta acción, estaremos manipulando el servicio en el tiempo que definamos.

 

 

:global ddnsuser "USUARIO_DE_DYNDNS"
:global ddnspass "PASS_DYNDNS"
:global theinterface "OJO_NOMBRE_DE_INTERFAZ_INTERNET"
:global ddnshost EJEMPLO.dyndns.org

:global ipddns [:resolve $ddnshost];
:global ipfresh [ /ip address get [/ip address find interface=$theinterface ] address ]
:if ([ :typeof $ipfresh ] = nil ) do={
   :log warning ("DynDNS: No hay ip address en $theinterface .")
} else={
   :for i from=( [:len $ipfresh] - 1) to=0 do={ 
      :if ( [:pick $ipfresh $i] = "/") do={ 
    :set ipfresh [:pick $ipfresh 0 $i];
      } 
}

:if ($ipddns != $ipfresh) do={
    :log warning ("DynDNS: IP-en-DynDNS = $ipddns")
    :log warning ("DynDNS: IP-Actual = $ipfresh")
   :log error "DynDNS: Necesita actualizar IP , Enviando UPDATE de IP...!"
   :global str "/nic/update\?hostname=$ddnshost&myip=$ipfresh&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
   /tool fetch address=members.dyndns.org src-path=$str mode=http user=$ddnsuser \
         password=$ddnspass dst-path=("/DynDNS.".$ddnshost)
:delay 1
:global str [/file find name="DynDNS.$ddnshost"];
    /file remove $str
    :global ipddns $ipfresh
  :log error "DynDNS: IP actualizada a $ipfresh!"
    } else={
     :log warning "DynDNS: No necesita cambiar la ip";
    }
}

 

 

A continuación se muestra una explicación del script:

 

Comando Descripción
:global ddnsuser "USUARIO_DE_DYNDNS" Establece la variable global `ddnsuser` con el nombre de usuario de DynDNS.
:global ddnspass "PASS_DYNDNS" Establece la variable global `ddnspass` con la contraseña de DynDNS.
:global theinterface "OJO_NOMBRE_DE_INTERFAZ_INTERNET" Establece la variable global `theinterface` con el nombre de la interfaz de internet.
:global ddnshost "EJEMPLO.dyndns.org" Establece la variable global `ddnshost` con el nombre de host de DynDNS.
:global ipddns [:resolve $ddnshost]; Resuelve la dirección IP actual asociada al nombre de host de DynDNS.
:if ([ :typeof $ipfresh ] = nil ) do={
   :log warning ("DynDNS: No hay ip address en $theinterface .")
} else={
   :for i from=( [:len $ipfresh] - 1) to=0 do={
      :if ( [:pick $ipfresh $i] = "/") do={
         :set ipfresh [:pick $ipfresh 0 $i];
      }
   }
}
Verifica si la dirección IP obtenida para la interfaz es nula. Si es nula, registra una advertencia. Si no es nula, elimina cualquier parte de la dirección IP después de la última barra diagonal.
:if ($ipddns != $ipfresh) do={
   :log warning ("DynDNS: IP-en-DynDNS = $ipddns")
   :log warning ("DynDNS: IP-Actual = $ipfresh")
   :log error "DynDNS: Necesita actualizar IP , Enviando UPDATE de IP...!"
   :global str "/nic/update\?hostname=$ddnshost&myip=$ipfresh&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
   /tool fetch address=members.dyndns.org src-path=$str mode=http user=$ddnsuser \
         password=$ddnspass dst-path=("/DynDNS.".$ddnshost)
   :delay 1
   :global str [/file find name="DynDNS.$ddnshost"];
   /file remove $str
   :global ipddns $ipfresh
   :log error "DynDNS: IP actualizada a $ipfresh!"
} else={
   :log warning "DynDNS: No necesita cambiar la ip";
}
Verifica si la dirección IP obtenida es diferente de la dirección IP registrada en DynDNS. Si son diferentes, realiza una serie de acciones para actualizar la dirección IP en DynDNS y registra el cambio. Si son iguales, registra que no es necesario cambiar la dirección IP.