Antes de marcar como duplicado: não se trata de DNS dinâmico ou algo semelhante.
Eu sei como executar um script toda vez que minhas redes são ativadas; é simples adicionar um script no diretório /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
No meu caso, myscript
é muito simples ifconfig -a > ~/Dropbox/myifconfig.txt
--- eu o uso porque preciso conhecer meu IP local de qualquer lugar da Universidade, e ele mudará frequentemente.
Até aí tudo bem, o sistema funciona bem. Infelizmente, porém, o DHCP aqui está configurado para que o IP seja alterado em algum momento sem uma redução / redução da interface. Nesse caso, o script (logicamente) não é executado e o arquivo não é atualizado.
Não posso usar uma abordagem DynDNS porque a alteração está no IP local , não na externamente visível.
Eu poderia pesquisar, simplesmente colocando o script no cron e executá-lo a cada minuto ou escrever um um pouco mais complexo (... se o IP for alterado, escreva o arquivo caso contrário não faça nada) e coloque-o novamente como uma tarefa em segundo plano, mas não é elegante. Então a questão é:
Existe alguma maneira de acionar um script quando meu IP local é alterado?
ATUALIZAÇÃO 1
Tentei inserir um script /etc/dhcp/dhclient-enter-hooks.d/
, com base no existente /etc/dhcp/dhclient-enter-hooks.d/resolvconf
, mas ele não será acionado. Eu suspeito (confirmação necessária) que NM (gerenciador de rede) está fazendo a negociação dhcp por si só, sem chamar o comando dhcp ...
fonte
dhclient-enter-hooks.d
script ... mas nunca tentei! O actual/etc/dhcp/dhclient-enter-hooks.d/resolvconf
roteiro pode ser útil em termos de sintaxe e que sinais de olhar para ("$reason" == "BOUND"
talvez?)Respostas:
De acordo com a página de manual do NetmorkManager, um dos eventos é
Eu acho que você pode simplesmente mudar
para
fonte
Estou fornecendo um script que escuta os sinais do dbus, o que permitirá que você reaja mais rapidamente do que se estivesse pesquisando alterações na sua configuração de rede atual. Ajuda em sistemas onde scripts / etc / não são executados quando você gostaria (como no meu sistema 14.04).
meus hooksd de entrada / saída não funcionam
O NetworkManager inicia o dhclient com o sinalizador
-sf /usr/lib/NetworkManager/nm-dhcp-client.action
que parece substituir o comportamento normal do gancho de entrada / saída. O comportamento padrão com o dhclient é chamar scripts/etc/dhcp/dhclient-{enter,exit}-hooks.d
. Esses não são chamados no meu sistema.meus scripts do dispatcher do NetworkManager.d também não funcionam
NM, no entanto, invoca um conjunto diferente de scripts, in
/etc/NetworkManager/dispatcher.d
, para informar sobre vários eventos. A página do manual NetworkManager (8) definedhcp4-change
edhcp6-change
ações que parecem fazer exatamente o que você deseja. Apesar do que a página de manual diz, pelo menos no meu sistema, apenasup
e asdown
ações são invocadas. Não consigo fazer com que esses scripts disparem em mais nada. Portanto, este também não é um ótimo caminho para monitorar alterações de IP.então, bisbilhotar diretamente nos sinais dbus emitidos pelo NM
nm-dhcp-client.action
( fonte ), na linha de comando, simplesmente converte todas as variáveis de ambiente definidas pelo dhclient em um sinal dbus. Essas variáveis de ambiente são definidas emman dhclient-script
(8). Um de particular interesse é$new_ip_address
. O que você pode fazer, conforme sugerido por @Bernhard, é monitorar o sinal e agir de acordo com o conteúdo.Aqui está um programa que espionará todos os dados de eventos sinalizados por esse binário:
A saída do dbus-monitor não é simples de analisar em scripts. Talvez seja mais fácil acionar a presença de determinadas palavras-chave, por exemplo
new_ip_address
, e a partir daí usar ferramentas diferentes para obter as informações que foram alteradas (por exemplo, ip ou ifconfig).Experimente!
fonte
Abordagem de sondagem com script python. A idéia básica é analisar continuamente a saída
ip -4 -o add show <INTERFACE>
e comparar o resultado atual com a iteração anteriorfonte
Embora o NetworkManager esteja usando o dhclient, ele fornece seus próprios binários como um substituto para os scripts do dhclient. (Para referência: você pode encontrar o binário NM em
/usr/lib/NetworkManager/nm-dhcp-client.action
).Talvez você possa adotar uma abordagem diferente: o NM está emitindo um sinal DBus em todos os eventos. Você pode ouvir no DBus do sistema o evento apropriado e acionar seu script com base nisso ...
fonte