Antes de marcar como duplicado: no se trata de DNS dinámico o cosas similares.
Sé cómo ejecutar un script cada vez que mi red sube; es una simple cuestión de agregar un script en el directorio /etc/NetworkManager/dispatcher.d
como este:
#!/bin/bash
IF=$1
STATUS=$2
case "$2" in
up)
logger -s "NM Script up $IF triggered"
su rmano -c /home/romano/bin/myscript
;;
down)
logger -s "NM Script down $IF triggered"
;;
*)
;;
esac
En mi caso, myscript
es muy simple: ifconfig -a > ~/Dropbox/myifconfig.txt
lo uso porque necesito saber mi IP local de todas partes de la Universidad, y cambiará con frecuencia.
Hasta ahora todo bien, el sistema funciona bien. Pero desafortunadamente, el DHCP aquí está configurado para que la IP se cambie en algún momento sin una interfaz inactiva. En ese caso, el script no se ejecuta (lógicamente) y el archivo no se actualiza.
No puedo usar un enfoque DynDNS porque el cambio está en la IP local , no en la externamente visible.
Podría sondear, simplemente poniendo el script en cron y ejecutándolo cada minuto o escribiendo uno un poco más complejo (... si se cambia la IP, escriba el archivo, de lo contrario no haga nada) y vuelva a colocarlo como una tarea en segundo plano, pero No es elegante. Entonces la pregunta es:
¿Hay alguna forma de activar un script cuando cambia mi IP local?
ACTUALIZACIÓN 1
Traté de poner un script /etc/dhcp/dhclient-enter-hooks.d/
, basado en el existente /etc/dhcp/dhclient-enter-hooks.d/resolvconf
, pero no se activará. Sospecho (se necesita confirmación) que NM (administrador de red) está haciendo la negociación dhcp por sí mismo, sin llamar al comando dhcp ...
fuente
dhclient-enter-hooks.d
script ... ¡pero nunca lo he probado! El/etc/dhcp/dhclient-enter-hooks.d/resolvconf
script existente podría ser útil en términos de sintaxis y qué señales buscar ("$reason" == "BOUND"
¿tal vez?)Respuestas:
Según la página de manual de NetmorkManager, uno de los eventos es
Creo que simplemente puedes cambiar
a
fuente
Proporciono un script que escucha las señales dbus, lo que le permitirá reaccionar más rápido que si tuviera que sondear los cambios en la configuración actual de su red. Ayuda en los sistemas donde los scripts / etc / no se ejecutan cuando lo desea (como en mi sistema 14.04).
mis ganchos de entrada / salida.d no funcionan
NetworkManager inicia dhclient con el indicador
-sf /usr/lib/NetworkManager/nm-dhcp-client.action
que parece anular el comportamiento normal de enlace de entrada / salida. El comportamiento predeterminado con dhclient es llamar a los scripts/etc/dhcp/dhclient-{enter,exit}-hooks.d
. Esos no reciben ninguna llamada en mi sistema.mis scripts de NetworkManager dispatcher.d tampoco funcionan
Sin embargo, NM invoca un conjunto diferente de scripts, en
/etc/NetworkManager/dispatcher.d
, para informar sobre varios eventos. La página del comando man NetworkManager (8) definedhcp4-change
ydhcp6-change
acciones que parecen hacer exactamente lo que usted desea. A pesar de lo que dice la página de manual, en mi sistema al menos, soloup
y lasdown
acciones se invocan. No puedo hacer que esos guiones disparen sobre otra cosa. Por lo tanto, esta tampoco es una gran vía para monitorear los cambios de IP.entonces, espíe directamente sobre las señales dbus emitidas por NM
nm-dhcp-client.action
( fuente ), desde la línea de comandos, simplemente convierte todas las variables de entorno establecidas por dhclient en una señal dbus. Esas variables de entorno se definen enman dhclient-script
(8). Uno de particular interés es$new_ip_address
. Lo que podría hacer, como lo sugiere @Bernhard, es monitorear la señal y actuar en consecuencia según su contenido.Aquí hay un programa que analizará todos los datos de eventos señalados por ese binario:
La salida de dbus-monitor no es fácil de analizar en scripts. Quizás sea más fácil disparar ante la presencia de una determinada palabra (s) clave, por ejemplo
new_ip_address
, y desde allí utilizar diferentes herramientas para obtener la información que cambió (por ejemplo, ip o ifconfig).¡Dale un tiro!
fuente
Enfoque de sondeo con script de python. La idea básica es analizar continuamente la salida
ip -4 -o add show <INTERFACE>
y comparar el resultado actual con la iteración anteriorfuente
Aunque NetworkManager está utilizando dhclient, proporciona sus propios binarios como reemplazo de los scripts dhclient. (Para referencia: puede encontrar el binario NM en
/usr/lib/NetworkManager/nm-dhcp-client.action
).Tal vez podría adoptar un enfoque diferente: NM está emitiendo una señal DBus en todos los eventos. Puede escuchar en el sistema DBus el evento apropiado y activar su script en base a esto ...
fuente