Linux, dhclient: Como descobrir se minha configuração de DHCP é válida (sem interrupções de rede)

1

Eu trabalho em um sistema Linux com configuração de rede "clássica", ou seja, não há um daemon de configuração completo rodando como o NetworkManager. A maioria das configurações é feita pelo dhclient.

Eu preciso detectar situações em que tenho que executar novamente o dhclient. (sub-rede diferente devido a mudanças de configuração de cabo ou rede). Quero executar o teste a cada 10 minutos sem cortar as conexões existentes.

O que eu basicamente preciso é de uma resposta a perguntas como Meu Endereço IP e Gateway são válidos para a Rede à qual estou conectado? ou Se eu renovasse minha Concessão DHCP, eu conseguiria o mesmo IP novamente? . Para responder a primeira pergunta, é possível efetuar ping de algum IP público como 8.8.8.8, mas preciso de uma solução que também funcione em grandes redes privadas das quais não tenho conhecimento. Mesmo o gateway padrão nem sempre pode ser pingável.

Uma Eu sabia que meu ip é inválido Eu faria "dhclient -r eth0; dhclient eth0" para renovar o contrato. No entanto, isso me desconecta da internet por um curto período, se eu já estiver conectado corretamente.

Descobri que o dhcping é uma boa ferramenta para perguntar ao servidor DHCP sem realmente usar o resultado. No entanto, recebo resultados estranhos, que podem até se qualificar para outra pergunta. Parece que o dhcping só funciona bem se eu conheço o ip do servidor antecipadamente, então há uma ferramenta faltando para o DHCP DISCOVER. (e usar endereços de servidor de transmissão não é confiável)

Eu sei que posso fazer o hdcp descobrir com o nmap, no entanto, instalar o nmap não é uma boa ideia devido a razões de segurança.

Perguntas que gostaria de fazer:

  • Existe uma maneira de validar meu ip configurado no contexto da rede conectada?
  • Existe a chance de renovar o aluguel do dhclient sob demanda?
  • Existem ferramentas fazendo uma transmissão de descoberta do DHCP e imprimindo o resultado?

Adendo :

Ao contrário dos resultados do meu primeiro teste, apenas chamar dhclient -v não resolve meu problema. Para esclarecer isso, meu problema inicial é o dhclient em execução em modo de segundo plano (sem realmente renovar a concessão o tempo todo). Chamar o dhclient resulta em:

dhclient (30887) já está em execução - saindo.

Isto não é totalmente repoducable, no entanto. Às vezes é bem sucedido. (É por isso que primeiro pensei que a opção -v faria a diferença, não é)

Então, a minha pergunta é: se eu tiver esse problema já em andamento, embora o dclient atualmente não esteja fazendo nada, como acionar uma renovação para o processo em segundo plano?

(O motivo por trás disso é que um cliente DHCP precisa se ligar à porta 68. Quando esta porta é ligada pelo daemon de fundo do dhclient, outra instância não pode ser executada em primeiro plano)

    
por philipp 26.08.2016 / 14:57

2 respostas

1

A resposta para as duas primeiras perguntas é a mesma: use

dhclient -v eth0

( -v significa verbose, nem todas as distribuições Linux possuem), ao invés de dhclient -r eth0; dhclient eth0 . Este formulário mais curto primeiro solicita uma nova atribuição do endereço IP atual e, em seguida, inicia uma negociação com o roteador somente se não puder atribuir o endereço IP solicitado, porque ele já foi feito ou porque está fora do alcance DHCP do gateway.

Eu sugiro que você use o sinalizador -v para que você possa ver esta troca, é bastante explícito.

Quanto ao seu terceiro ponto, existe a opção AFAIK no dry-run para qualquer cliente dhcp. Se você realmente insistir nisso, no entanto, você pode fazer o seguinte: configurar uma interface macvlan e iniciar uma instância dhcp para essa nova interface:

ip addr flush dev eth0
ip link add link usb0 mac0 mode macvlan
dhclient -v mac0

Neste ponto, você pode ver a configuração fornecida pelo servidor DHCP local, rede, máscara de rede, gateway e servidores DNS na nova interface virtual. Quando você terminar,

ip link del dev mac0
dhclient -v eth0

irá restaurar exatamente a configuração que você tinha antes, se o servidor DHCP puder distribuir seu endereço IP antigo. Caso contrário, você está preso com um novo ;-). Tudo isso é trivial para script, realmente.

E, por exemplo, se o seu problema é a persistência das conexões ssh , sugiro que você verifique mosh .

    
por 27.08.2016 / 18:50
0

A melhor solução que encontrei até agora é usar uma implementação de descoberta do dhcp em python:

link

O que é muito bom, já que eu já uso python. Mas talvez eu ainda esteja perdendo uma solução simples e tudo isso é supercomplicado.

edit: Isso não ajudou muito. Meu principal problema é que um processo em segundo plano do dhclient está ocupando a porta 68, o que impede qualquer outro processo que esteja fazendo a descoberta de DHCP, e eu não conheço nenhuma maneira de fazer o processo em segundo plano liberá-lo sem perder a configuração de rede.

    
por 26.08.2016 / 15:25