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

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 eludir esto cambiando mi DNS a Google DNS u OpenDNS, pero no estoy muy seguro de cómo lograr esto en KitKat.

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

Respuestas (6)

Ok, antes que nada, 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 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é, se cambió el comportamiento del sistema para redirigir todas las consultas de DNS a un demonio del sistema llamado netd(aquí hay un enlace a una presentación relacionada con las redes de Android antes de 4.4 que , sin embargo, cubre parte de estos temas).

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

Es necesario comunicarse directamente con el daemon 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 el 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.

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
@Christiand'Heureuse tienes razón, actualicé la respuesta, gracias.

"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 lo describió Leo; 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

El motivo 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 socket /dev/socket/dnsproxyd unix. Este hilo también describe por qué se ignoran las propiedades del sistema.

Para deshacer esto, haga

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

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

iptables -t nat -D OUTPUT *linenumber*
¡Gracias! también, resumen de la razón: Google está jugando una carrera armamentista con los bloqueadores de anuncios. intentaron deshabilitar los medios actuales que bloqueaban los anuncios, y los bloqueadores de anuncios se trasladaron a otro, mientras que todos los usuarios (independientemente de que usen el bloqueador de anuncios o no) estarán molestos para siempre por ese movimiento de Google. ...Pensé que todos sabían que luchar contra los bloqueadores de anuncios era una tontería ahora. Google tonto. (Además, la aplicación de código abierto AFWALL es una forma conveniente de agregar esta regla personalizada fácilmente)
AfWall+ wiki sobre cómo aplicar una regla de iptables personalizada como esta

Lamentablemente, puede ser imposible hacerlo en este momento, 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í.

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

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

1er método:

Cuando pruebo el 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 pruebo a qué IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk resuelve ... Obtengo una respuesta NXDOMAIN, lo que significa que no proviene del servidor de nombres OpenDNS que configuré (que devolvería una respuesta con una IP alternativa, para servirle agrega).

al hacer

getprop | grep dns

Sólo vería lo que he configurado. Sin embargo, cuando cambio de Wi-Fi a móvil (3G o 4G/LTE), veo direcciones IP que reconozco como asignadas a mi operador de telefonía móvil. Las aplicaciones como "DNSwitch" o "DNS Changer" pueden restablecer esos resolutores 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.confun conjunto de cosas arregladas allí (pero tenga en cuenta que los nombres de red y la cantidad de resolutores pueden diferir). Sin éxito.

2do método [b]:

Y /system/etc/dhcpcd/dhcpcd.confeliminé el parámetro para aceptar resolutores en la negociación de DHCP. Tampoco éxito.

3er método:

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

Reanudar:

Parece que el DNS está configurado en otro lugar o que todos se reenvían (secuestrados) 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 tu caso tu pregunta fue por eso. ¿Tiene SSH para probar si SSHTunnel es una solución alternativa para sortear la censura de sus operadores?

He encontrado una manera de eludir el bloqueo, pero es engorroso y depende de cada 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.

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, pero reenvía las consultas dns a otro servidor. Esta solución funciona bien para mí en Kitkat (Nexus 5/4.4.3 y Moto Razr/CM11). Espero que pueda ayudar a otros también.

Esto realmente funciona, no estoy seguro de por qué te votaron abajo

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 Set DNS .

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 SE HA CAMBIADO EL MANEJO DE DNS EN EL KERNEL. LO SAQUE DEL MERCADO PARA DISPOSITIVOS 4.3".
Su pregunta dice que lo necesita para Android KitKat, que es Android 4.4.* mientras que Android 4.3 es Jellybean.
Ya abrí la página de la aplicación en Play Store en mi dispositivo y dice justo en la parte superior: "Tu 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.
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.
Sugerencia: al visitar la página de aplicaciones en AppBrain se enumeran varias alternativas (4 arriba a la derecha). Tenga en cuenta, sin embargo, que la mayoría de las soluciones en ese sector requieren acceso de raíz.