Como recarregar o cliente DHCP remotamente para gravar o novo resolv.conf?

3

Estou tentando configurar o dnsmasq(8) em um sistema Debian GNU / Linux em uma rede privada baseada em DHCP . Durante uma configuração manual local - depois de instalar o dnsmasq istelf - pode-se simplesmente incluir a linha

prepend domain-name-servers 127.0.0.1;

em /etc/dhcp/dhclient.conf e reinicie a rede. Isso incluirá o host local em /etc/resolv.conf e um estará pronto para ser usado. (Veja também: link )

Mas tentativas de fazer o mesmo remotamente, especialmente ao trabalhar com o software gerenciamento de configuração , resultariam na perda da conexão de rede. Bem, desde que o objetivo não é a rede reiniciar, mas atualizando resolv.conf ..:

Como é possível forçar o dhclient(8) a atualizar resolv.conf enquanto mantém as conexões de rede em funcionamento?

[EDITAR]

Abaixo, encontre um script que funcionou para mim:

if grep '^\s*nameserver\>.\+\<127\.0\.0\.1\>' /etc/resolv.conf >/dev/null; then
    : # do nothing
else
    grep -v '^\s*nameserver\>' /etc/resolv.conf > /tmp/resolv.conf.new
    echo "nameserver 127.0.0.1" >> /tmp/resolv.conf.new
    grep '^\s*nameserver\>' /etc/resolv.conf >> /tmp/resolv.conf.new
    mv -f /tmp/resolv.conf.new /etc/resolv.conf
fi

É meio estranho - e eu ainda estou procurando por uma solução melhor.

    
por mjhennig 07.04.2013 / 23:38

1 resposta

1

Eu enfrentei o mesmo problema ao configurar o dnsmasq através do ansible. No debian jessie você pode atualizar o dhclient.conf e fazer:

/usr/bin/killall dhclient
dhclient INTERFACE

Ou se preferir:

dhclient -x
dhclient INTERFACE

Isso não mata sua conexão, a menos que sua concessão expire e você receba um endereço IP diferente.

Você menciona o gerenciamento de configurações. Se você estiver usando ansible, aqui está a parte relevante do meu manual:

tasks:
- name: Ensure a correct resolv.conf
  template: src=templates/resolv.conf.j2 dest=/etc/resolv.conf

- name: Ensure dhclient config wont mess up my resolv.conf
  template: src=dhclient.conf.j2 dest=/etc/dhcp/dhclient.conf
  notify: Kill dhclient

handlers:
- name: Kill dhclient
  command: /usr/bin/killall dhclient
  ignore_errors: yes
  changed_when: false

Repare que não reinicio o dhclient depois de o ter matado. Isso funciona bem no meu ambiente, mas YMMV. Você poderia adicionar outra tarefa que copia sobre um script para manipular dhclient stop / start e chamá-la do manipulador (talvez até usando {{ansible_default_ipv4.interface}} para obter o nome da interface).

Meu modelo dhclient.conf é algo assim:

send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers, host-name, interface-mtu, rfc3442-classless-static-routes, ntp-servers, dhcp6.fqdn, dhcp6.sntp-servers;

Portanto, a maioria das dhclient.conf do debian padrão não possui as diretivas relacionadas ao dns.

    
por 20.08.2015 / 21:21