Redireccionar las solicitudes de DNS directas en OpenWRT

2

En mi enrutador con OpenWRT, uso dnsmasq para el envenenamiento de DNS para bloquear anuncios. Si el host está en la lista, el enrutador responde a la solicitud de DNS con 192.168.99.99, que solo y siempre sirve un gif transparente 1x1 (el método pixelserv).

Sin embargo, los dispositivos locales pueden omitir esto utilizando directamente su propio servidor DNS. ¿Cómo puedo redireccionar estas solicitudes de DNS para bloquear los anuncios? .

Probé comandos como estos (8.8.8.8 y 8.8.4.4 son los servidores DNS, 192.168.1.102 el dispositivo fuente, 192.168.1.1 la IP de mi enrutador):

iptables -t nat -A PREROUTING -d 8.8.8.8 -j DNAT --to-destination 192.168.1.1
iptables -t nat -A PREROUTING -d 8.8.4.4 -j DNAT --to-destination 192.168.1.1

# or:
iptables -t nat -A PREROUTING -i wlan0 -s 192.168.1.102 -p udp --dport 53 -j REDIRECT --to-port 53
iptables -t nat -A PREROUTING -i wlan0 -s 192.168.1.102 -p tcp --dport 53 -j REDIRECT --to-post 53

Intenté agregar una regla de tráfico mediante el panel de administración de OpenWrt - & gt; Fuente NAT, que coincida con "Cualquier TCP, UDP de IP 192.168.1.102 en lan Para cualquier host, puerto 53 en lan", con la acción "Reescribir en la fuente IP 192.168.1.1, puerto 53". Creo que esto se efectúa también en iptables de cualquier manera.

Pero encuentro que las consultas de DNS todavía se están resolviendo:

root@OpenWrt:~# tcpdump -vvv -i wlan0 port 53

Chromecast.lan.42591 > google-public-dns-a.google.com.domain: [udp sum ok] 57897+ A? pubads.g.doubleclick.net. (42)
google-public-dns-a.google.com.domain > Chromecast.lan.42591: [udp sum ok] 57897 q: A? pubads.g.doubleclick.net. 5/0/0 pubads.g.doubleclick.net. [5h59m59s] CNAME partnerad.l.doubleclick.net., partnerad.l.doubleclick.net. [4m59s] A 74.125.136.157, partnerad.l.doubleclick.net. [4m59s] A 74.125.136.156, partnerad.l.doubleclick.net. [4m59s] A 74.125.136.155, partnerad.l.doubleclick.net. [4m59s] A 74.125.136.154 (132)

Tal vez un método completamente diferente, por ejemplo a través de dnsmasq, ¿funcionaría? Sin embargo, no pude encontrar esto.

(He encontrado alguna explicación sobre cómo redireccionar a otro servidor DNS remoto, pero eso no me ayudará aquí. Es principalmente para regiones de desbloqueo o para Tomate o DD-WRT . Además, esto está estrechamente relacionado con mi Pregunta anterior )

TacoV
fuente
tratar iptables -t nat -A PREROUTING -i br-lan -p udp --dport 53 -j DNAT --to 192.168.1.1
Zalmy
¡Eso realmente funciona! ¿Puedes convertirlo en una respuesta para que puedas elaborar y yo pueda aceptarlo?
TacoV

Respuestas:

2

Utilizar iptables -t nat -A PREROUTING -i br-lan -p udp --dport 53 -j DNAT --to 192.168.1.1

Explicación iptables utiliza cadenas para enrutar el tráfico. Usamos iptables -t nat -A PREROUTING Para seleccionar la cadena a la que queremos añadir la nueva regla. Luego, reducimos la selección para incluir solo el tráfico que sale a Internet seleccionando la interfaz -i br-lan que es la interfaz LAN de OpenWRT. Ya que solo estamos redirigiendo DNS udp 53 añadimos -p udp --dport 53. Ahora que solo obtenemos paquetes DNS, los redirigimos al servidor DNS local usando -j DNAT --to 192.168.1.1. Puede reemplazar el destino con cualquier servidor DNS.

Espero que esto ayude.

Zalmy
fuente
Especialmente me pregunto por qué puedo capturar los paquetes en wlan0 pero necesito usar br-lan para redirigirlos ... ¿Y probablemente también necesitaría agregar el mismo filtro para TCP (para las respuestas más grandes)?
TacoV
@TacoV: wlan0 es una interfaz física. No tiene una dirección IP. La dirección IP está vinculada a br-lan.
qasdfdsaq
@tacov wlan0 es la interfaz física inalámbrica. Así que todo lo que tienes es el tráfico wifi.
Zalmy