
Estoy ejecutando el firmware Shibby's Tomato en mi ASUS RT-N66U. Lo que intento hacer es forzar las IP de OpenDNS para ciertos clientes (es decir, mis hijos) según la dirección MAC, mientras que otros clientes obtienen los valores predeterminados del enrutador. Hasta ahora, todo bien (en su mayoría). Aquí está el script Dnsmasq que estoy usando para hacer esto:
# Assign alternate DNS for select hosts
# Set Specific Clients to be affected
dhcp-mac=set:altdns,XX:XX:XX:XX:XX:XX # kids laptop
dhcp-mac=set:altdns,XX:XX:XX:XX:XX:XX # kids ipod
# Set Alternate DNS
dhcp-option=tag:altdns,option:dns-server,208.67.220.220,208.67.222.222
Esto funciona muy bien... en la banda de 2,4Ghz. Si se conectan a la banda de 5 Ghz, obtienen las entradas DNS predeterminadas del enrutador.
Pregunta n.º 1: ¿Existe alguna forma de hacer que este script se aplique tanto a 2,4 Ghz (eth1) como a 5 Ghz (eth2)? De no ser así, ¿Tomato me permite incluir dispositivos en la lista blanca para la banda de 5 Ghz? Puedo incluir en la lista blanca/negra la conexión inalámbrica en general, pero no veo cómo hacerlo para uno u otro.
Siempre puedo usar una clave diferente para 5Ghz, así que no es gran cosa. La mayor laguna es que esto sólo funciona con DHCP. Cambiar la configuración de DNS en la computadora portátil evita esto por completo. Mi hijo de 12 años está llegando al punto en que podría resolver esto sin muchos problemas.
Pregunta #2: ¿Cómo puedo forzar el DNS para un cliente en particular si no está usando DHCP? Estaba pensando en algún tipo de regla de firewall que solo permita el tráfico DNS a IP específicas para direcciones MAC específicas o algo así, pero no tengo idea de cómo hacerlo. Alternativamente, ¿hay alguna forma de forzar DHCP (o bloquear ciertos clientes si no están usando DHCP)?
Respuesta1
Por si sirve de algo, así es como hice que esto funcionara (principalmente). Primero, me aseguré de que todos los dispositivos que no quería usar OpenDNS tuvieran nombres de host. Luego agregué "casa" como nombre de dominio en Identificación del enrutador (no funcionará sin esto). Luego agregué el siguiente script de firewall:
# For certain devices, use default LAN DNS
# #############################################################
iptables -t nat -A PREROUTING -i br0 -s xxxx_Family_PC.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxx_Family_PC.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Laptop.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Laptop.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Chromecast.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Chromecast.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Galaxy-Note.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Galaxy-Note.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-HTC-One-M8.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-HTC-One-M8.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Roku.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Roku.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Sharp-Aquos-HDTV.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Sharp-Aquos-HDTV.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxxsiPhone2.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxxsiPhone2.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-MacBook.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-MacBook.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
# For every other client, use OpenDNS (including guest network - br1).
# #############################################################
iptables -t nat -A PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 208.67.220.220
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 208.67.220.220
iptables -t nat -A PREROUTING -i br1 -p udp --dport 53 -j DNAT --to 208.67.220.220
iptables -t nat -A PREROUTING -i br1 -p tcp --dport 53 -j DNAT --to 208.67.220.220
Esto me da más o menos lo que quería. Lo único que falta es que los clientes que no coinciden con la primera sección (y por lo tanto obtienen la ip de OpenDNS) no tengan un DNS secundario en caso de que el primero no funcione. Simplemente no hay forma de especificar eso usando este método. Aún así, funciona el 99,99% del tiempo, lo que tendrá que ser lo suficientemente bueno. Esas dos últimas líneas para br1 garantizan que cualquiera que se conecte a mi red de invitados también esté obligado a utilizar OpenDNS.
Respuesta2
Estoy experimentando con tomate ahora, pero es posible que vuelva a dd-wrt por esta misma razón. Aquí se explica cómo hacerlo en dd-wrt:
http://www.dd-wrt.com/wiki/index.php/OpenDNS
Desplácese hacia abajo hasta la sección "Interceptar IP/rango específico del puerto DNS"