Comment changer le DNS des connexions mobiles sur Android KitKat?

24

Je veux éviter la censure de la part de mon FAI mobile local (cela bloque l'imgur, par exemple, pour une raison inconnue.

Capture d'écran
Capture d'écran (cliquez sur l'image pour une plus grande variante)

Je suis assez certain que je peux contourner cela en changeant mon DNS en Google DNS ou OpenDNS, mais je ne sais pas vraiment comment y parvenir sur KitKat.

Info:
Device: Nexus 5
Android version: 4.4.2
Device status: rooted
user51893
la source

Réponses:

18

Ok, tout d'abord une divulgation complète : je suis l'auteur d'une application qui est maintenant sur le Google Play Store et qui vous permet de changer le DNS pour toute connexion mobile sur Android 4.4. L'application nécessite un root , coûte quelques dollars et s'appelle Override DNS . On m'a dit, sur une réponse maintenant supprimée, qu'il est juste de créer un lien vers mon application tant que je l'expose clairement.

Le problème que j'ai trouvé avec cette version d'Android (4.4) est que, apparemment pour des raisons de mise en cache, le comportement du système a été modifié pour rediriger toutes les requêtes DNS vers un démon système appelé netd(voici un lien vers une présentation liée aux réseaux Android avant 4.4 qui couvre cependant une partie de ces sujets).

La méthode getprop/ setpropne fonctionne plus. Ces valeurs, lorsqu'elles sont modifiées, sont simplement ignorées par le netddémon.

Il est nécessaire de communiquer directement avec le démon via le /dev/socket/netdsocket. Dans Android, il présente maintenant un outil appelé ndcqui fait exactement ce travail.

La syntaxe des éléments liés au DNS est la suivante:

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

L' application devine automatiquement le nom du périphérique réseau et applique ces commandes chaque fois qu'un réseau mobile est activé.

MaxChinni
la source
La syntaxe correcte de setifdns est: ndc resolver setifdns <iface> <domains> <dns1> <dns2> .... Exemple:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Christian d'Heureuse
@ Christiand'Heureuse tu as raison, j'ai mis à jour la réponse, merci.
MaxChinni
13

J'ai "résolu" ce problème en utilisant une règle iptables pour transmettre toutes les connexions du port 53 à un serveur DNS prévu; mon expérience sur Android 4.4.2 avec la tentative de modifier les paramètres DNS en étant connecté à la 3G a été exactement comme Leo l'a décrit; ignorance des valeurs dans getprop | grep dns [0-9] \]: et dhcpd.conf.

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

La raison en est la suivante: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Toutes les applications effectuent des recherches DNS via netd via un socket / dev / socket / dnsproxyd unix. Ce fil décrit également pourquoi les propriétés du système sont ignorées.

Pour annuler cela, faites

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

, trouvez le numéro de ligne qui correspond à udp dpt: 53 à: xxx.xxx.xxx.xxx: 53 et faites

iptables -t nat -D OUTPUT *linenumber*
Transfusion
la source
2
Merci! aussi, résumé de la raison: Google fait une course aux armements avec des bloqueurs de publicités. ils ont essayé de désactiver les moyens actuels de blocage des publicités, et les bloqueurs de publicités sont passés à un autre, tandis que tous les utilisateurs (qu'ils utilisent ou non le bloqueur de publicités) seront à jamais agacés par ce mouvement google. ... Je pensais que tout le monde savait que se battre contre les bloqueurs de publicités était à présent stupide. stupide google. (également, l'application opensource AFWALL est un moyen pratique d'ajouter facilement cette règle personnalisée)
gcb
AfWall + wiki sur la façon d'appliquer une règle iptables personnalisée comme celle-ci
betatester07
1

Malheureusement, il peut être impossible de le faire pour l'instant, cependant, il est possible d'essayer DNS Changer . Cela peut fonctionner si vous êtes enraciné, mais il n'y a aucune garantie.

Un bon service DNS à utiliser serait le service DNS public de Google. Cela a tendance à fonctionner très bien pour ce type de problèmes ici.

Si rien de tout cela ne fonctionne, continuez à chercher des réponses. Les développeurs XDA sont un bon site pour des choses comme celle-ci . Ils ont tendance à avoir beaucoup de réponses sur les choses pour Android.

lunettes de protection
la source
1

Je suis sur KitKat Cyanogenmod 11, ce qui signifie que je suis enraciné par défaut. Malgré cela, je ne peux que signaler un échec:

1ère méthode:

Quand j'essaye adb shellavec

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

puis testez à quelle adresse IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk est résolu ... J'obtiens une réponse NXDOMAIN, ce qui signifie qu'elle ne provient pas du serveur de noms OpenDNS que j'ai défini (qui retournerait une réponse avec une adresse IP alternative, pour vous servir ajoute).

En faisant

getprop | grep dns

Je verrais seulement ce que j'ai configuré. Cependant, lorsque je passe du WiFi au mobile (3G ou 4G / LTE), je vois des IP que je reconnais comme étant attribuées à mon opérateur de téléphonie mobile. Des applications comme «DNSwitch» ou «DNS Changer» peuvent réinitialiser automatiquement ces résolveurs lors d'un changement de réseau. Cependant, ce qui getpropme rapporte, ce n'est toujours pas ce qui fait vraiment la résolution.

2ème méthode [a]:

J'ai également essayé de modifier /system/etc/dhcpcd/dhcpcd-hooks/20-dns.confun ensemble de choses fixes (mais sachez que les noms de réseau et le nombre de résolveurs peuvent différer). Sans succès.

2ème méthode [b]:

Et /system/etc/dhcpcd/dhcpcd.confj'ai supprimé le paramètre pour accepter les résolveurs lors de la négociation DHCP. Pas de succès non plus.

3ème méthode:

Jusqu'à présent, la seule chose qui fonctionnerait un peu est d'utiliser un "pauvre VPN", en utilisant l'application "SSH Tunnel", en utilisant SOCKS4, mais en utilisant cela, je n'ai pas exactement obtenu un bon résultat.

CV:

Il semble que le DNS soit défini ailleurs ou que tous soient transférés (détournés) dès que le réseau est mobile.

Alors, comment ça se fait? Est-ce une autre façon sale de fournir aux opérateurs un outil pour démolir la neutralité du réseau?

Dans votre cas, votre question était à cause de cela. Avez-vous SSH à essayer si SSHTunnel est une solution alternative pour contourner la censure de vos opérateurs?

Leo
la source
J'ai trouvé un moyen de contourner le blocage, mais c'est lourd et au cas par cas. Je suis rooté, j'ai donc accès au fichier hosts. Ensuite, j'ai cherché les adresses IP directes d'imgur, puis j'ai entré manuellement ces valeurs dans le fichier hosts. Problème résolu pour l'instant.
user51893
1

J'ai rencontré le même problème aujourd'hui, et grâce à la transfusion. J'ai essayé de développer une application " DNS forwarde r" pour le faire. Il ne modifie pas le serveur DNS sur le système, mais transfère les requêtes DNS vers un autre serveur. Cette solution de contournement fonctionne bien pour moi sur Kitkat (Nexus 5 / 4.4.3 et Moto Razr / CM11). J'espère que cela peut aussi aider les autres.

user64656
la source
Cela fonctionne réellement, je ne sais pas pourquoi vous avez voté
warsong
0

Actuellement, je ne pense pas qu'il existe un moyen de modifier votre DNS sur vos données mobiles. Mais si votre téléphone est enraciné, vous pouvez utiliser des applications comme Définir DNS .

Karan Raj Baruah
la source
Malheureusement, cette application ne semble pas prendre en charge Android 4.3 et supérieur :( Tiré de la description de l'application: "S'IL VOUS PLAÎT NE PAS INSTALLER SUR ANDROID 4.3 POUR LE MOMENT, IL Y A DES PROBLÈMES AVEC LA MANIÈRE DE LA MANIPULATION DNS DNS A ÉTÉ CHANGÉ DANS LE KERNEL. Je l'ai retiré du marché pour les appareils 4.3. "
user51893
Votre question indique que vous en avez besoin pour Android KitKat qui est Android 4.4. * Tandis qu'Android 4.3 est Jellybean.
Karan Raj Baruah
J'ai déjà ouvert la page de l'application sur Play Store sur mon appareil, et elle dit tout en haut: "Votre appareil n'est pas compatible avec cette version." Je suis donc sûr que le problème persiste de la version 4.3 à KitKat.
user51893
La recommandation d'applications ne fait pas vraiment partie de ce site selon la FAQ. J'ai répondu à la question de savoir si Android peut le faire nativement. Je vous recommande de rechercher le Play Store vous-même.
Karan Raj Baruah du
Astuce: La visite de la page des applications sur AppBrain répertorie plusieurs alternatives (en haut à droite 4). Notez, cependant, que la plupart des solutions dans ce secteur nécessitent un accès root.
Izzy