host (1) usa apenas o primeiro servidor de nomes?

2

De acordo com a página do manual, host deve consultar "o servidor ou servidores listados em /etc/resolv.conf ", mas ele usa apenas a primeira entrada desse arquivo:

thefourthtower:$cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 192.168.1.254
domain gateway.2wire.net
search gateway.2wire.net
thefourthtower:$host thefourthtower
Host thefourthtower not found: 3(NXDOMAIN)
thefourthtower:$host thefourthtower 192.186.1.254
thefourthtower.gateway.2wire.net has address 192.168.1.74

O bit 2wire vem de um modem / roteador 2Wire. A AT & T (ou 2Wire?) Equipou a coisa com firmware muito ruim e seu servidor DNS (cache) é geralmente mais lento do que o Google Public DNS, um problema composto pelos próprios servidores DNS da AT & T (sem opção de servidores alternativos).

Posso obter host ou nslookup para usar mais /etc/resolv.conf entradas (e evitar especificar servidores manualmente)?

Ou é a única solução para mapear manualmente os hosts em /etc/hosts , dada a ordenação desejada das entradas resolv.conf ?

UPDATE

Nada no acima implica que eu acho que o servidor de nomes do Google deve saber sobre meus hosts locais.

Estou perguntando: pode-se usar um certo servidor de nomes somente para nomes locais (já que um nome como 'a quarta torre' deve ser local)?

Parece que a resposta é NO , e devo executar um servidor de nomes na minha máquina, porque o servidor de nomes local existente é tão ruim.

    
por reve_etrange 30.08.2011 / 10:36

3 respostas

2

O comando host usa a biblioteca de resolvedor e essa biblioteca usa as entradas do servidor de nomes em /etc/resolv.conf em ordem, mas apenas em caso de falha. O objetivo de várias entradas é para redundância, caso o servidor principal falhe por algum motivo. Mas, se o servidor principal fornecer uma resposta, positiva ou negativa (por exemplo, NXDOMAIN), as outras entradas do servidor de nomes não serão usadas. Você pode ter até três, para redundância tripla.

O servidor de nomes externo, como o Google, não saberá sobre seus nomes de host locais. Você deve colocá-los em seu arquivo / etc / hosts ou executar um servidor de nomes local. A execução de um servidor de nomes local tem a vantagem de armazenar em cache as pesquisas de DNS, tornando as pesquisas futuras ou repetidas muito mais rápidas.

Eu uso dnsmasq como DNS e cache locais. Isso realmente ajuda muito. Basta definir seu /etc/resolv.conf para usar o primeiro servidor de nomes 127.0.0.1 (ou somente) e configurar o dnsmasq para usar os servidores upstream do seu provedor. Mesmo que seu ISP seja lento, seu cache local compensará a maior parte do tempo.

    
por 30.08.2011 / 12:40
1

Remova as duas primeiras entradas do servidor de nomes de /etc/resolv.conf se elas não souberem sobre os hosts na sua LAN ou sobre o domínio usado localmente.

A resposta NXDOMAIN pode ser porque gateway.2wire.net não é um nome de domínio registrado que pode ser usado na internet.

$ dig gateway.2wire.net any

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3 <<>> gateway.2wire.net any
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 7984
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;gateway.2wire.net.             IN      ANY

;; AUTHORITY SECTION:
2wire.net.              1200    IN      SOA     ns1.2wire.com. hostmaster.2wire.com. 2007041700 3600 600 604800 1200

;; Query time: 209 msec
;; SERVER: 10.0.0.9#53(10.0.0.9)
;; WHEN: Tue Aug 30 13:29:23 2011
;; MSG SIZE  rcvd: 95

Observe que os nameservers autoritativos de 2wire.net dizem que não existe esse domínio como gateway.2wire.net . Eu acho que é uma conveniência usada pelos produtos 2wire somente no nível da LAN.

8.8.8.8 é um servidor de nomes do Google e não se deve esperar que você saiba sobre hosts em sua LAN privada e as opções de configuração um pouco estranhas feitas pelo seu roteador 2wire.

O nome do computador thefourthtower deve aparecer em sua própria tabela /etc/hosts (que você deve organizar para ser consultado antes do DNS) e realmente deve ser conhecido pelo servidor de nomes DNS em sua LAN (ou seja, seu roteador 2wire). / p>

Seu /etc/nsswitch.conf contém hosts: files dns ?

    
por 30.08.2011 / 12:14
0

Você pode usar o seguinte código para consultar todos servidores de nomes em seu /etc/resolv.conf:

grep '^nameserver' /etc/resolv.conf | cut -c 12- | xargs -i host [HOSTNAME] {}

Ou, se você preferir dig(1) :

grep '^nameserver' /etc/resolv.conf | cut -c 12- | xargs -i dig @{} [HOSTNAME]
    
por 31.08.2011 / 13:14