Eu tenho um servidor Fedora 20 recém-construído que acabei de conectar à minha rede. É um servidor virtual rodando em um host VirtualBox. Tudo parece estar funcionando, mas tenho um problema com a resolução de nomes.
(Devo dizer neste momento que a resolução de nomes é fornecida por um servidor Windows em hardware separado que funciona bem para todas as outras máquinas na rede.)
Na linha de comando posso resolver um host externo como unix.stackexchange.com
. Posso resolver isso com bastante satisfação e fazer ping, como acontece com todos os outros hosts externos que tentei.
Porém, minha rede local (vamos chamá-la xyz.local
) é diferente. A interface de rede na minha máquina F20 possui DOMAIN=xyx.local
o script de rede (script completo abaixo). Na linha de comando posso resolver, digamos, server-01
, mas não server-01.xyz.local
.
Posso resolver um alias no formato abreviado, mesmo que o nome canônico seja o formato longo, então, por exemplo, ping mysql
resolvo com êxito seu alias linux-04.xyz.local
, mas não consigo resolver nem mysql.xyz.local
nem linux-04.xyz.local
.
É evidente que perdi alguma coisa. Alguém pode sugerir o que?
/etc/hosts possui apenas as entradas localhost padrão para 127.0.0.1
/etc/resolv.conf é o seguinte:
#Generated by Network Manager
search xyz.local
nameserver 192.168.xxx.xxx
Meu script de interface é
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Wired connection 1"
UUID=<uuid>
ONBOOT=yes
IPADDR0=192.168.xxx.xxx
PREFIX0=24
GATEWAY0=192.168.xxx.xxx
DNS1=192.168.xxx.xxx
HWADDR=<mac>
DOMAIN=xyz.local
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
Responder1
Parte do seu problema provavelmente se deve ao fato de seu caminho de pesquisa ser gerado automaticamente por meio do NetworkManager:
search xyz.local
Esta linha realmente deveria ser esta:
search xyz.local.
O período no final é crítico, pois informa ao resolvedor DNS para parar. Portanto, não fará coisas assim com você:
mysql.xyz.local.xyz.local
Você pode confirmar isso tentando resolver nomes de host adicionando manualmente um ponto final, temporariamente.
$ nslookup mysql.xyz.local.
Resolvendo todo este domínio
Para resolver isso, você precisará alterar a definição do seu domínio no servidor DHCP para que ele sirva o domínio como xyz.local.
.
/etc/nsswitch.conf
O método usado para resolver um nome de host é controlado pelo arquivo /etc/nsswitch.conf
. A notação NSS significa Name Service Switch, e você pode ler mais sobre isso na página de manual, man nss
.
Aqui está a linha do meu arquivo que controla como os nomes de host são resolvidos:
$ grep ^hosts /etc/nsswitch.conf
hosts: files dns mdns4_minimal
Ele olha primeiro para meu arquivo local /etc/hosts
e depois consulta o DNS em segundo lugar.
Responder2
O problema é causado pela palavra-chave “mdns4_minimal” no arquivo nsswitch.conf. Esta palavra-chave informa ao resolvedor que tudo que termina com local deve ser consultado usando mdns. Deve ser suficiente remover essa palavra-chave (e opções adicionais geralmente fornecidas entre colchetes).
Mais detalhes você pode encontrar no meupublicar
A razão pela qual o nslookup resolve tudo é porque ele não examina o nsswitch.conf, mas usa /etc/resolv.conf diretamente. O ping, por outro lado, depende do resolvedor que primeiro analisa o nsswitch.conf e resolve o nome usando o que está escrito nele.