Hola a todos,
os dejo el método que yo utilizo por si a alguien le es útil. Mi router está conectado a internet a través de una dirección privada, pasa a través del NAT de otro router con lo que no me es posible consultar la ip pública localmente. Lo que yo necesitaba era conocer el cambio de la ip pública al poco tiempo de que se produjera porque utilizo mi ordenador de forma remota habitualmente. El proceso que sigo es conectarme por ssh a mi router (sobre un puerto no estándar) y desde el router enciendo el ordenador mediante etherwake, aprovechando la funcionalidad wake-on-lan de la tarjeta de red. Una vez he encendido el ordenador ya me es posible acceder a él de forma remota y me evito tenerlo encendido contínuamente cuando no lo utilizo.
Así que necesitaba conocer el cambio de la ip pública de mi router de forma periódica y remota. Para ello utilizo el siguiente script:
root@openwrt:~# cat /mail_ip.sh
#!/bin/sh
cd /tmp/
wget http://www.biranchi.com/ip.php
mv ip.php ip.txt
if cmp -s /tmp/old.txt /tmp/ip.txt
then
echo "doo nothing"
else
echo "The files are different"
mutt -s "openwrt" aaaaaaaaa@gmail.aaa < /tmp/ip.txt
cp /tmp/ip.txt /tmp/old.txt
fi
root@openwrt:~#
Básicamente lo que hace el script es descargar la página
www.biranchi.com/ip.php y guardarla en un fichero en la carpeta tmp (así evito reescribir en la memoria flash de manera innecesaria). Después cambio el nombre al fichero y lo comparo con otro fichero, old.txt. En la primera comprobación fallará, con lo que el script me envía un correo electrónico mediante mutt a la dirección de correo aaaaaaa@gmail.aaa. Al finalizar cambio el nombre del fichero ip.txt a old.txt para consevarlo como referencia para futuras comprobaciones. Aquí está la parte útil, ejecuto este script de forma periódica añadiendo la siguiente línea a cron:
root@openwrt:~# crontab -l
*/10 * * * * /mail_ip.sh
root@openwrt:~#
El script comprueba cada 10 minutos si se ha cambiado la ip pública de mi router y sólo en el caso de que sea así me envía un correo electrónico para notificarlo. Se puede variar el tiempo para hacerlo en el periodo que cada uno necesite. En mi caso lo normal es que no se produzcan cambios en semanas, pero me resulta más práctico que en el caso de que se produzca saberlo casi de forma inmediata. Además el script apenas supone ninguna carga para el router.
Para que sea posible el envío del correo es necesario tener instalado mutt y msmtp y libncurses. Yo añado el siguiente fichero en la carpeta /root para evitar que se genere un registro local de los mail enviados (escribe en la memoria flash igualmente):
root@openwrt:~# cat .muttrc
set realname="AAAAAAA"
set copy = no
root@openwrt:~#
Y también es necesario configurar msmtp con los datos del servidor de correo y la cuenta que se utilizará (en mi caso es de gmail) para hacer el envío de correos:
root@openwrt:~# cat /etc/msmtprc
# Example for a system wide configuration file
# A system wide configuration file is optional.
# If it exists, it usually defines a default account.
# This allows msmtp to be used like /usr/sbin/sendmail.
# The SMTP smarthost.
# Construct envelope-from addresses of the form "user@oursite.example".
#auto_from on
#maildomain oursite.example
# Use TLS.
#tls on
#tls_trust_file /etc/ssl/certs/ca-certificates.crt
# Syslog logging with facility LOG_MAIL instead of the default LOG_USER.
account default
host smtp.gmail.com
port 587
auth on
user aaaaah@aaaaa.com
password XXXXXXXXXX
auto_from off
from aaaaaaaa@gmail.aaa
tls on
tls_starttls on
tls_certcheck off
#logfile
#syslog LOG_MAIL
root@openwrt:~#
Espero que a alguien le sirva.
Saludos!