Script de actualización para DynDns

Improvisa :: Informática :: Script de actualización para DynDnsComo todos habremos podido comprobar la gestión de Ips dinámicas es más que terrible cuando necesitamos acceder a ellas. Para poder acceder a nuestra ip sin tener que sabernosla tendremos que utilizar el servicio DNS (o convertir nuestra ip en un nombre que siempre recordemos), para ello podemos utlizar los servidores de Dyndns que tiene creado lo que nosotros necesitamos y además la mayoría de los routers tiene la opción de actulizar su ip publica contra las máquina de DynDns. Existen muchas más compañias que nos ofrecen este servicio pero yo utilizo siempre esta.

El problema que surge con los servidores de DynDns es que la temporalidad de sus servicios gratuitos es "corta" si pasado un mes no actualizamos la Ip nos dará de baja el servicio. Esto nos ocurrirá más de lo que creemos ya que la mayoría de los routers de nuestras casa no son apagados hasta que se va la luz, con la consiguiente conversion de nuestra Ip de dinámica a estatica (por lo menos durante el mes que nos da de plazo DynDns), sino reiniciamos el router no nos actualizará la ip y siempre y cuando nuestro router tenga la posibilidad de actualizar el solito la nueva direccion contra dyndns (no todos los routers tienen esta opción).

Me he creado un script que resolverá este problema:

Para crear el script utilizaremos el editor de textos que nos venga en gana, yo uitlizo vim:

debian:~# vi /etc/actualiza_dyndns.sh

Pondremos lo siguiente (OJO! a los saltos de linea):

#!/bin/sh

 

USUARIO=TU_USURIO_EN_DYNDNS
PASSWORD=TU_PASSWORD_EN_DYNDNS
HOSTNAME=TU_HOST_EN_DYNDNS #(con dyndns.org, ejemplo juanmi.dyndns.org)
IP_DYNDNS=`host $HOSTNAME |awk ‘{ print $3 }’`
IP_ACTUAL=`/usr/bin/lynx -dump http://www.netins.net/dialup/tools/my_ip.shtml
| grep -A2 "Your current IP Address is:" | tail -n1 | tr -d ‘ ‘`
DIA_ACTUAL_DEL_MES=`date |awk {‘print $3’}`
HORA_ACTUAL_DEL_DIA=`date |awk {‘print $4’} |cut -d":" -f1`
RESULTADO="Las IPs coinciden, ne se realiza cambio."
# Comprobamos que la ip actual nos la da bien
if [ "$IP_ACTUAL" = "unknown" ] ; then
   RESULTADO="Revisar la IP_ACTUAL da como resultado Unknow";
   exit
fi
# Si las IPs son diferentes actualizamos
if [ "$IP_DYNDNS" != "$IP_ACTUAL" ] ; then
   wget -q -O /tmp/actualizacion_dyndns.log "http://$USUARIO:$PASSWORD@members.dyndns.org/nic/update?system=dyndns&hostname=$HOSTNAME&myip=$IP_ACTUAL&wildcard=OFF&offline=NO"
   RESULTADO="La IP $IP_DYNDNS ha sido cambiada por $IP_ACTUAL";
fi
# Si las IPs son iguales pero estamos en el dia 15 del mes entre las 15 horas y las 19 horas actualizamos para resolver problema de caducidad.
if [ "$IP_DYNDNS" = "$IP_ACTUAL" -a "$DIA_ACTUAL_DEL_MES" = 15 -a "$HORA_ACTUAL_DEL_DIA" -gt 15 -a "$HORA_ACTUAL_DEL_DIA" -le 19 ]; then
   wget -q -O /tmp/actualizacion_dyndns.log "http://$USUARIO:$PASSWORD@members.dyndns.org/nic/update?system=dyndns&hostname=$HOSTNAME&myip=123.123.123.123&wildcard=OFF&offline=NO";
   wget -q -O /tmp/actualizacion_dyndns.log "http://$USUARIO:$PASSWORD@members.dyndns.org/nic/update?system=dyndns&hostname=$HOSTNAME&myip=$IP_ACTUAL&wildcard=OFF&offline=NO";

   RESULTADO="La IP ha sido cambiada aunque coincidian, resuelve la caducidad del servicio";
fi

#Escribimos en el log y sacamos por pantalla
echo "`date` — $RESULTADO"
echo "`date` — $RESULTADO" >> /var/log/actualizacion_dyndns.log

Debemos darle permisos de ejecución:

debian:~# chmod x /etc/actualiza_dyndns.sh

Y ahora debemos crear un enlace simbolico en el cron, para que mire las ips cada hora:

debian:~# ln -s /etc/actualiza_dyndns.sh /etc/cron.hourly/actualizacion_dyndns.sh

Ya esta, podemos ver en el log que tal esta funcionando:

debian:~# vi /var/log/actualizacion_dyndns.log

Espero que os sirva, saludos.

Comentarios

    Warning: Use of undefined constant type - assumed 'type' (this will throw an Error in a future version of PHP) in /home/improvisa_com/web/improvisa.com/public_html/wp-content/themes/grassland/comments.php on line 38
  • CeLSuM dice:

    Genial Juanmi!

    Me alegro de tener a mano este script ya sabes que es muy útil y necesario para todos los que tenemos intención de levantar algunos servicios y disponemos de ip dinámica.

    Gracias..

    Saludos…

  • Lukus dice:

    estoy ya me lo contareis lentamente, que tengo ip dinamica, pero aqui ya me pierdo

  • CeLSuM dice:

    Sólo decir que ya lo he hecho, aunque todavía no se me ha creado ningún log, supongo que tendré que esperar una hora.

    Por cierto lukus, para hacer esto, si no me equivoco, estamos hablando de hacerlo bajo linux…. jejeje

    Salu2

  • Juanmi dice:

    Cuentanos en el foro si tienes problemas con el log (yo ayer tuve y ya lo solucione). Besines

  • Tase dice:

    Yo lo tengo hecho con un programa de un tal Angus Makay que se llama ez-ipupdate y que venia en el firmware del router(Busybox Oleg) y ocupa la friolera de 130Kb.

    Ahora que veo lo sencillo y breve que lo hace el Juambru el otro ya podía haberlo hecho en asi y no un compilado… Weno yo uso el programita ese con el siguiente script de abajo que tiene como curioso la forma en que obtiene la IP(conste que la copié :-P) . La única ventaja que le veo es que entiendo que pasaría a través de un proxy, porque por lo demás hace en 2 líneas lo que el Jami en una.

    Para mi caso aplicare la máxima de la informática de : Si funciona, no lo toques.

    Saludetes.

    THCTASE

    #!/bin/sh

    USUARIO=TU_USURIO_EN_DYNDNS
    PASSWORD=TU_PASSWORD_EN_DYNDNS
    HOST=TU_HOST_EN_DYNDNS

    ip=`wget -O – http://checkip.dyndns.org | sed -e ‘s/.*//’ |sed -e ‘s/Current IP CheckCurrent IP Address: //’`

    #El log
    echo Actualizando el servicio t913572595.dyndns.org con la ip: $ip >> /tmp/syslog.log

    #La llamada al programita
    ez-ipupdate -S dyndns -u $USUARIO:$PASSWORD -h $HOST –address $ip

  • Juanmi dice:

    Es otra forma, me parece incluso mejor que la mia ya que no utiliza «lynx».