Actualizando entrada DNS con IP dinámico en changeip.com

Introducción

El siguiente script tiene la capacidad de actualizar una entrada de DNS dinámica con el servicio de ChangeIP.com en caso de que nos haya cambiado el IP público de nuestra conexión. El servicio de ChangeIP.com permite tener una entrada de DNS que nos ayudará a encontrar siempre un servicio o dispositivo cuando su conexión dispone de IP dinámico.  En este caso el script es para utilizarlo con el sistema operativo RouterOS.

Es necesario crear previamente una cuenta para poder utilizar el script, para crearla ir al sitio de registro.

Nota: Es importante tener en consideración no abusar en la cantidad de actualizaciones que realicemos ya que un firewall nos denegará el acceso al servicio para evitar sobrecarga en el sistema

Script

Al momento de escribir este artículo –Mayo 2011– la última versión del script disponible tiene la capacidad de chequear nuestro IP remotamente, es decir comprobando el IP con el que esta llegando nuestra petición a sus servicios en un puerto diferente  –por defecto el puerto del servicio http es el 80– y de esta manera poder saltear algún proxy que pueda existir en la conexión, el puerto contra el que chequea es el 8245.

Ha sido testeado en las versiones 4.9 y 5.2 del RouterOS y comprobado su correcto funcionamiento.

El código del script es el siguiente:

Open a terminal window and paste both scripts below.
Then using the script window change the UserID, Password, and hostname.

/system script
add name=HomingBeacon policy=\
    ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api \
    source="# HomingBeacon Main Dynamic DNS Update Script\r\
    \n# Written by Sam Norris, ChangeIP.com\r\
    \n# 20100728 Tested on RouterOS 4.9\r\
    \n# 20110511 Tested on RouterOS 5.2\r\
    \n\r\
    \n# Set your specific ChangeIP.com preferences here.\r\
    \n:global ddnsuser \"USERID\"\r\
    \n:global ddnspass \"PASSWORD\"\r\
    \n:global ddnshost \"HOSTNAME.changeip.net\"\r\
    \n# Change ddnsport to 8245 to bypass proxy.\r\
    \n:local ddnsport 80\r\
    \n\r\
    \n# Do not edit anything below this line.  You have been warned.\r\
    \n# Abusive updates to the system will cause firewall blocks.\r\
    \n\r\
    \n# Please be considerate and\r\
    \n# do not let this script run more than once per 3-5 minutes.\r\
    \n\r\
    \n:log info \"DDNS: Starting.\"\r\
    \n\r\
    \n# Initialize checkpoint\r\
    \n:global ddnscheckpoint\r\
    \n:if ([:typeof \$ddnscheckpoint] = \"time\") do={\r\
    \n\t:log info (\"DDNS: Last check was \" . ([/system clock get time] - \$d\
    dnscheckpoint))\r\
    \n} else={\r\
    \n\t:log info \"DDNS: Cannot determine checkpoint, set now.\"\r\
    \n\t:global ddnscheckpoint ( [/system clock get time] - 1d )\r\
    \n}\r\
    \n\r\
    \n# Get the current IP\r\
    \n:if ([/system clock get time] - \$ddnscheckpoint > [:totime 180s] || [/s\
    ystem clock get time] - \$ddnscheckpoint < [:totime 0s]) do={\r\
    \n   :log info \"DDNS: Performing remote IP detection.\"\r\
    \n   /tool fetch address=\"ip.changeip.com\" host=\"ip.changeip.com\" src-\
    path=(\"/\?\" . [/int eth get 0 mac-address ]) dst-path=\"ip.changeip.com.\
    txt\" mode=http port=\$ddnsport\r\
    \n   :global ddnscheckpoint [/system clock get time]\r\
    \n} else={\r\
    \n   :log info \"DDNS: Please be considerate and wait a few seconds longer\
    .\"\r\
    \n   :break\r\
    \n}\r\
    \n\r\
    \n# Parse the IP address received from fetch script.\r\
    \n\t:global ddnslastip\r\
    \n\t:local html [/file get \"ip.changeip.com.txt\" contents]\r\
    \n\t:local ddnsip [:pick \$html ([:find \$html \"\"] ]\r\
    \n\r\
    \n# Is it a valid IP and is it different than the last one\?\r\
    \n\t:if ([:typeof [:toip \$ddnsip]] = \"ip\" AND \$ddnsip != \$ddnslastip \
    ) do={\r\
    \n\t\t:log info \"DDNS: Sending UPDATE with \$ddnsip\"\r\
    \n\t\t:log info [/tool dns-update name=\$ddnshost address=\$ddnsip key-nam\
    e=\$ddnsuser key=\$ddnspass ]\r\
    \n\t\t:global ddnslastip \$ddnsip\r\
    \n\t} else={\r\
    \n\t\t:log info \"DDNS: No update required.\"\r\
    \n\t}\r\
    \n}\r\
    \n"

/system scheduler
add comment="ChangeIP.com Dynamic DNS Update" \
  disabled=no \
  interval=5m name=DynamicDNS \
  on-event=HomingBeacon \
  policy=read,write start-time=startup

Para poder utilizar el script en RouterOS es necesario copiar todo y pegarlo directamente en una terminal, automáticamente creará el script y un scheduler -cron- que chequeará el IP que se tiene cada 5 minutos y en caso que haya cambiado lo actualizará en el servicio de ChangeIP.com

Puede ser descargado directamente desde su fuente.

Por: Maximiliano Dobladez Fuente: ChangeIP.com
Bajo Licencia CC 2.5 - Attribution-Noncommercial-No Derivative