Como forçar o DNS para clientes específicos?

2

Estou executando o firmware do Shibby's Tomato no meu ASUS RT-N66U. O que estou tentando fazer é forçar o IP do OpenDNS para certos clientes (ou seja, meus filhos) com base no endereço MAC, enquanto outros clientes obtêm os valores padrão do roteador. Até agora, tudo bem (principalmente). Aqui está o script Dnsmasq que estou usando para fazer isso:

# 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

Isso funciona muito bem ... na banda de 2,4 GHz. Se eles se conectarem à banda de 5Ghz, eles receberão as entradas de DNS padrão do roteador.

Pergunta # 1: Existe uma maneira de fazer este script se aplicar a 2.4Ghz (eth1) e 5Ghz (eth2)? Na falta disso, o Tomato me permite colocar na whitelist dispositivos para a banda de 5Ghz? Eu posso usar lista branca / lista negra para wireless em geral, mas não vejo como fazer isso para um ou outro.

Eu sempre posso usar uma chave diferente para 5Ghz, então isso não é um grande problema. A lacuna maior é que isso só funciona com o DHCP. Alterar as configurações de DNS no laptop ignora completamente isso. Meu filho de 12 anos está chegando ao ponto que ele poderia descobrir isso sem muita dificuldade.

Pergunta # 2: Como eu posso forçar o DNS para um cliente em particular se eles não estiverem usando o DHCP? Eu estava pensando em algum tipo de regra de Firewall que permite apenas o tráfego de DNS para IPs específicos para endereços MAC específicos ou algo assim, mas não tenho idéia de como fazer isso. Alternativamente, existe alguma maneira de forçar o DHCP (ou bloquear certos clientes se eles não estiverem usando DHCP)?

    
por jluce50 06.09.2014 / 19:11

2 respostas

2

Por que vale a pena, aqui está como eu consegui esse trabalho (principalmente). Primeiro, certifiquei-me de que todos os dispositivos que eu não queria usar o OpenDNS tivessem nomes de host. Em seguida, adicionei "home" como o nome do domínio na identificação do roteador (não funcionará sem isso). Em seguida, adicionei o seguinte 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

Isso me deixa praticamente o que eu queria. A única coisa que falta é que os clientes que não combinam com a primeira seção (e então obtenham o ip do OpenDNS) não têm um dns secundário no caso de o primeiro estar inativo. Simplesmente não há como especificar isso usando esse método. Ainda assim, funciona 99,99% do tempo, o que vai ter que ser bom o suficiente. Essas duas últimas linhas para br1 garantem que qualquer pessoa que se conecte à minha rede convidada seja forçada a usar o OpenDNS também.

    
por 26.09.2014 / 17:28
0

Eu estou experimentando com tomate agora, mas eu posso voltar a dd-wrt por essa mesma razão. Aqui está como fazer isso em dd-wrt:

link

Desça até a seção "Interceptar IP / intervalo específico da porta DNS"

    
por 26.09.2014 / 13:18