dig & nslookup não pode resolver hosts locais, a menos que eu especifique o servidor DNS (local) a ser usado

7

Estou configurando uma pequena rede privada dentro da minha rede universitária. Eu tenho uma caixa Centos 6 ( sun ) entre minha rede privada e a universidade WAN. A eth0 no sun é conectada à WAN e eth1 à minha rede privada por meio de um comutador inteligente netgear. sun atua como um roteador para a rede privada, encaminha o tráfego de eth1 para eth0 usando o NAT configurado usando o iptables. Os clientes na rede privada (dos quais há apenas no momento, mercúrio ) recebem um IP, gateway, etc e nome do host via dnsmasq em execução no sun . O dnsmasq é configurado para enviar um IP e nome de host específicos para o (s) endereço (s) MAC do (s) cliente (s).

Eu codifiquei o hostname / IPs somente em /etc/hosts no sun :

# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.42.1    sun sun.beowulf.iecs
192.168.42.2    mercury mercury.beowulf.iecs

No momento, o endereço IP de eth0 (voltado para WAN) é atribuído via DHCP ( sun eth0 é atribuído o mesmo IP o tempo todo, independentemente disso; é assim que a universidade faz as coisas, mas eu m no processo de conseguir isso mudou para permitir-me atribuir um IP estático). Meu /etc/resolv.conf no sun é:

; generated by /sbin/dhclient-script
search biol.uregina.ca
nameserver 142.3.102.202
nameserver 142.3.100.15

que parece estar sendo sobrescrito quando eu reinicio, então eu tenho o seguinte /etc/dnsmasq-resolv.conf

search beowulf.iecs biol.uregina.ca
nameserver 127.0.0.1
nameserver 8.8.8.8

e instruíram o dnsmasq a usá-lo em vez de /etc/resolv.conf

# Change this line if you want dns to get its upstream servers from
# somewhere other that /etc/resolv.conf
resolv-file=/etc/dnsmasq-resolv.conf

# By  default,  dnsmasq  will  send queries to any of the upstream
# servers it knows about and tries to favour servers to are  known
# to  be  up.  Uncommenting this forces dnsmasq to try each query
# with  each  server  strictly  in  the  order  they   appear   in
# /etc/resolv.conf
strict-order

Principalmente esta configuração está funcionando. O problema que tenho (e não tenho certeza se é um dos principais, mas ...) é que nslookup e dig não resolvem nomes para sun e mercúrio a menos que eu informe a esses comandos qual servidor DNS consultar:

# nslookup sun.beowulf.iecs sun.beowulf.iecs
Server:     sun.beowulf.iecs
Address:    192.168.42.1#53

Name:   sun.beowulf.iecs
Address: 192.168.42.1

# nslookup sun sun.beowulf.iecs
Server:     sun.beowulf.iecs
Address:    192.168.42.1#53

Name:   sun
Address: 192.168.42.1

# nslookup sun
Server:     142.3.102.202
Address:    142.3.102.202#53

** server can't find sun: NXDOMAIN

# nslookup sun.beowulf.iecs
Server:     142.3.102.202
Address:    142.3.102.202#53

** server can't find sun.beowulf.iecs: NXDOMAIN

A mesma saída é dada para mercúrio em vez de ** sun *. A saída dig representativa é:

# dig @192.168.42.1 mercury.beowulf.iecs

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> @192.168.42.1 mercury.beowulf.iecs
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65090
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mercury.beowulf.iecs.      IN  A

;; ANSWER SECTION:
mercury.beowulf.iecs.   0   IN  A   192.168.42.2

;; Query time: 0 msec
;; SERVER: 192.168.42.1#53(192.168.42.1)
;; WHEN: Wed Jun 25 12:05:31 2014
;; MSG SIZE  rcvd: 54

e não funciona quando não especifico o servidor de nomes a usar:

# dig mercury.beowulf.iecs

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> mercury.beowulf.iecs
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29153
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;mercury.beowulf.iecs.      IN  A

;; AUTHORITY SECTION:
.           7988    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2014062500 1800 900 604800 86400

;; Query time: 0 msec
;; SERVER: 142.3.102.202#53(142.3.102.202)
;; WHEN: Wed Jun 25 12:05:37 2014
;; MSG SIZE  rcvd: 113

No último exemplo acima ( dig ) o SERVER: 142.3.102.202#53(142.3.102.202) é o primeiro servidor DNS em /etc/resolv.conf , então por padrão o sun parece estar usando este servidor de nomes em vez do dnsmasq que eu teria esperava que fosse usado por causa das configurações em /etc/dnsmasq.conf .

Então, isso é um problema? Posso pingar sun e mercúrio de sun e conectar-me ao mercúrio do sun usando SSH.

Se isso for um problema (ou mesmo que não seja), existe uma maneira de configurar sun e dnsmasq em execução para resolver os nomes de host particulares automaticamente?

    
por Gavin Simpson 25.06.2014 / 20:12

2 respostas

8

dig ( grupo de informações de domínio ) e nslookup ( servidores de nomes de Internet de consulta interativamente ) são ferramentas que consultam servidores de nomes. A menos que um servidor de nomes específico seja especificado como um argumento de linha de comando, eles consultarão os servidores de nomes encontrados em /etc/resolv.conf. Eles simplesmente não examinam fontes alternativas de informações do host, como o arquivo /etc/hosts ou outras fontes especificadas em /etc/nsswitch.conf .

Se você quiser forçar todas as consultas do DNS através do dnsmasq em seu host sun , o /etc/resolv.conf deve apontar para o dnsmasq, ou seja, ele deve se parecer com:

#/etc/resolv.conf on sun
nameserver 127.0.0.1

Para evitar que esse arquivo seja sobrescrito quando você reiniciar a interface de rede eth0, edite /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o option PEERDNS=no

Segundo, em /etc/dnsmasq-resolv.conf você está tentando configurar o dnsmasq para usar a si mesmo como o servidor de nomes upstream nameserver 127.0.0.1 ... Esse arquivo deve se parecer com:

#/etc/dnsmasq-resolv.conf
search beowulf.iecs biol.uregina.ca
nameserver 8.8.8.8

se você quiser usar o servidor de nomes do Google. Pode ser uma boa ideia usar os servidores de nomes da Universidade 142.3.102.202 & 142.3.100.15 ao invés disso, não é incomum ter certos recursos somente visíveis da rede do campus.

Se o seu host mercury estiver configurado pelo DHCP, ele deverá obter sua configuração do dnsmasq e o /etc/resolv.conf apontará para o servidor de nomes dnsmasq em 192.168.42.1

    
por 25.06.2014 / 21:08
4

Os números 142.3.102.202 e 142.3.100.15 não sabem nada sobre sua rede privada local para que eles retornem corretamente NXDOMAIN . Esses também são os servidores de nomes padrão do sistema, portanto, quando você não especificar um servidor de nomes, eles serão usados.

Você precisará sobrescrever o conteúdo de /etc/resolv.conf e configurar as diretivas do servidor de nomes para apontar para o servidor de nomes dnsmasq local que, por sua vez, deve ser configurado para encaminhar consultas que não podem responder a upstream.

    
por 25.06.2014 / 20:56