É possível forçar o DNS para certos dispositivos com iptables?

1

Estou tentando usar o iptables para forçar o DNS de determinados dispositivos (Shibby Tomato no Asus RT-N66U). Eu não encontrei nada online descrevendo tal configuração. O mais perto que pude encontrar foi isto:

# For the Samsung TV, use WAN DNS (i.e., Comcast).
# #############################################################
iptables -t nat -A PREROUTING -i br0 -s samsung-tv.home.lan -p tcp --dport 53 -j DNAT --to $(nvram get wan_get_dns | awk -F' ' '{print $1}')
iptables -t nat -A PREROUTING -i br0 -s samsung-tv.home.lan -p udp --dport 53 -j DNAT --to $(nvram get wan_get_dns | awk -F' ' '{print $1}')

# For every other client, use LAN DNS.
# #############################################################
iptables -t nat -A PREROUTING -i br0 -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)

Isso está próximo, mas há alguns problemas.

1) Eu prefiro fazê-lo pelo endereço MAC, ao invés de hostname. Isso é possível?

2) Isso permite apenas um único servidor DNS por cliente. Existe uma maneira de atribuir um DNS primário e secundário usando este método (ou similar)?

    
por jluce50 09.09.2014 / 16:26

2 respostas

2

Pergunta n.1 Sim, isso pode ser feito: basta usar

iptables -t nat -A PREROUTING -i br0 -m mac --mac-source MAC-ADDRESS-OF-SAMSUNG -p tcp --dport 53 -j DNAT --to $(nvram get wan_get_dns | awk -F' ' '{print $1}')

A primeira nova opção, -m mac , instrui iptables a carregar o módulo mac . Eu não estou familiarizado com o Shibby Tomato, mas no Linux padrão este módulo é bastante normal.

Pergunta n.2 Você sempre pode inventar um trabalho ao redor. Suponha que você tenha instruído sua TV Samsung a usar 8.8.4.4 e 8.8.8.8 como DNS (mesmo que eles não sejam o DNS que você deseja). Então você pode implementar um segundo DNS substituindo o comando anterior do iptables pelos seguintes dois comandos:

 iptables -t nat -A PREROUTING -i br0 -d 8.8.4.4 -m mac --mac-source MAC-ADDRESS-OF-SAMSUNG -p tcp --dport 53 -j DNAT --to $(nvram get wan_get_dns1 | awk -F' ' '{print $1}')

 iptables -t nat -A PREROUTING -i br0 -d 8.8.8.8 -m mac --mac-source MAC-ADDRESS-OF-SAMSUNG -p tcp --dport 53 -j DNAT --to $(nvram get wan_get_dns2 | awk -F' ' '{print $1}')

Isso funciona da seguinte maneira: se a TV não obtiver uma resposta de seu primeiro DNS (que ele acha que é 8.8.4.4 mas sabemos que é wan_get_dns1), ele tentará entrar em contato com o segundo, 8.8.8.8, que agora é redirecionado para o segundo DNS, wan_get_dns.

    
por 10.09.2014 / 16:48
0

iptables não é realmente para o gerenciamento do servidor DNS - Ele não define o servidor DNS, em vez disso, ele seqüestra todas as consultas DNS do cliente e as obriga a ir para um servidor específico. Seria melhor configurar o servidor DHCP para fazer o que você deseja, já que o servidor DHCP distribui as informações do servidor DNS de qualquer maneira. Esta é a única maneira de você poder definir servidores DNS primários / secundários.

Você pode rotear por endereço MAC, mas eu aconselho que, uma vez que isso irá quebrar facilmente, a menos que o dispositivo esteja conectado diretamente ao roteador. Se você não quiser usar nomes de host, use um IP.

    
por 09.09.2014 / 16:50