Script para monitorizar cambio de IP Pública

 


Llevo un tiempo dándole vueltas a la posibilidad de averiguar si nuestro proveedor de internet nos cambia la IP pública y de qué manera poder saber cuando se hace ese cambio.
Esto es interesante para no depender de un servicio DDNS como DynDNS, No-IP etc.

He visitado numerosas web y he recopilado información de todas ellas para poder hacer este tutorial.

Para esto utilizaré mi Raspberry Pi 4 que está siempre conectada a Internet. Como sistema operativo he usado Ubuntu 21.10.

Los trabajos a realizar son los siguientes:

  1. Crear un script, que revise si la IP cambia de valor.
  2. Instalar y configurar un programa que envíe emails con nuestra cuenta. 
  3. Ejecutar una tarea para que esto se realice cada cierto tiempo.

1- Crear un Script

Buscando por Internet he visto varios script interesantes. He elegido uno que encontré en la web de Victorhck, que hace esta tarea, y que modificaré para arreglar un pequeño problema que tiene. 
¿y cual es ese pequeño problema que tiene? Pues resulta que, algunas veces, el servicio que nos tiene que dar la ip pública (dyndns.org) falla y no da IP, con lo que al comparar la IP anterior con la IP sin valor, recibiremos un email en blanco. 
He agregado al script de Victorhck las líneas en amarillo, con lo que si el resultado es una IP nula, volverá a consultar hasta obtener una IP válida. De esta forma, solo recibiremos un email cuando realmente cambie la IP.
También he cambiado la dirección de consulta de IP por la de checkip.amazonaws.com , ya que me parece mucho mas estable y fiable.

#!/bin/bash
#https://chapuboot.blogspot.com/
#victorhckinthefreeworld.com
#define archivo donde almacena la ip pública actual

EXT_IP_FILE="/home/usuario/ipactual"
timestamp=$( date +%T )
curDate=$( date +"%d-%m-%y" )
CURRENT_IP=""
while [ -z $CURRENT_IP ]; do

#Conseguir la IP pública

CURRENT_IP=$(curl ifconfig.me 2> /dev/null)

#CURRENT_IP=$(curl -silent -L http://checkip.amazonaws.com|tail -n 1)

#Si existe el archivo se saca la IP que había
 
if [ -f $EXT_IP_FILE ]; then
   KNOWN_IP=$(cat $EXT_IP_FILE)
 else
   #Si no existe el archivo se crea y se guarda la IP pública actual
   KNOWN_IP= touch ipactual
   KNOWN_IP=$(cat $EXT_IP_FILE)
 fi
done

#Comprueba si la IP actual ha cambiado de la IP que se había guardado

if [ "$CURRENT_IP" != "$KNOWN_IP" ]; then
   echo $CURRENT_IP > $EXT_IP_FILE
   #Si es distinta la IP se envía un correo con la IP actual
   mail -s "IP Actual $(< $EXT_IP_FILE)" email_a_destinar@loquesea.com < $EXT_IP_FILE
   #Se guardan las IPs en un archivo de log
   echo $curDate $timestamp "* NUEVA IP: " $(< $EXT_IP_FILE) >> log.txt  
fi

Esto lo copiamos y lo pegamos en un archivo de texto al que llamaremos TestIP.sh y lo guardamos en nuestra carpeta personal.





Cambiaremos los datos de la línea 4 donde pondremos nuestro usuario del sistema y la línea 26 donde pondremos la dirección de email al que vamos a enviar la información.
Ya tan solo de daremos permisos de ejecución al script y lo tendríamos funcionando.

chmod +x TestIP.sh

2- Instalar ssmtp y configurar la cuenta de correo.

SSMTP es un programa que entrega correo electrónico desde un ordenador local a un servidor de correo, su uso principal es reenviar el correo electrónico automatizado (como las alertas del sistema) desde un equipo a una dirección de correo electrónico externa.

Para instalar ssmtp basta con escribir el siguiente comando en una terminal

sudo apt install ssmtp -y

Para poder usar el comando mail de la línea 23 del script también instalaremos mailutils

sudo apt install mailutils -y

Tambien instalaremos curl

sudo apt install curl

Para configurar el programa editamos su archivo ssmtp.conf 

sudo nano /etc/ssmtp/ssmtp.conf


Rellenamos la línea 6 con tu dirección de correo
root=tu_correo@gmail.com
Rellenamos la línea 10 con el smtp de gmail
mailhub=smtp.gmail.com:587
Descomentamos la línea 21
FromLineOverride=YES
Añadimos a continuación las siguientes líneas

AuthUser=tu_correo@gmail.com
AuthPass=tucontraseñasinespacios
UseSTARTTLS=YES

Tengo que aclarar que la contraseña de AuthPass no es la contraseña de tu cuenta de Gmail.

Yo voy a usar una cuenta Gmail, que tiene activada la verificación en dos pasos, la cual ya no tiene la opción de "acceso a aplicaciones poco seguras" (necesaria para aplicaciones de terceros),  Por esta razón deberemos crear una contraseña única en el apartado "Contraseñas de Aplicaciones"

Para obtenerla deberás ir a la Configuración de tu cuenta, Seguridad



Se generará una contraseña de 15 dígitos que será la que usarás para configurar el apartado de AuthPass.

**Ojo, la contraseña se usa sin los espacios, aunque te la muestra con espacios entre dígitos, hay que pegarla sin los espacios **

¡¡Vamos a probarlo!!

Para saber si funciona tecleamos el siguiente comando en consola.

echo "Testing...1...2...3" | ssmtp mi_email@gmail.com

No deberá arrojar ningún error y si vamos a nuestra bandeja de entrada, veremos que tenemos un nuevo email.

Para saber que está funcionando el script, en una terminal escribimos el siguiente comando.

./TestIP.sh

La primera vez que lo ejecutemos, aparentemente no hará nada, pero, si revisas tu carpeta personal, habrá creado dos archivos, uno llamado ipactual y el otro log.txt y en la bandeja de entrada de tu correo tendrás un nuevo email indicando tu IP Pública.
Si ejecutamos más veces el script, no ocurrirá nada, ya que nuestra IP no ha cambiado. Si tenemos una VPN y la activamos,  reiniciamos o apagamos el router 5 o 10 minutos, al ejecutar el Script es posible que envíe un email con la nueva IP.



3- Automatizar la tarea.

Vamos a hacer que el script TestIP.sh se ejecute cuatro veces al día, osea cada 6 horas a través de Cron.

Crearemos un archivo Crontab, así que desde la terminal ejecutamos el siguiente comando:

sudo crontab -u usuario -e

Dentro pegaremos la siguiente instrucción:

0 */6 * * *  /home/usuario/TestIP.sh



Esto quiere decir que cada 6 horas el script se ejecutará y hará las comprobaciones pertinentes.


Enlaces de Interés

Victorhck in the free world

Enlace al Script

Comentarios

Entradas populares de este blog

TP-Link WR841ND repetidor WIFI

Instalar y Configurar aMule en Ubuntu

II. Vodafone Technicolor Tc7230 modo bridge.