El DNS ha sido tradicionalmente parte de libc
. El Android Bionic libc
depende de netd
para el DNS tradicional así como para el DNS privado ( DoT
). Véase esta respuesta para más detalles.
Ya que cada aplicación funciona en su propia posición de Máquina Virtual (ART) bifurcada por zygote
así que cuando una aplicación crea un nueva conexión a un nombre de host remoto, las consultas DNS son hechas por el VM en nombre de la aplicación, que hace uso de la resolución DNS en código nativo. Así que todo el asunto es manejado por el tiempo de ejecución de Java.
Cuando se usa la conexión, un servidor DNS debe ser ejecutado en un dispositivo Android que escuche las consultas DNS recibidas de los hosts conectados. Estas consultas se resuelven según la configuración del servidor DNS. dnsmasq
es la actual aplicación de DHCP
/ DNS
servidor en Android hasta Pie. Es un demonio nativo, que recibe nameservers
de TetherController
(una parte de netd
) o /etc/resolv.conf
(si no-resolv
no se aprueba el argumento) o /etc/dnsmasq.conf
(usando server=
opción).
Así que dnsmasq
trabaja de forma independiente y no depende de libc
o netd
para la resolución del DNS. En otro caso si el dispositivo atado está usando algún otro servidor de nombres público y no dnsmasq
las consultas del DNS se envían a Internet según la política de enrutamiento y las reglas de la NAT. En cada caso las consultas no pasan por el DNS privado.
Dicho esto, puedes usar una solución de terceros para el DNS encriptado. Ve por una solución robusta: dnscrypt-proxy en un dispositivo con root. Ver esta respuesta para una configuración avanzada.
O usar alguna aplicación VPN como este . Pero la VPN no redirige el tráfico de hotspots a través de la red VPN hasta donde he probado en Pie ROM. Tienes que modificar la tabla de enrutamiento y las reglas de reenvío. Esto funciona para mí:
~# iptables -t mangle -I PREROUTING -i wlan0 -p udp --dport 53 -j MARK --set-mark 2
~# ip rule add fwmark 2 lookup 5000
~# ip route add default dev tun0 table 5000
~# iptables -I FORWARD -o wlan0 -i tun0 -j ACCEPT
~# iptables -I FORWARD -i wlan0 -o tun0 -j ACCEPT
Además NAT
También podría ser necesario para algunas situaciones. Así que parece que no hay una solución no-root.
P.D:
Lo más probable es que el Android Q tenga DoT
en la atadura también porque dnsmasq
está siendo reemplazado por un servicio DHCP dentro del tiempo de ejecución de Java.