Cómo ejecutar un script al cambiar de IP

Cómo ejecutar un script al cambiar de IP

Actualmente, mi máquina Debian forma parte de la LAN de mi hogar, detrás de la caja del ISP que maneja todas las actividades relacionadas con la red (DHCP, firewall, telefonía, IPTV, ...). Un caso clásico de red doméstica residencial.

Planeo mover pronto el servidor a un conmutador entre el convertidor de fibra (entrada de fibra, salida RJ45) y la caja del ISP, y configurarlo para recibir mi dirección IP pública de Internet a través de DHCP desde el ISP.

Lamentablemente, mi ISP obliga a cambiar esta dirección de vez en cuando (para poder proporcionar un "servicio profesional" de una IP fija mediante una tarifa). Escribí un script que verifica mi dirección IP tal como se ve en Internet y modifica la entrada DNS de mi nombre externo en caso de que no coincida.

Puedo ejecutar este script periódicamente, cronpero sería más interesante activarlo cuando eth0cambie la IP (lo que sucederá cuando el ISP inserte una nueva dirección "en su casilla", que en realidad ahora es mi servidor).

¿Existe algún mecanismo de este tipo disponible (acciones a realizar ante un cambio de dirección IP)?

Respuesta1

Puede usar una secuencia de comandos del despachador de Network Manager para ejecutar una secuencia de comandos cuando la interfaz se activa o desactiva, lo que hará cuando el ISP cambie su dirección IP (interrumpirá su conexión y luego la restablecerá con una nueva).

Eche un vistazo a los archivos en /etc/NetworkManager/dispatcher.d/. En el mío hay un script sencillo 20-chronyque constituye una buena plantilla:

#!/bin/sh
# This is a NetworkManager dispatcher script for chronyd to set its NTP sources
# online/offline when a default route is configured/removed on the system.

export LC_ALL=C

if [ "$2" = "up" ]; then
        /sbin/ip route list dev "$1" | grep -q '^default' &&
                /usr/bin/chronyc -a online > /dev/null 2>&1
fi

if [ "$2" = "down" ]; then
        /sbin/ip route list | grep -q '^default' ||
                /usr/bin/chronyc -a offline > /dev/null 2>&1
fi

exit 0

Puede adaptar las dos ifdeclaraciones para que funcionen con sus scripts, o si sus scripts solo necesitan ejecutarse cuando aparece la interfaz, simplemente modifique el primero ify elimine el segundo.

Respuesta2

Si está en un sistema con la herramienta dbus-monitor(1), puede iniciar este programa como un demonio para que pueda monitorear los cambios de dirección de la interfaz. No estoy seguro de qué mensaje es, pero es algo como:

dbus-monitor 'some-filtering-expression' |
while read -r line; do
    xargs /path/to/your/script "${line"}
done

También puede dejar que dbus-monitor se ejecute libremente (sin filtros) para observar lo que sucede cuando se activa la conexión de red.

información relacionada