Como o traceroute resolve nomes?

8

Enquanto escrevia um script, quis referenciar uma máquina pelo nome do computador que eu forneci (por exemplo, "selenium-rc"). Eu não pude fazer ping usando "selenium-rc", então eu tentei os seguintes comandos para ver se o nome era reconhecido.

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  selenium-rc (192.168.235.41)  0.545 ms  0.241 ms  0.124 ms

Ok, o traceroute "encontrou" o nome. Como? Próxima ...

> traceroute selenium-rc
traceroute: unknown host selenium-rc

Hmm ... o mecanismo de pesquisa aqui deve ser diferente porque o host é desconhecido. Estou assumindo que isso está usando um processo de resolução de nome do sistema, enquanto o primeiro exemplo estava usando um processo específico para traceroute. Correto?

Então, quando voltei um pouco mais tarde ...

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  minint-q4e8i52.mycorp.net (192.168.235.41)  0.509 ms  0.206 ms  0.136 ms

Ok, resultado diferente. O nome "selenium-rc" não foi alterado na própria máquina, mas o processo de resolução do nome do traceroute deve incluir algum tipo de prioridade e agora fornece um resultado presumivelmente mais autoritário atribuído por outro sistema / serviço na rede. (Infelizmente, estou assumindo que é um nome dinâmico que não controlo e, portanto, não seria útil em um script).

Alguém pode explicar os resultados?

    
por Keith Bentrup 28.09.2011 / 15:42

3 respostas

6

Geralmente, no Linux, e no Unix, o traceroute e o ping usam uma chamada para gethostbyname () para procurar o nome de um sistema. gethostbyname (), por sua vez, usa os arquivos de configuração do sistema para determinar a ordem na qual consultar os bancos de dados de nomenclatura, ou seja: / etc / hosts e DNS.

No Linux, a ação padrão é (ou talvez costumava ser) para consultar primeiro o DNS e depois / etc / hosts. Isso pode ser alterado ou atualizado, definindo a ordem desejada em /etc/host.conf.

Para pesquisar / etc / hosts antes do DNS, defina a seguinte ordem em /etc/host.conf:

order hosts,bind

No Solaris, esse mesmo pedido é controlado pelo arquivo /etc/nsswitch.conf, na entrada do banco de dados hosts.

hosts: arquivos dns

Define a ordem de pesquisa para procurar em / etc / hosts antes de pesquisar no DNS.

Traceroute e ping usam esses métodos para pesquisar todos os bancos de dados de nomenclatura configurados. os comandos host e nslookup usam apenas o DNS, portanto não necessariamente duplicarão os resultados aparentemente inconsistentes que você está vendo.

O Solaris tem uma ferramenta de pesquisa, getent , que pode ser usada para identificar hosts ou endereços da mesma forma que o traceroute e o ping fazem - seguindo o conjunto configurado de bancos de dados de nomeação para pesquisar.

getent hosts <hostname>

procuraria em qualquer banco de dados listado para hosts, em /etc/nsswitch.conf.

No seu caso, para obter resultados consistentes, adicione o seguinte a / etc / hosts

192.168.235.41 selenium-rc

E certifique-se de que /etc/host.conf tenha:

order hosts,bind

Ou, certifique-se de que /etc/nsswitch.conf tenha:

hosts: files dns

Depois disso, você verá resultados mais consistentes com ping e traceroute, além de outros comandos, como ssh, telnet, curl, wget, etc.

    
por 28.09.2011 / 16:05
2

Parece que você configurou a pesquisa reversa corretamente, mas não encaminhar.

Seu sistema pode procurar o endereço IP 192.168.235.41 e reconhecer que é selenium-rc , mas quando ele tenta procurar selenium-rc ele falha.

Eu recomendo que você verifique /etc/hosts e /etc/resolv.conf ; o comportamento da chamada do sistema getaddrinfo é ditado pelo último e faz referência ao primeiro.

    
por 28.09.2011 / 19:28
1

Meu palpite: ao invocar traceroute 192.168.235.41 , uma solicitação de DNS saiu para encontrar o nome que acompanha o endereço IP 192.168.235.41. traceroute -n 192.168.235.41 é o caminho para iniciar o traceroute sem fazer pesquisas de DNS em cada endereço IP que encontrar. O servidor DNS demorou mais para responder do que o sistema DNS queria esperar, então no primeiro traceroute não deu um nome de host para 192.168.235.41. No momento em que o traceroute envia e recebe pacotes do 192.168.235.41, seu servidor DNS respondeu, então o traceroute pode fornecer um nome de host para ele.

Então, eu diria "problemas no servidor DNS", com um tempo muito conveniente que fez você suspeitar de outras coisas. Pense "Lei de Murphy" aqui. Quando você voltou um pouco depois, você obtém um nome diferente para o mesmo endereço IP, o que também me faz pensar que talvez alguém estivesse mexendo com a configuração do servidor DNS durante o tempo em que você fazia seus traceroutes.

    
por 28.09.2011 / 18:10