Por que o Android se recusa a resolver registros DNS que apontam para endereços IP internos?

14

Tenho um comportamento muito estranho em um dispositivo Android (Nexus 7) ao tentar acessar aplicativos de rede local. Em vez de obter o IP real da máquina na LAN, o dispositivo Android obtém o IP público , o que significa que o Chrome, Firefox ou qualquer outro navegador simplesmente mostra a página da web do roteador.

Eu tenho um servidor DNS interno que lida com as redes locais. Fazer a pingpartir de um PC funciona corretamente:

$ ping s.pelicandd.com

PING pelicandd.com (192.168.1.15) 56(84) bytes of data.
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=1 ttl=64 time=0.524 ms
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=2 ttl=64 time=0.578 ms
^C

Num dispositivo HTC One (acedido com adb shell), também funciona bem:

shell@m7:/ $ ping s.pelicandd.com

PING pelicandd.com (192.168.1.15) 56(84) bytes of data.
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=1 ttl=64 time=2.56 ms
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=2 ttl=64 time=27.8 ms
^C

No entanto, é isso que recebo ao fazer o mesmo pingno Nexus 7:

shell@flo:/ $ ping s.pelicandd.com

PING pelicandd.com (90.78.26.42) 56(84) bytes of data.
64 bytes from LFbn-1-2441-42.w90-78.abo.wanadoo.fr (90.78.26.42): icmp_seq=1 ttl=64 time=2.56 ms
64 bytes from LFbn-1-2441-42.w90-78.abo.wanadoo.fr (90.78.26.42): icmp_seq=2 ttl=64 time=8.63 ms
^C

Em vez de resolver para o IP interno, ele resolve para o público.

A configuração de rede é - exceto o endereço IP do dispositivo - exatamente a mesma nos dois dispositivos: as configurações de IP são definidas como estáticas e os servidores DNS são os internos. Ambos os dispositivos Android estão conectados através de Wi-Fi (ao contrário do PC). Uma grande diferença, no entanto, é que o Nexus 7 está usando o Android 6.0.1, enquanto o HTC One usa o Android 5.0.2.

Não existe nm-tool, digou nslookupno Nexus 7. O dispositivo não está enraizada.

O problema existia desde que eu comprei o dispositivo há algumas semanas, por isso dificilmente poderia ser o problema com o cache DNS.

O que posso fazer para inspecionar ainda mais esse problema?

Arseni Mourzenko
fonte
Antes de tudo, é claro que você deve inspecionar o problema. Portanto, instale o IP Tools da Play Store, faça alguns nslookup e assim por diante, e assim saberemos mais. Especialmente o servidor DNS usa o Nexus, pesquisa de DNS e assim por diante. Experimente este IP Tools . Está no idioma polonês, mas é claro que você pode mudar. Essa ferramenta eu uso no caso de tais problemas.
mackowiakp
Hum. Em Informações de IP , ele exibe os endereços DNS corretos. Na pesquisa de DNS , o IP correto é mostrado (192.168.1.15). No entanto, a guia Traceroute mostra o IP público errado (90.78.26.42).
Arseni Mourzenko
Então - na minha opinião - há algo errado com a entrada DNS interna para o Nexus. I usar a configuração simmilar e tudo funciona OK
mackowiakp
O DNS interno funciona bem no meu Nexus 6p, Nexus 5, Nexus 10, etc. Você já tentou exibir imagens de fábrica no Nexus 7 (se o seu carregador de inicialização estiver desbloqueado) para garantir que ele esteja executando um software conhecido? (Presumo que você o tenha usado, pois o Nexus 7 não é um dispositivo novo).
derobert 28/07
Comprei-o em segunda mão, mas fiz uma redefinição antes de usá-lo, seguido pelas atualizações até a versão mais recente do Android. Imagino que isso seja suficiente para garantir que ele não esteja executando nenhum software personalizado, pois o dispositivo não está enraizado.
Arseni Mourzenko

Respostas:

5

Recentemente, encontramos esse problema e o reduzimos a APENAS em dispositivos com Android v5 e mais recente. O Android v4 e todos os outros sistemas operacionais não têm problema.

Com esse boato, determinamos que o Android v5 e mais recente insiste em usar o IPv6 para a resolução de nomes DNS. (Como desativamos completamente o IPv6 em nossa rede, isso está de acordo com o problema.) Se o Android v5 (+) não conseguir obter uma resposta IPv6 do DNS local, ele entrará em contato com o host de nome público do Google (8.8.8.8) . Portanto, nenhum DNS interno, apenas externo.

Resolvemos o problema criando registros DNS em nossos servidores DNS voltados ao público para selecionar nomes e IPs internos. Com isso feito, o DNS público do Google poderia resolver esses nomes internos com IPs internos, e os dispositivos poderiam alcançar nossos hosts internos.

Estamos prosseguindo com a ativação completa do IPv6 em nossos servidores DNS internos (controladores de domínio) como uma correção permanente.

=========================================

ATUALIZAÇÃO - Bem, isso pode ser um arenque vermelho total ... ou não. Minha rede doméstica é o Win2008R2, domínio único com DHCP e DNS e sem ligação IPv6. Testou um dispositivo Android v5 a partir daí e não teve problema. A rede do escritório com problema é o Win2012 (não R2), de domínio único.

Ignorada WAPs do escritório atual com Linksys WAP independente e SSID separado para teste, o problema persiste.

Diferenças entre redes domésticas e de escritório (em que eu consigo pensar): - Versão Windows - 2012 vs. 2008 R2 - modelo de roteador (Cisco vs. Linksys) - modelo WAP (Aruba Networks da marca Dell versus Linksys)

Prosseguir com qualquer outro teste que eu puder pensar para restringir o problema. Todas as sugestões ou sugestões são extremamente apreciadas!

=========================================

PROBLEMA ESQUECIDO (?!)

Nosso problema parecia desaparecer por conta própria após uma alteração na topologia de rede que eu não acreditaria estar relacionada, mas aqui estão as informações.

(Lamentamos muito por essa longa e prolongada história, mas foi quando nossos problemas com o Android desapareceram, então resolva isso, se puder. Provavelmente estou fornecendo MUITO detalhes aqui, mas como não consigo ver uma conexão direta, Estou explicando tudo exatamente como aconteceu.)

Nosso ISP é Comcast Business Class - um modem a cabo com um bloco de IP estático de cinco endereços (número estranho, mas é assim que a Comcast os vende). O modem a cabo da Comcast é essencialmente uma combinação de modem / firewall / roteador / switch, com nosso bloco de IP estático remotamente programado nele.

Por mais de 10 anos e quase o mesmo número de empregadores, eu sempre construí redes de escritório da mesma maneira:
configure um IP da LAN para o modem / roteador ISP, que é o tráfego do NAT da Internet. Não poderia ser mais simples, e é assim que minha rede atual de escritórios está configurada há quatro anos.

Recentemente, nosso serviço de Internet do escritório caiu. Normalmente, uma reinicialização do modem o corrige, mas quando não ligamos para a Comcast, que enviou um técnico, que substituiu o modem a cabo para restaurar o serviço.

Alguns dias depois, a mesma coisa aconteceu novamente. Ligamos novamente e a tecnologia local (tecnologia diferente da anterior) tentou substituir o modem novamente, desta vez por um modelo mais recente. Surpreendentemente, o modem a cabo mais recente não suportava a alteração do endereço de sub-rede da LAN. A sub-rede padrão é 10.1.10.0/24 e não pode ser alterada. (Somente o quarto octeto era configurável.) Como nossa sub-rede do escritório é 192.168.100.0/24, informei a técnica de que não poderíamos usá-lo sem poder alterar a sub-rede da LAN. Ele entendeu, mas não tinha informações sobre por que o modem a cabo impediria a mudança. Então, ele instalou um modem de substituição do mesmo modelo que antes, que configuramos de forma idêntica, e o acesso à Internet foi restaurado.

Mais um dia ou dois passes e o serviço cai novamente. Dessa vez, quando liguei para a Comcast, a tecnologia inicial com a qual falei fazia perguntas detalhadas e com conhecimento sobre nossa configuração de rede. Quando expliquei que o modem a cabo estava configurado com um IP da LAN em nossa sub-rede, ele parecia intrigado com isso. Ele disse que a maioria dos clientes da Comcast conecta um roteador NAT'ing entre o modem a cabo e a LAN, em vez de usar o NAT'ing do modem a cabo. Na verdade, ele disse que não sabia que o modem a cabo suportava o NAT.

A Comcast enviou outra tecnologia com um novo modem a cabo (modelo mais recente que não suporta a alteração da sub-rede da LAN). Ele fez testes extensivos no modem existente e finalmente determinou que estava apenas passando tráfego IPv6 - sem IPv4. Ele também confirmou o que o técnico do telefone havia dito - que é recomendável usar um roteador separado para o NAT e não alterar a sub-rede da LAN no modem a cabo (o que não podemos fazer nos modems mais novos agora).

E agora finalmente chegamos à mudança de rede que fizemos. Instalei um roteador LinkSys simples entre o modem a cabo e o roteador principal, configurado com nosso IP estático no lado do modem e um IP da LAN por dentro. O serviço de Internet foi restaurado e permaneceu estável por algum tempo.

Depois que o serviço de Internet foi restaurado, pensei na estranheza do problema do IPv6 com o modem a cabo, que por sua vez me lembrou o problema do Android v5. Depois, testei nossos dispositivos Android no escritório e fiquei surpreso ao ver que o problema do DNS não estava mais ocorrendo.

Adicionar o roteador LinkSys para o NAT é a ÚNICA MUDANÇA DE REDE QUE FAZEMOS. Coincidência?? Possivelmente, mas parecia um pouco peculiar que ambos estivessem relacionados ao IPv6.

De qualquer forma, desculpe novamente pela longa história, mas nosso problema com o Android se foi. Faça o que puder com isso.

Dimarc67

Dimarc67
fonte
De fato, essa deve ser a causa também no meu caso, pois, da mesma forma, não uso o IPv6 internamente. Contornei o problema do DNS criando um servidor VPN local e solicitando que o dispositivo Android usasse a VPN; funciona, mas é obviamente muito drástico.
Arseni Mourzenko
@ArseniMourzenko Você já resolveu esse problema? Eu literalmente desperdicei dois dias sem fazer nada além de tentar corrigir esse problema, pois literalmente quebrou muito do que estava funcionando anteriormente. E sim, eu tentei um VPN mas reduziu a taxa de transferência de 100Mbps + para cerca de 20
Michael
@ Michael: como meus servidores DNS locais estão configurados para suportar apenas IPv4, a resposta do Dimarc67 foi relevante para mim (é também por isso que está marcada como resposta aceita). A partir daí, acabei de configurar uma VPN para todos os dispositivos Android e fico feliz em usá-la desde então. Não notei nenhuma redução na taxa de transferência - não me importaria, dado o uso de dispositivos móveis. Para o que vale a pena, estou usando o OpenVPN no servidor Debian e o OpenVPN Connect em dispositivos Android.
Arseni Mourzenko
2

Me deparei com esta postagem enquanto tentava fazer com que meu dispositivo Android 6.0 usasse o servidor DNS configurado localmente para resolver nomes de host locais. Uma resposta acima indicou que o Android 5.0 e mais recente insiste em usar servidores DNS IPv6. Essa foi a pista que me levou à minha solução.

Meu roteador estava anunciando os servidores DNS IPv6 fornecidos pelo meu ISP usando o DHCP-PD. Reconfigurei meu roteador para parar de anunciar os servidores DNS IPv6 e agora o dispositivo Android 6.0 está resolvendo o nome do host local usando o servidor DNS IPv4 fornecido pelo DHCP (IPv4).

Também tenho um DNAT para redirecionar todas as consultas DNS (porta TCP / UDP 53) para o meu servidor DNS local. Isso estava em vigor antes de desabilitar o anúncio do roteador com servidores DNS IPv6, então não sei se o Android 5.0 ou superior recai nos servidores DNS do Google (conforme reivindicado na resposta anterior) e os peguei com minha regra DNAT ou se meu Android O dispositivo 6.0 acabou de usar o servidor DNS IPv4 atribuído ao DHCP. De qualquer forma, a resolução do nome do host local está funcionando agora.

Recuperação ausente
fonte
A desativação do IPV6 no meu roteador corrigiu o problema em TODOS os meus dispositivos Android!
Ken J
2

Finalmente consegui resolver isso configurando eu mesmo um servidor DHCP na mesma rede, que configura o domínio de pesquisa correto para enviar aos clientes.

Depois que eu tive um servidor dhcp, no meu caso, isc-dhcpd com a configuração em dhcp.conf:

option domain-name "myrealdomain.tld";

O Android conseguiu resolver os registros A locais definidos no meu servidor DNS.

Erik Westrup
fonte