Editando DNS-nameservers em / etc / network / interfaces sem reiniciar [duplicado]

18

Depois de editar dns-nameservers em /etc/network/interfaces , como direi resolvconf(8) para ler o novo valor sem reiniciar a rede? (causando uma interrupção de serviço)

A opção -u parece não funcionar, apenas atualiza de volta para os mesmos valores.

    
por Eric 20.10.2012 / 00:44

3 respostas

26

Você está certo, "resolvconf -u" não é suficiente para ativar a mudança que você fez. Esse comando apenas atualiza o resolv.conf do banco de dados do resolvconf enquanto você precisa atualizar o banco de dados.

Suponha que a interface em questão seja eth0. Suponha que em / etc / network / interfaces você tenha uma estrofe com essa aparência.

iface eth0 inet static
    [...]
    dns-nameservers 1.1.1.1 2.2.2.2

Agora você altera a linha "dns-nameservers". Para ativar essa alteração, observe que o & amp; & amp; evita interromper uma conexão ssh potencialmente aberta)

ifdown eth0 && ifup eth0

ou reinicie.

    
por jdthood 29.10.2012 / 08:29
12

Encontrei isso duas vezes recentemente.

Na primeira vez, eu fiz sudo ifdown eth0 , o que naturalmente matou minha conexão ssh e deixou a máquina ignorando sua NIC. Ai Eu tive que ir através da interface IPMI no servidor para obter o controle novamente.

Na segunda vez, aprendi com meus erros anteriores e fiz sudo ifdown eth0 ; sudo ifup eth0 . A janela ssh morreu, é claro, mas a máquina respondeu rapidamente a uma nova conexão ssh e minhas modificações no DNS estavam em vigor. Eu fiz a mesma coisa em um segundo servidor, mas desta vez eu esperei antes de digitar qualquer coisa na janela do ssh. A janela ficou ativa e as alterações de DNS foram aplicadas. Impressionante.

O mais importante era usar o operador ponto-e-vírgula do shell para que ambos os comandos estivessem em uma linha. Dessa forma, o comando para restaurar a interface já foi inserido no momento em que a interface é desativada. Eu suponho que eu poderia ter escrito um roteiro e executado isso, mas isso pareceu mais fácil.

UPDATE: Existe outra maneira de fazer isso. Você também pode reiniciar o serviço de rede do Ubuntu em uma etapa: sudo /etc/init.d/networking restart ou sudo service network-interface restart INTERFACE=eth0 . Obrigado JFA pela inspiração.

    
por Randall Cook 23.02.2013 / 01:53
2

Acabei de passar por este mesmo problema; até mesmo uma reinicialização perderia a mudança ao invocar manualmente o gancho libc.

Portanto, a maneira mais estável que encontrei é, depois de colocar o conteúdo desejado em /etc/network/interfaces , para editar /etc/resolvconf/resolv.conf.d/original para incluir as linhas desejadas, certifique-se de que tail (nesse diretório) não esteja presente, cd /etc/resolvconf/resolv.conf.d e depois invocar /etc/resolvconf/update.d/libc .

Observe que, se tail estiver presente (por padrão, apontada para original , o conteúdo derivado de /etc/network/interfaces também será seguido pela configuração original.

O fato de essas alterações poderem ser aplicadas com segurança por meio de uma reinicialização é, francamente, insano. O sistema atual pega o que costumava ser "editar esse arquivo, talvez implantando a partir de um sistema de gerenciamento de configuração" e o esconde atrás de várias camadas de abstração e nenhuma maneira limpa de chamar para manutenção fora da estrutura de inicialização normal.

    
por Phil P 10.04.2013 / 08:48