¿Cómo cambiar el DNS de las conexiones móviles en Android KitKat?

24

Quiero evitar la censura de mi ISP móvil local (bloquea imgur, por ejemplo, por alguna razón desconocida).

Captura de pantalla
Captura de pantalla (haga clic en la imagen para una variante más grande)

Estoy bastante seguro de que puedo evitar esto cambiando mi DNS a Google DNS o OpenDNS, pero no estoy realmente seguro de cómo lograr esto en KitKat.

Info:
Device: Nexus 5
Android version: 4.4.2
Device status: rooted
usuario51893
fuente

Respuestas:

18

Ok, en primer lugar, divulgación completa : soy el autor de una aplicación que ahora está en Google Play Store y que te permite cambiar el DNS para cualquier conexión móvil en Android 4.4. La aplicación requiere root , cuesta un par de dólares y se llama Override DNS . Me dijeron, en una respuesta ahora eliminada, que es justo vincular a mi aplicación siempre que la exponga claramente.

El problema que encontré con esta versión de Android (4.4) es que, aparentemente por razones de almacenamiento en caché, el comportamiento del sistema se ha cambiado para redirigir todas las consultas DNS a un demonio del sistema llamado netd(aquí hay un enlace a una presentación relacionada con la red de Android anterior a 4.4) , sin embargo, cubre parte de estos temas).

El método getprop/ setpropya no funciona. Esos valores, cuando se cambian, simplemente son ignorados por el netddemonio.

Es necesario comunicarse directamente con el demonio a través del /dev/socket/netdsocket. En Android ahora está presente una herramienta llamada ndcque hace exactamente este trabajo.

La sintaxis para las cosas relacionadas con DNS es esta:

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

La aplicación adivina automáticamente el nombre del dispositivo de red y aplica estos comandos cada vez que se activa una red móvil.

MaxChinni
fuente
La sintaxis correcta de setifdns es: ndc resolver setifdns <iface> <domains> <dns1> <dns2> .... Ejemplo:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Christian d'Heureuse
@ Christiand'Heureuse tienes razón, actualicé la respuesta, gracias.
MaxChinni
13

"Resolví" este problema usando una regla de iptables para reenviar todas las conexiones del puerto 53 a un servidor DNS previsto; mi experiencia en Android 4.4.2 al intentar modificar la configuración de DNS mientras estaba conectado a 3G ha sido exactamente como Leo lo describió; ignorancia de valores en getprop | grep dns [0-9] \]: y dhcpd.conf.

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

La razón es como se describe aquí: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Todas las aplicaciones realizan búsquedas de DNS a través de netd a través de un / dev / socket / dnsproxyd unix socket. Este hilo también describe por qué se ignoran las propiedades del sistema.

Para deshacer esto, haz

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

, encuentre el número de línea que corresponde a udp dpt: 53 a: xxx.xxx.xxx.xxx: 53 y haga

iptables -t nat -D OUTPUT *linenumber*
Transfusión
fuente
2
¡Gracias! También, resumen de la razón: Google está jugando carrera armamentista con bloqueadores de anuncios. trataron de deshabilitar los medios actuales que bloquearon los anuncios y los bloqueadores de anuncios se trasladaron a otro, mientras que todos los usuarios (independientemente de si usan bloqueadores de anuncios o no) se sentirán molestos para siempre por ese movimiento de Google. ... Pensé que todos sabían que luchar contra los bloqueadores de anuncios era un movimiento tonto por ahora. Google tonto. (también, la aplicación de código abierto AFWALL es una forma conveniente de agregar esta regla personalizada fácilmente)
gcb
AfWall + wiki sobre cómo aplicar una regla de iptables personalizada como esta
betatester07
1

Lamentablemente, puede ser imposible hacerlo a partir de ahora, sin embargo, es posible probar DNS Changer . Esto puede funcionar si está rooteado, pero no hay garantías.

Un buen servicio de DNS para usar sería el servicio de DNS público de Google. Tiende a funcionar muy bien para este tipo de problemas aquí mismo.

Si nada de esto funciona, sigue buscando respuestas. Un buen sitio para cosas como esta es XDA Developers . Tienden a tener muchas respuestas sobre cosas para Android.

pyrogoggles
fuente
1

Estoy en KitKat Cyanogenmod 11, lo que significa que estoy rooteado de forma predeterminada. A pesar de eso, solo puedo reportar un fracaso:

1er método:

Cuando pruebo adb shellcon

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

y luego compruebe a qué IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk resuelve ... obtengo una respuesta NXDOMAIN, lo que significa que no vino del servidor de nombres OpenDNS que configuré (que devolvería una respuesta con una IP alternativa, para servirle a usted agrega).

Al hacer

getprop | grep dns

Solo vería lo que he configurado. Sin embargo, al cambiar de WiFi a móvil (3G o 4G / LTE), veo IP que reconozco como asignadas a mi operador de telefonía móvil. Las aplicaciones como "DNSwitch" o "DNS Changer" pueden volver a configurar esos solucionadores automáticamente al cambiar la red. Sin embargo, lo getpropque me informa, todavía no es lo que realmente está resolviendo.

2do método [a]:

Otra forma en que lo intenté es modificar /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf un conjunto de cosas arregladas allí (pero tenga en cuenta que los nombres de red y el número de resolvers pueden diferir). Sin éxito.

2do método [b]:

Y en /system/etc/dhcpcd/dhcpcd.confeliminé el parámetro para aceptar resolvers en la negociación de DHCP. Ningún éxito tampoco.

3er método:

Hasta ahora, lo único que funcionaría un poco es usar una "VPN pobre", usar la aplicación "Túnel SSH", usar SOCKS4, pero usar eso no obtuvo exactamente un buen resultado.

Currículum:

Parece que DNS está configurado en otro lugar, o todos se reenvían (secuestran) tan pronto como la red es móvil.

Entonces, ¿cómo es que? ¿Es otra forma sucia de proporcionar a los operadores una herramienta para demoler la neutralidad de la red?

En su caso, su pregunta fue por eso. ¿Tiene SSH para probar si SSHTunnel es una solución alternativa para evitar la censura de sus operadores?

León
fuente
He encontrado una manera de sortear el bloqueo, pero es engorroso y caso por caso. Estoy rooteado, así que tengo acceso al archivo de hosts. Luego, busqué las direcciones IP directas de imgur, luego ingresé manualmente esos valores en el archivo de hosts. Problema resuelto por ahora.
user51893
1

Encontré el mismo problema hoy, y gracias a Transfusion. Traté de desarrollar una aplicación " DNS forwarde r" para resolverlo. No cambia el servidor DNS en el sistema, sino que reenvía las consultas DNS a otro servidor. Esta solución me funciona bien en Kitkat (Nexus 5 / 4.4.3 y Moto Razr / CM11). Espero que pueda ayudar a otros también.

usuario64656
fuente
Esto realmente funciona, no estoy seguro de por qué te votaron
warsong
0

Actualmente no creo que haya ninguna forma de cambiar su DNS en sus datos móviles. Pero si su teléfono está rooteado, puede usar aplicaciones como Establecer DNS .

Karan Raj Baruah
fuente
Lamentablemente, esa aplicación no parece ser compatible con Android 4.3 y superior :( Tomado de la descripción de la aplicación: "POR FAVOR NO INSTALE EN ANDROID 4.3 POR EL MOMENTO, HAY PROBLEMAS CON LA MANERA EN QUE EL MANEJO DE DNS SE HA CAMBIADO EN EL KERNEL. Lo he
sacado del mercado
Su pregunta dice que lo necesita para Android KitKat, que es Android 4.4. *, Mientras que Android 4.3 es Jellybean.
Karan Raj Baruah
Ya abrí la página de la aplicación en Play Store en mi dispositivo, y dice en la parte superior: "Su dispositivo no es compatible con esta versión". Así que estoy seguro de que el problema persiste desde la versión 4.3 hasta KitKat.
user51893
Recomendar aplicaciones no es realmente una parte de este sitio de acuerdo con las preguntas frecuentes. Respondí a la pregunta de si Android puede hacerlo de forma nativa. Recomiendo buscar en Play Store usted mismo.
Karan Raj Baruah
Sugerencia: Visitar la página de aplicaciones en AppBrain enumera varias alternativas (parte superior derecha 4). Sin embargo, tenga en cuenta que la mayoría de las soluciones en ese sector requieren acceso de root.
Izzy