Notificar cambios en la IP pública por email y/o Telegram en Mikrotik

2024-05-20

En este articulo escribí la manera en la que podemos enviar notificaciones desde un router Mikrotik con RouterOS a Telegram y en este otro para enviarlas por correo electrónico.

Aprovechando estas características vamos a realizar un script para que cada vez que cambie la dirección IP publica del router nos lo notifique enviando un mensaje tanto por correo electrónico como por Telegram

⚠️ La presente publicación se ha realizado sobre un router Mikrotik AX³3 y la versión 7.11.2 de RouterOS

Lo primero de todo agradecer al usuario diamuxin de foros Adslzone por su aporte donde publicó este script.

Creamos un nuevo script desde System -> Script y pulsamos en el icono con el símbolo + azul

Elige un nombre para el script en el campo Name y en el campo Source introducimos el siguiente código,

🗨️ Recuerda que para que este script funcione tienes que tener bien configurado el correo electrónico en RouterOS y haber creado previamente el modulo MyTGBotSendMessage para Telegram

:global CurrentIP;
:local NewIP ([/tool fetch url=http://api.ipify.org/ as-value output=user] -> "data")
:delay 2s


:if ($NewIP != $CurrentIP) do={
    # Variables
    :local Time [/system clock get time];
    :local Date [/system clock get date];
    :local DeviceName [/system identity get name];

    # START Send Email
    /tool e-mail send to="[email protected]" from="Router R1" subject="\F0\9F\9F\A2 $DeviceName: La WAN IP ha cambiado%0ANueva IP: $NewIP%0AAnterior IP: $CurrentIP"
    # END Send Email

    # START Send Telegram Module
    :local MessageText "\F0\9F\9F\A2 $DeviceName: La WAN IP ha cambiado%0ANueva IP: $NewIP%0AAnterior IP: $CurrentIP";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
    #END Send Telegram Module


    :log info "Detectada nueva IP WAN: $NewIP - Anterior IP: $CurrentIP";
    :delay 5s;

    # Guarda la IP actual en una variable global
    :set CurrentIP $NewIP;


} else={
    :log info "INFO: WAN IP anterior $CurrentIP es igual a la IP actual, no ha cambiado";


    # START Send Email
    /tool e-mail send to="[email protected]" from="Router R1" subject="\F0\9F\9F\A2 $DeviceName: La WAN IP no ha cambiado:%0A$NewIP"
    # END Send Email


    # Recibimos un aviso vía Telegram en caso que no haya cambiado la IP.
    # START Send Telegram Module
    :local MessageText "\F0\9F\9F\A2 $DeviceName: La WAN IP no ha cambiado:%0A$NewIP";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
    #END Send Telegram Module

Ahora solo queda programar cuando queremos que se ejecute el script, en el ejemplo se ejecuta todos los días a las 06:45 horas

Cuando cambie la dirección IP del router recibiremos un mensaje de Telegram y/o por correo electrónico

Y si no ha cambiado también 😜

Espero que te haya gustado, pasa un gran día 🐧

Referencia


Ingrese la dirección de su instancia