CentOS7 hostnamectl set-hostname bagunça com /etc/resolv.conf

CentOS7 hostnamectl set-hostname bagunça com /etc/resolv.conf

CentOS7. A rede está tudo bem.

# cat /etc/resolv.conf 
nameserver 192.168.1.1

Então decido mudar o nome do host.

# hostnamectl set-hostname host.domain
# reboot
# cat /etc/resolv.conf 
# Generated by NetworkManager
search domain


# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com

Por que hostnamectl set-hostnamebagunça meu /etc/resolv.conf?

Responder1

Apenas para reiterar, como resposta oficial, o que MikeA diz nos comentários da pergunta:

Não é necessariamente dhcpclient, mas pode ser NetworkManager. Se você especificar DNS1, DNS2 e DOMAIN no mesmo arquivo, ele deverá criar o /etc/resolv/conf correto para você.

Se você não possui DNS1, DNS2 e DOMAIN neste arquivo, você precisa adicionar manualmente as linhas corretas ao seu /etc/resolv.conf (ou seja, pesquisa e servidor de nomes) - MikeA

Segui seus comentários e tive sucesso (veja mais detalhes mais abaixo).

NetworkManager (CentOS 7 - forma atual)

  1. Adicione as seguintes linhas a /etc/sysconfig/network-scripts/ifcfg-<inf>: DNS1=8.8.8.8 DNS2=8.8.4.4 DOMAIN=mydomain.com
  2. Reinício


"estático" resolv.conf (o jeito antigo)

  1. PEERDNS=noem/etc/sysconfig/network-scripts/ifcfg-<inf>
  2. Adicione manualmente as linhas corretas a /etc/resolv.conf(ou seja, pesquisa, servidor de nomes) (é essencialmente assim



Mais informações e detalhes


Cheguei a esta questão como resultado de um erro de rede.

Servidor é uma máquina virtual CentOS 7 rodando em ambiente KVM.

O SO foi instalado através do modelo SolusVM Control Panel.

Depois de instalar o CentOS 7, fiz uma das duas maneiras de alterar o nome do host, mas não consigo lembrar qual:

  • hostname myserver.mydomain.com; ou
  • Usei a guia Hostname do SolusVM Control Panel

Tenho quase certeza de que fiz apenas o último, pois tenho um commit init GIT que mostra hostnamee resolv.confusa o nome de host antigo, mas hoststem uma única entrada com IP estático e novo nome de host/domínio. Veja abaixo as diferenças.

Parece que essa mudança não persistiu por um motivo ou outro, quando a VM foi suspensa via SolusVM (ou gerenciador KVM), resultando na reinicialização, o nome do host foi revertido para o original por systemd.

Descobri então que no CentOS 7 o nome do host deveria ser definido usando hostnamectl set-hostname myserver.mydomain.com. [1]

Depois de fazer isso e reiniciar, descobri que não tinha resolução de DNS, por exemplo, nslookup google.come ping google.comresultou em erros de DNS/sem resolução.

Parece que qualquer configuração de DNS que possa ter sido definida por meio do modelo de instalação do SolusVM CentOS 7 foi eliminada pelo NetworkManager, embora eu não possa dizer com certeza quem/o que causou as alterações, mas está definitivamente claro no GIT que as alterações foram feitas para /etc/hostnamee /etc/resolv.conflogo /etc/machine-infoapós executar hostnamectl ...o comando (novamente, veja abaixo as diferenças).

Aqui estão as etapas exatas que executei para qualquer pessoa em situação semelhante, para solução de problemas ou como exemplo explícito:

Objetivo: Atualizar hostname.domainname (fqdn)

(explicitamente: myOLDhostname.myOLDdomain.com -> myNEWhostname.myNEWdomain.com)

  1. Estado inicial:

    • hostname:myOLDhostname.myOLDdomain.com
    • resolv.conf:
      # Generated by NetworkManager search myOLDdomain.com nameserver 8.8.8.8 nameserver 8.8.4.4
    • machine-info: /dev/null(ou seja, não existente)
  2. Comando executadohostnamectl set-hostname myNEWhostname.myNEWdomain

  3. Reinício. Após a reinicialização, eu re-ssh de volta à VM.
  4. Tente nslookup google.com, ping google.comobtenha erros como:ping: unknown host google.com
  5. cat /etc/resolv.confagora mostra:
    # Generated by NetworkManager
    search myNEWdomain.com


    # No nameservers found; try putting DNS servers into your
    # ifcfg files in /etc/sysconfig/network-scripts like so:
    # DNS1=xxx.xxx.xxx.xxx
    # DNS2=xxx.xxx.xxx.xxx
    # DOMAIN=lab.foo.com bar.foo.com
  6. Depois de pesquisar, descobri /etc/sysconfig/network-scripts/ifcfg-eth0que não há entradas DNS1, DNS1e DOMAIN, o que causa a falta nameserverde entradas em /etc/resolv.conf.
  7. Acrescento o seguinte via sudoedit /etc/sysconfig/network-scripts/ifcfg-eth0:
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    DOMAIN=myNEWdomain.com
  8. Eu novamente executo o comandohostnamectl set-hostname myNEWhostname.myNEWdomain
  9. No entanto, ainda não tenho DNS nslookupe pingainda falho.
  10. Tento reiniciar o NetworkManager conforme recomendadosystemctl restart NetworkManager.service
  11. Ainda não há DNS, então executo o comandoreboot
  12. Após a reinicialização, faço login via ssh novamente e FUNCIONA. pinge nslookpambos são bem sucedidos.
  13. Agora, verifico cat /etc/resolv.confe vejo as entradas incluídas nameserver:
    # Generated by NetworkManager
    search myNEWdomain.com
    nameserver 8.8.4.4
    nameserver 8.8.8.8

Para GIT, eu uso etckeeper(essencialmente gerencia um repositório GIT em /etc) e mostra a configuração inicial, e que explicitamente, não houve outras alterações nos arquivos relacionados à rede até a /etc/{hostname,resolv.conf,hosts}execução do hostnamectlcomando.

Responder2

Você pode dizer ao Networkmanager para não alterar resolv.confadicionando um nodnstrecho na seção principal em /etc/NetworkManager/conf.d/nodns.conf:

[main]
dns=none

(não esqueça systemctl restart NetworkManager)

informação relacionada