No Linux Debian 9 eu sou capaz de resolver um domínio local específico, por exemplo, my.sample-domain.local
usando alguns comandos como nslookup
ou host
, mas não com outros comandos como ping
ou o cliente Postgres psql
.
Acho que coisas como o Network Manager configurou meu resolvedor de DNS corretamente (o conteúdo de /etc/resolv.conf
), então não sei por que isso está acontecendo?
Verifiquei com um colega usando o Windows 10 e eles não têm nenhuma entrada personalizada em seu arquivo host, embora, no caso deles, a versão do Windows ping
e a interface do usuário do banco de dados para Postgres funcionem conforme o esperado, resolvendo o domínio em um endereço IP.
Por favor veja abaixo:
$ ping my.sample-domain.local
ping: my.sample-domain.local: Name or service not known
$ host my.sample-domain.local
my.sample-domain.local has address <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>
$ ping -c 5 <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>
PING <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN> (<THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>) 56(84) bytes of data.
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=1 ttl=128 time=1.16 ms
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=2 ttl=128 time=0.644 ms
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=3 ttl=128 time=0.758 ms
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=4 ttl=128 time=0.684 ms
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=5 ttl=128 time=0.794 ms
--- <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN> ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4056ms
rtt min/avg/max/mdev = 0.644/0.808/1.160/0.183 ms
$ nslookup my.sample-domain.local
Server: <THE_IP_REPRESENTING_THE_NAMESERVER>
Address: <THE_IP_REPRESENTING_THE_NAMESERVER>#53
Non-authoritative answer:
Name: my.sample-domain.local
Address: <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>
$ cat /etc/resolv.conf
domain <AN_INTERNAL_DOMAIN>
search <AN_INTERNAL_DOMAIN>
nameserver <THE_IP_REPRESENTING_THE_NAMESERVER>
nameserver <ANOTHER_IP_REPRESENTING_THE_NAMESERVER>
EDITAR:
Enquanto isso, percebi que há uma máquina virtual Ubuntu 16 na mesma LAN do escritório, então entrei nela e tentei o ping
comando que está funcionando lá.
Além disso, o Ubuntu VM não possui nenhuma configuração personalizada específica /etc/hosts
(o mesmo que meu laptop Debian 9 com não personalizado /etc/hosts
).
Ambos /etc/resolv.conf
parecem semelhantes (alguns domínios/IPs compartilhados, alguns outros IPs para o mesmo domínio).
No entanto, o arquivo /etc/nsswitch.conf
é diferente, então acho que há algo acontecendo com isso mdsn4_minimal
e a ordem da resolução dos hosts lá, como mdsn4_minimal
antes dns
:
hosts: files mdns4_minimal [NOTFOUND=return] dns
e no Ubuntu:
hosts: files dns
EDIÇÃO 2:
Tanto a VM Ubuntu 16 quanto meu laptop Debian 9 são capazes de resolver esse .local
domínio usando o dig
comando.
host
enslookup
realizar pesquisas de DNS, no entanto, a maioria dos aplicativos usa o Name Service Switch da glibc para decidir como os nomes de host são pesquisados.Você
/etc/nsswitch.conf
pode habilitar o mDNS, o que pode causar problemas ao resolver.local
nomes. Você pode alterar a ordem em que as pesquisas são feitas ou apenas remover o serviço mDNS se achar que não precisará dele.Seu
nsswitch.conf
temmdns4_minimal
, que faz pesquisa de mDNS (para.local
nomes). O[NOTFOUND=return]
depois faz com que a pesquisa pare e, portanto, o DNS nunca é usado e seu aplicativo não pode resolver o nome do host. Você pode remover todo omdns4_minimal [NOTFOUND=return]
, para que as pesquisas de mDNS não sejam usadas, ou apenas remover a ação NOTFOUND para que a pesquisa de DNS seja feita caso a pesquisa de mDNS falhe.Para obter mais detalhes, recomendo verificar a documentação do Name Service Switch .
O maior problema aqui é: sabe-se que nomes de domínio DNS que terminam em
.local
não devem ser usados ao configurar infra-estruturas de DNS..local
use é reservado para uso zeroconf/avahi aka bonjour, que são serviços paralelos para resolver nomes/serviços locais além do DNS.Seu serviço de nomes DNS interno certamente está tendo conflitos com zeroconf em alguns cenários. Assim, a solução na questão que você aceitou.
A longo prazo, o nome DNS da sua rede interna não deve terminar em
.local
.PS Como um aparte, além do DNS, os DCs/ADs locais da Microsoft também não devem ser nomeados
.local
. Você terá problemas estranhos acontecendo se fizer isso.De MS Technet (wikipedia)
RFC 6762
......
......
Embora não seja de uma fonte oficial, também encontrei isso, que tem um parágrafo que explica bem o problema: Pare de usar .local como o domínio de nível superior para sua LAN
Talvez você tenha um NBNS conflitante com um DNS , então corrija isso ou edite seu arquivo hosts ou envolva seus comandos;
DNS deve ser inspecionado com dig ;
Suponho que o host pesquise primeiro o NBNS (ou o contrário).