Como alterar o DNS de conexões móveis no Android KitKat?

24

Quero evitar a censura do meu ISP móvel local (ele bloqueia o imgur, por exemplo, por algum motivo desconhecido.

Captura de tela
Captura de tela (clique na imagem para obter uma variante maior)

Tenho certeza de que posso contornar isso alterando meu DNS para Google DNS ou OpenDNS, mas não tenho muita certeza de como fazer isso no KitKat.

Info:
Device: Nexus 5
Android version: 4.4.2
Device status: rooted
user51893
fonte

Respostas:

18

Ok, antes de mais nada, a divulgação completa : sou o autor de um aplicativo que agora está na Google Play Store e que permite alterar o DNS de qualquer conexão móvel no Android 4.4. O aplicativo requer raiz , custa alguns dólares e é chamado Substituir DNS . Foi-me dito, em uma resposta agora excluída, que é justo vincular ao meu aplicativo, desde que eu o exponha claramente.

O problema que encontrei com esta versão do Android (4.4) é que, aparentemente por motivos de cache, o comportamento do sistema foi alterado para redirecionar todas as consultas DNS para um daemon do sistema chamado netd(aqui está um link para uma apresentação relacionada à rede Android anterior à 4.4) , no entanto, abrange parte desses tópicos).

O método getprop/ setpropnão funciona mais. Esses valores, quando alterados, são simplesmente ignorados pelo netddaemon.

É necessário se comunicar diretamente com o daemon através do /dev/socket/netdsoquete. No Android, agora está presente uma ferramenta chamada ndcque faz exatamente esse trabalho.

A sintaxe para as coisas relacionadas ao DNS é esta:

# ndc resolver flushif <iface>
# ndc resolver flushdefaultif
# ndc resolver setifdns <iface> <domains> <dns1> <dns2>
# ndc resolver setdefaultif <iface>

O aplicativo adivinha automaticamente o nome do dispositivo de rede e aplica esses comandos sempre que uma rede móvel é ativada.

MaxChinni
fonte
A sintaxe correta de setifdns é: ndc resolver setifdns <iface> <domains> <dns1> <dns2> .... Exemplo:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Christian d'Heureuse 10/01
@ Christiand'Heureuse você está certo, eu atualizei a resposta, obrigado.
MaxChinni
13

Eu "resolvi" esse problema usando uma regra iptables para encaminhar todas as conexões da porta 53 para um servidor DNS pretendido; minha experiência no Android 4.4.2 com a tentativa de modificar as configurações de DNS enquanto conectado ao 3G foi exatamente como descrito por Leo; ignorância de valores em getprop | grep dns [0-9] \]: e dhcpd.conf.

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 8.8.8.8:53

O motivo é o descrito aqui: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Todos os aplicativos fazem pesquisas de DNS através do netd por meio de um soquete unix / dev / socket / dnsproxyd. Este encadeamento também descreve por que as propriedades do sistema estão sendo ignoradas.

Para desfazer isso, faça

iptables -t nat -L OUTPUT -n -v --line-numbers

, encontre o número da linha que corresponde a udp dpt: 53 a: xxx.xxx.xxx.xxx: 53 e faça

iptables -t nat -D OUTPUT *linenumber*
Transfusão
fonte
2
Obrigado! também, resumo do motivo: o Google está disputando corrida de armas com bloqueadores de anúncios. eles tentaram desativar os meios atuais de que os bloqueadores de anúncios funcionavam e os bloqueadores de anúncios foram movidos para outro, enquanto todos os usuários (independentemente de usar ou não o bloqueador de anúncios) ficarão irritados para sempre com esse movimento do Google. ... Eu pensei que todo mundo sabia que lutar contra bloqueadores de anúncios já era uma jogada idiota. google bobo. (também, opensource aplicativo AFWALL é uma forma conveniente para adicionar esta regra personalizada facilmente)
gcb
AfWall + wiki sobre como aplicar iptables personalizados regra como esta
betatester07
1

Infelizmente, pode ser impossível fazer a partir de agora, no entanto, é possível tentar o DNS Changer . Isso pode funcionar se você estiver enraizado, mas não há garantias.

Um bom serviço DNS a ser usado seria o serviço DNS público do Google. Isso tende a funcionar muito bem para esse tipo de problema aqui.

Se nada disso funcionar, continue procurando respostas. Um bom site para coisas como essa é o XDA Developers . Eles tendem a ter muitas respostas sobre o Android.

óculos de proteção
fonte
1

Estou no KitKat Cyanogenmod 11, o que significa que estou enraizado por padrão. Apesar disso, só posso relatar falhas:

1º método:

Quando eu tento o adb shellcom

setprop net.rmnet0.dns1 208.67.222.222
setprop net.rmnet0.dns2 208.67.222.222
setprop net.rmnet1.dns1 208.67.222.222
setprop net.rmnet1.dns2 208.67.222.222
setprop net.rmnet2.dns1 208.67.222.222
setprop net.rmnet2.dns2 208.67.222.222
setprop net.dns1 208.67.222.222
setprop net.dns1 208.67.222.222

e, em seguida, teste para qual IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk resolve ... recebo uma resposta NXDOMAIN, o que significa que não veio do servidor de nomes OpenDNS que defini (que retornaria uma resposta com um IP alternativo para servir a você).

Ao fazer

getprop | grep dns

Eu só veria o que configurei. No entanto, ao mudar de WiFi para celular (3G ou 4G / LTE), vejo IPs que reconheço como atribuídos à minha operadora de celular. Aplicativos como "DNSwitch" ou "DNS Changer" podem redefinir esses resolvedores automaticamente na alteração de rede. No entanto, o que getpropme informa, ainda não é o que realmente está fazendo a resolução.

Segundo método [a]:

Outra maneira que tentei, é modificar /system/etc/dhcpcd/dhcpcd-hooks/20-dns.confum conjunto de coisas corrigidas lá (mas esteja ciente de que os nomes de rede e o número de resolvedores podem ser diferentes). Sem sucesso.

Segundo método [b]:

E em /system/etc/dhcpcd/dhcpcd.confeu removi o parâmetro para aceitar resolvedores na negociação de DHCP. Sem sucesso também.

3º método:

Até agora, a única coisa que funcionaria um pouco seria usar uma "VPN de homem pobre", usar o aplicativo "SSH Tunnel", usar SOCKS4, mas usar isso não foi exatamente um bom resultado.

Currículo:

Parece que o DNS está definido em outro lugar ou todos são encaminhados (seqüestrados) assim que a rede estiver móvel.

Então como vai? É outra maneira suja de fornecer às operadoras uma ferramenta para demolir a neutralidade da rede?

No seu caso, sua pergunta foi por causa disso. Você tem o SSH para tentar se o SSHTunnel é uma solução alternativa para contornar a censura de suas operadoras?

Leo
fonte
Eu encontrei uma maneira de contornar o bloqueio, mas é complicado e caso a caso. Estou enraizado e tenho acesso ao arquivo hosts. Em seguida, procurei os endereços IP diretos do imgur e inseri manualmente esses valores no arquivo hosts. Problema resolvido por enquanto.
user51893
1

Encontrei o mesmo problema hoje e graças à Transfusion. Tentei desenvolver um aplicativo " DNS forwarde r" para resolver isso. Ele não altera o servidor DNS no sistema, mas encaminha as consultas DNS para outro servidor. Esta solução alternativa funciona bem para mim no Kitkat (Nexus 5 / 4.4.3 e Moto Razr / CM11). Espero que possa ajudar outros também.

user64656
fonte
Isso realmente funciona, não sei por que você foi votado #
30714
0

Atualmente, acho que não há nenhuma maneira de alterar seu DNS nos dados móveis. Mas se o seu telefone estiver enraizado, você poderá usar aplicativos como Definir DNS .

Karan Raj Baruah
fonte
Infelizmente, esse aplicativo não parece compatível com o Android 4.3 e superior :( Retirado da descrição do aplicativo: "POR FAVOR NÃO INSTALE NO ANDROID 4.3 POR UM MOMENTO, HÁ PROBLEMAS COM A MANEIRA DE MANIPULAR O DNS QUE FOI MUDADO NO KERNEL. Eu o tirei do mercado por 4,3 dispositivos. "
user51893
Sua pergunta diz que você precisa dele para o Android KitKat, que é o Android 4.4. * Enquanto o Android 4.3 é o Jellybean.
Karan Raj Baruah
Eu já abri a página do aplicativo na play store no meu dispositivo, e ela diz exatamente no topo: "Seu dispositivo não é compatível com esta versão". Portanto, tenho certeza que o problema persiste da versão 4.3 para o KitKat.
usar o seguinte comando
A recomendação de aplicativos não faz parte deste site, de acordo com as Perguntas frequentes. Respondi à pergunta se o Android pode fazê-lo nativamente. Eu recomendo pesquisar na Play Store você mesmo.
Karan Raj Baruah
Dica: Visitar a página de aplicativos no AppBrain lista várias alternativas (parte superior direita 4). Observe, no entanto, que a maioria das soluções nesse setor exige acesso root.
Izzy