
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-hostname
bagunç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)
- Adicione as seguintes linhas a
/etc/sysconfig/network-scripts/ifcfg-<inf>
:DNS1=8.8.8.8 DNS2=8.8.4.4 DOMAIN=mydomain.com
- Reinício
"estático" resolv.conf (o jeito antigo)
PEERDNS=no
em/etc/sysconfig/network-scripts/ifcfg-<inf>
- 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 hostname
e resolv.conf
usa o nome de host antigo, mas hosts
tem 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.com
e ping google.com
resultou 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/hostname
e /etc/resolv.conf
logo /etc/machine-info
apó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)
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)
Comando executado
hostnamectl set-hostname myNEWhostname.myNEWdomain
- Reinício. Após a reinicialização, eu re-ssh de volta à VM.
- Tente
nslookup google.com
,ping google.com
obtenha erros como:ping: unknown host google.com
cat /etc/resolv.conf
agora 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
- Depois de pesquisar, descobri
/etc/sysconfig/network-scripts/ifcfg-eth0
que não há entradasDNS1
,DNS1
eDOMAIN
, o que causa a faltanameserver
de entradas em/etc/resolv.conf
. - Acrescento o seguinte via
sudoedit /etc/sysconfig/network-scripts/ifcfg-eth0
:
DNS1=8.8.8.8
DNS2=8.8.4.4
DOMAIN=myNEWdomain.com
- Eu novamente executo o comando
hostnamectl set-hostname myNEWhostname.myNEWdomain
- No entanto, ainda não tenho DNS
nslookup
eping
ainda falho. - Tento reiniciar o NetworkManager conforme recomendado
systemctl restart NetworkManager.service
- Ainda não há DNS, então executo o comando
reboot
- Após a reinicialização, faço login via ssh novamente e FUNCIONA.
ping
enslookp
ambos são bem sucedidos. - Agora, verifico
cat /etc/resolv.conf
e vejo as entradas incluídasnameserver
:
# 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 hostnamectl
comando.
Responder2
Você pode dizer ao Networkmanager para não alterar resolv.conf
adicionando um nodns
trecho na seção principal em /etc/NetworkManager/conf.d/nodns.conf
:
[main]
dns=none
(não esqueça systemctl restart NetworkManager
)