As entradas nos arquivos 'hosts' locais substituem as pesquisas de nome para frente e para trás?

16

Se eu tiver as seguintes entradas em um arquivo de hosts:

192.168.100.1    bugs
192.168.100.2    daffy.example.com
192.168.100.3    elmer.example.com.

As tentativas de resolução de nomes IP-> pelos utilitários locais (presumo que use 'gethostbyaddr' ou o equivalente do Windows) honrará essas entradas? Esse comportamento é configurável? Como isso varia entre os sistemas operacionais? Importa se as entradas do arquivo 'hosts' são totalmente qualificadas ou não?

EDIT: Em resposta a Russell, meu sistema Linux de teste está executando o RHEL 4. Meu /etc/nsswitch.conf contém a seguinte linha 'hosts':

hosts:      files dns nis

Se eu executar ping em qualquer um dos meus hosts pelo nome (por exemplo, bugs, daffy), a resolução de encaminhamento funcionará corretamente. Se eu rastrear qualquer um deles por endereço IP, a pesquisa inversa funcionará conforme o esperado. No entanto, se eu fizer ping deles por IP, o ping não parece resolver seus nomes de host. Meu entendimento era que o ping do Linux sempre tentava resolver IPs para nomes, a menos que instruído de outra forma. Por que o traceroute seria capaz de lidar com pesquisas reversas em arquivos de hosts, mas não o ping?

Murali Suriar
fonte

Respostas:

16

Geralmente, o arquivo hosts será usado para pesquisas direta e reversa. A preferência em um sistema Unix dependerá da ordem das entradas no arquivo nsswitch.conf.

por exemplo, a linha abaixo fará com que o arquivo hosts substitua o DNS. A reversão das entradas fará com que o DNS substitua o arquivo de hosts.

hosts: arquivos dns

Não tenho certeza se você pode ajustar a ordem de preferência em um sistema Windows.

Eu dei uma olhada na fonte de ping no inetutils-20071127 (a versão instalada no meu Ubuntu 9.04 box) e a fonte parece ativar o modo numérico apenas se você efetuar ping em um endereço IP em vez de um nome de host:

                if (inet_aton (target & whereeto.sin_addr) == 1) {
                        nome do host = destino;
                        if (argc == 1)
                                opções | = F_NUMERIC;

Isso pode explicar por que você não obtém uma pesquisa inversa ao executar ping no host por endereço IP.

Russell Heilling
fonte
Esse foi o meu pensamento, mas esse não parece ser o caso. Consulte a pergunta atualizada para obter detalhes.
Murali Suriar
Ainda não tive a chance de olhar a fonte; no entanto, um rápido olhar para a saída do ldd que no meu pingue sistema está ligado diretamente à biblioteca de resolução libresolv DNS, o que poderia implicar que ele está ignorando o arquivo nsswitch e fazer suas pesquisas inversas diretamente ...
Russell Heilling
Ao usar o hostutilitário ISC , pode-se ter a impressão de que editar / etc / hosts não tem efeito. host 10.0.0.1fará uma consulta DNS e ignorará o arquivo hosts. Isso permite verificar o resolvedor do sistema:perl -MSocket -le '$a=inet_aton(shift); $_=gethostbyaddr $a, AF_INET; print' 10.0.0.1
mivk
8

Encontrei uma referência para alterar as entradas do Registro para alterar a ordem de resolução de nomes no Windows:

http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=963485

Citando a partir daí:

Por padrão, o Windows verifica os provedores de resolução de nomes na seguinte ordem:

Local, (cache de nome local do NetBT), Hosts, DNS, NetBT (WINS).

Você deseja que o pedido seja Hosts, DNS, Local, NetBT.

A seguir, números mais baixos são de maior prioridade.

As seguintes chaves do Registro em

HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\ServicessTcpip\ServiceProvider

precisa ser modificado.

DnsPriority= 0x3e8 (Decimal: 1000)
HostsPriority= 0x1f4 (Decimal: 500)
LocalPriority= 0x5dc (Decimal: 1500)
NetbtPriority= 0x7d1 (Decimal: 2001)
James F
fonte
Como eles obtêm essas informações sobre "trabalhos internos"?
Pacerier
1

O /etc/host.confarquivo especifica qual ordem é usada para descobrir endereços IP. O meu contém o seguinte por padrão:

#
# /etc/host.conf
#

order hosts,bind
multi on

Isso significa que o arquivo de hosts é sempre verificado primeiro e depois o DNS (ligação).

Se nisnão for especificado aqui, nunca será visto /etc/nsswitch.conf.

Link da documentação: http://tldp.org/LDP/nag/node82.html

Sekenre
fonte
O método /etc/host.conf está desatualizado em alguns sistemas, apenas o nsswitch.conf é usado (como os sistemas baseados em glibc e eglibc). Essas versões do glibc analisarão o '/etc/host.conf' sem aviso e descartarão a linha 'order'.