Ignorar a consulta do servidor DNS usando / etc / hosts ao usar um endereço IP dinâmico

2

Entendo que a necessidade de consultar servidores DNS externos para nomes comumente acessados pode ser reduzida se esses nomes comumente acessados estiverem presentes em / etc / hosts.

Agora, tenho uma situação na qual tenho uma caixa Embedded Linux com um endereço IP dinâmico. Vamos supor que esse endereço IP dinâmico esteja atualmente em 206.190.36.105.

Aqui está o conteúdo do meu arquivo / etc / hosts:

[root@zop]# cat /etc/hosts
127.0.0.1       localhost
192.168.0.1     mydevice
173.194.33.18   somesite.com

No entanto, quando executo o tcpdump e o ping somesite.com, ainda vejo que o somesite.com está sendo resolvido por meio da pesquisa de DNS.

17:28:48.330535 IP 206.190.36.105 > somesite.com: ICMP echo request, id 14880, seq 0, length 64
17:28:48.333465 IP 206.190.36.105.57201 > resolver1.opendns.com.domain: 2+ PTR? 204.220.167.10.in-addr.arpa. (45)
17:28:49.312286 IP somesite.com > 206.190.36.105: ICMP echo reply, id 14880, seq 0, length 64
17:28:49.335601 IP 206.190.36.105 > somesite.com: ICMP echo request, id 14880, seq 1, length 64
17:28:49.366973 IP resolver1.opendns.com.domain > 206.190.36.105.57201: 2* 0/1/0 (104)
17:28:49.368286 IP 206.190.36.105.59381 > resolver1.opendns.com.domain: 3+ PTR? 204.220.167.10.in-addr.arpa. (45)
17:28:49.664215 IP somesite.com > 206.190.36.105: ICMP echo reply, id 14880, seq 1, length 64
17:28:49.742004 IP resolver1.opendns.com.domain > 206.190.36.105.59381: 3* 0/1/0 (104)
17:28:49.743194 IP 206.190.36.105.57388 > resolver1.opendns.com.domain: 4+ PTR? 204.220.167.10.in-addr.arpa. (45)
17:28:50.038848 IP resolver1.opendns.com.domain > 206.190.36.105.57388: 4* 0/1/0 (104)
17:28:50.040069 IP 206.190.36.105.53513 > resolver1.opendns.com.domain: 5+ PTR? 204.220.167.10.in-addr.arpa. (45)
17:28:50.335815 IP resolver1.opendns.com.domain > 206.190.36.105.53513: 5* 0/1/0 (104)
17:28:50.337036 IP 206.190.36.105.54248 > resolver1.opendns.com.domain: 6+ PTR? 204.220.167.10.in-addr.arpa. (45)

Se eu criar uma entrada para o endereço IP atual da caixa Linux em / etc / hosts como em:

[root@zop]# cat /etc/hosts
127.0.0.1       localhost
192.168.0.101   mydevice
173.194.33.18   somesite.com
206.190.36.105   whatismyip

então o tcpdump em conjunto com um ping para o somesite.com mostra que a pesquisa de DNS agora é ignorada

17:15:35.795013 IP whatismyip > somesite.com: ICMP echo request, id 61212, seq 0, length 64
17:15:36.648193 IP somesite.com > whatismyip: ICMP echo reply, id 61212, seq 0, length 64
17:15:36.809234 IP whatismyip > somesite.com: ICMP echo request, id 61212, seq 1, length 64
17:15:37.164276 IP somesite.com > whatismyip: ICMP echo reply, id 61212, seq 1, length 64
17:15:37.819915 IP whatismyip > somesite.com: ICMP echo request, id 61212, seq 2, length 64
17:15:38.148193 IP somesite.com > whatismyip: ICMP echo reply, id 61212, seq 2, length 64
17:15:38.827728 IP whatismyip > somesite.com: ICMP echo request, id 61212, seq 3, length 64

Estou interessado em entender a lógica por trás desse comportamento observado. O fornecedor do Embedded Linux afirma que esse comportamento é normal e esperado - mas, racionalmente, a busca de DNS não deve ser ignorada se apenas o endereço IP de destino não estiver no arquivo / etc / hosts?

    
por xorsi 04.07.2013 / 02:43

3 respostas

2

Acho que você está confundindo pesquisas de DNS avançadas com pesquisas de DNS reversas.

As pesquisas de DNS de encaminhamento vão de um nome para um endereço IP. Se você olhar os pacotes DNS em seu primeiro tcpdump, verá PTR? (solicitação de ponteiro), que é uma solicitação para converter um IP em um nome.

z.y.x.w.in-addr.arpa é o IP que está sendo solicitado na notação de pesquisa inversa. Se você inverter essa ordem, você obterá w.x.y.z, o endereço IP que está tentando procurar.

Eu suspeito que tcpdump é a origem das solicitações de pesquisa inversa, não ping , pois não há necessidade de realizar uma pesquisa inversa no seu IP. Quando você adiciona seu IP a /etc/hosts , tcpdump não precisa mais realizar uma pesquisa inversa em seu IP, pois sua biblioteca de resolvedores pode localizá-lo sem executar consultas DNS.

Geralmente, é uma boa ideia executar tcpdump com a opção -n para evitar essas pesquisas. Eles geralmente não são necessários.

    
por 04.07.2013 / 03:32
2

A ordem das pesquisas é geralmente controlada por /etc/nsswitch . Esteja ciente de que, se você tiver entradas em /etc/hosts e essa for a primeira consulta, as pesquisas de DNS não ocorrerão. Certifique-se de que as entradas sejam estáticas e corretas.

Se dns for o primeiro, /etc/hosts será usado somente se as pesquisas de DNS falharem. Se files for o primeiro, o dns será usado somente se /etc/hosts falhar.

As linhas search e domain em /etc/resolv.conf podem fazer com que pesquisas adicionais sejam tentadas se o nome não for encontrado. A opção ndots pode ser usada para indicar quantos pontos são necessários para desativar o uso da pesquisa search e domain .

Você pode usar aliases em /etc/hosts vinculados à primeira entrada em search para impedir pesquisas com domínios de pesquisa adicionais.

    
por 04.07.2013 / 05:07
0

As solicitações de DNS que você vê são solicitações reversas que mapeiam IP para um nome de domínio:

PTR 204.220.167.10.in-addr.arpa.

Ping pede o nome de 10.167.220.204 (presumivelmente o IP do seu cliente?). Não vi nenhuma solicitação de encaminhamento (resolvendo o somesite.com para um endereço IP) na sua saída tcpdump .

Agora, voltemos à sua intenção original - que, presumo, é reduzir o tráfego da rede. Se você executar nscd (Daemon do Caching de Serviços de Nome), geralmente, você verá apenas uma solicitação de DNS para cada nome de host, e o daemon nscd irá armazená-lo em cache para você. Essa é uma opção muito melhor do que manter /etc/hosts atualizada com alterações e renumerações de rede.

    
por 04.07.2013 / 03:38