Eu posso resolver um domínio, pingar o IP, mas não consigo pingar o domínio

5

Estou tentando obter domínios * .local para usar o servidor DNS com vagrant-dns. Para que isso funcione, eu configurei o dnsmasq para correr na frente dele.

O NetworkManager está instalado, mas está configurado para dns=none

resolve.conf:

nameserver 127.0.0.1 #this points to dnsmasq

Teste de resolução:

$ nslookup domain.local
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   domain.local
Address: 10.222.222.22

Dig resolve o mesmo:

$ dig domain.local

; <<>> DiG 9.10.3-P4-Debian <<>> domain.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18052
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;domain.local.      IN  A

;; ANSWER SECTION:
domain.local.   86400   IN  A   10.222.222.22

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jan 29 19:18:52 CST 2017
;; MSG SIZE  rcvd: 49

Esse é o endereço correto. Eu posso pingar o endereço:

ping 10.222.222.22
PING 10.222.222.22 (10.222.222.22) 56(84) bytes of data.
64 bytes from 10.222.222.22: icmp_seq=1 ttl=64 time=0.185 ms

Mas não consigo fazer o ping no endereço:

$ ping domain.local
ping: domain.local: Name or service not known

Eu também tentei de um navegador para carregar a página hospedada lá, mas recebo um erro de DNS. O estranho é que todos os outros sites parecem funcionar bem, embora eu não possa dizer se está usando o servidor DNS localhost ou não.

Usando o debian 8 Jessie / testing

    
por DAB 30.01.2017 / 02:16

3 respostas

8

Eu encontrei a resposta! Então, a maioria de vocês saberá que o arquivo / etc / hosts resolverá domínios, um pouco como um servidor DNS. Mas como o sistema sabe procurar nesse arquivo? E como ele sabe que ordem procurar verificar esse arquivo ou um servidor DNS?

Existe um arquivo: /etc/nsswitch.conf

Eu tinha a linha:

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

Isso significa primeiro verificar arquivos, como / etc / hosts. Em seguida, verifique o nome do host do sistema. Depois, há o mdns4, que acredito ser o protocolo para encontrar outras máquinas na rede local.

Após mdns4 é o que estava me segurando. %código%. O mdns procura nomes terminados em [NOTFOUND=return] . Se não conseguir encontrar um, ele não passa apenas para o próximo e último método de busca .local , ele irá realmente parar e informar ao seu sistema que o domínio não existe. Como o domínio que eu configurei no dnsmasq era um domínio dns , ele nunca chegaria lá.

Portanto, há duas maneiras de corrigir isso. A primeira é remover .local . Essa é a maneira que escolhi e funciona muito bem. Há um pequeno atraso porque acho que o mdns vê o [NOTFOUND=return] e tenta consultá-lo antes de passá-lo para .local .

Este é o aspecto do meu ficheiro agora:

hosts:          files myhostname mdns4_minimal dns

Outra opção, já que eu realmente não uso mdns, é que eu poderia removê-lo completamente, ou havia uma maneira de dizer para usar um tld diferente como dns - mas eu acho que isso seria efetivamente desabilitá-lo também.

    
por 04.02.2017 / 14:54
1

No meu caso, eu tenho várias linhas de servidor de nomes em /etc/resolv.conf e a que eu quero usar está na primeira linha.

Eu li o manual, diz:

If there are multiple servers, the resolver library queries them in the order listed.

Mas eu achei que sempre seleciona o último servidor de nomes primeiro.

Então, eu inverti as linhas em /etc/resolv.conf

Pergunta resolvida.

    
por 12.06.2018 / 09:37
0

Sublinhados não são permitidos em nomes de domínio de acordo com o RFC. No meu caso, isso foi um problema. dig e nslookup usam seu próprio caminho para resolver nomes e concordam com isso. O ping usa a biblioteca do sistema e falha. Na verdade, o ping não resolve se uma parte de um nome começa ou termina com sublinhado.

    
por 17.10.2018 / 09:38