Como executar um script após alteração de IP

2

Minha máquina Debian é atualmente parte da minha LAN doméstica, atrás da caixa do ISP que lida com todas as atividades relacionadas à rede (DHCP, firewall, telefonia, IPTV, ...). Um caso clássico de rede doméstica residencial.

Eu pretendo mover o servidor para um comutador entre o conversor de fibra (entrada de fibra, saída RJ45) e a caixa ISP - e configurá-lo para receber meu endereço IP público da Internet via DHCP do ISP.

Meu ISP infelizmente força uma mudança deste endereço de tempos em tempos (a fim de fornecer um "serviço profissional" de um IP fixo por uma taxa). Eu escrevi um script que verifica meu endereço IP como visto na Internet e modifica a entrada DNS do meu nome externo em caso de incompatibilidade.

Eu posso rodar este script periodicamente via cron , mas seria mais interessante acioná-lo quando o eth0 IP mudar (o que acontecerá quando o ISP enviar um novo endereço "à sua caixa", o que na verdade é agora meu servidor).

Existe um mecanismo desse tipo disponível (ações a serem feitas após uma alteração do endereço IP)?

    
por WoJ 14.02.2016 / 20:54

2 respostas

2

Você pode usar um script de despachante do Network Manager para executar um script quando a interface for ativada ou desativada, o que fará quando o ISP alterar seu endereço IP (ele descartará sua conexão e trará de volta com um novo. ).

Veja os arquivos em /etc/NetworkManager/dispatcher.d/ . No meu, há um script simples 20-chrony que faz um bom modelo:

#!/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

Você pode adaptar as duas instruções if para trabalhar com seus scripts ou, se seus scripts precisarem ser executados somente quando a interface aparecer, basta modificar o primeiro if e remover o segundo.

    
por 14.02.2016 / 21:52
1

Se você estiver em um sistema com a ferramenta dbus-monitor (1), poderá iniciar este programa como um daemon para monitorar as alterações de endereço da interface. Não tenho certeza de qual mensagem é, mas algo como:

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

Você também pode permitir o monitoramento livre do dbus (sem filtros) para observar o que acontece quando a conexão de rede é ativada.

    
por 14.02.2016 / 22:46