As entradas nos arquivos locais 'hosts' substituem as pesquisas de nome diretas e reversas?

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-> por utilitários locais (suponho que use 'gethostbyaddr' ou o equivalente do Windows) honram essas entradas? Este 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 ao 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 pingar qualquer um dos meus hosts pelo nome (por exemplo, bugs, daffy), a resolução de encaminhamento funcionará corretamente. Se eu tracerou qualquer um deles pelo endereço IP, a pesquisa inversa funciona conforme o esperado. No entanto, se eu fizer ping por IP, o ping não parecerá resolver seus nomes de host. Meu entendimento era que o ping do Linux sempre tentava resolver IPs para nomes, a menos que fosse instruído de outra forma. Por que o traceroute seria capaz de lidar com pesquisas reversas em arquivos hosts, mas o ping não?

    
por Murali Suriar 20.07.2009 / 13:07

3 respostas

16

Geralmente, o arquivo hosts será usado para pesquisas diretas e inversas. 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 de hosts substitua o DNS. Inverter as entradas fará com que o DNS substitua o arquivo hosts.

hosts:      files 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 em inetutils-20071127 (a versão instalada na minha caixa Ubuntu 9.04) e a fonte parece ativar o modo numérico somente se você pingar um endereço IP em vez de um host:

                if (inet_aton(target, &whereto.sin_addr) == 1) {
                        hostname = target;
                        if (argc == 1)
                                options |= F_NUMERIC;

Isso pode explicar por que você não faz uma pesquisa inversa quando faz ping no host por endereço IP.

    
por 20.07.2009 / 13:12
8

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

link

Citando a partir daí:

Por padrão, o Windows verifica os provedores de resolução de nomes nas seguintes ordem:

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

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

No que se segue, os números mais baixos são de maior prioridade.

As seguintes chaves de 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)
    
por 20.07.2009 / 13:27
1

O arquivo /etc/host.conf especifica qual pedido é usado 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 hosts é sempre verificado primeiro e depois DNS (bind).

Se nis não for especificado aqui, ele nunca verá /etc/nsswitch.conf .

Link de documentação: link

    
por 20.07.2009 / 14:16