2

Я использую прошивку Shibby's Tomato на моем ASUS RT-N66U. То, что я пытаюсь сделать, это заставить IP-адреса OpenDNS для определенных клиентов (т.е. моих детей) на основе MAC-адреса, в то время как другие клиенты получают значения по умолчанию маршрутизатора. Пока все хорошо (в основном). Вот сценарий Dnsmasq, который я использую для этого:

# 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

Это прекрасно работает ... в диапазоне 2,4 ГГц. Если они подключаются к полосе 5 ГГц, они получают записи DNS по умолчанию для маршрутизатора.

Вопрос № 1: есть ли способ применить этот сценарий к 2,4 ГГц (eth1) и 5 ГГц (eth2)? В противном случае Tomato позволяет мне вносить устройства в белый список для диапазона 5 ГГц? Я могу белый / черный список для беспроводных сетей в целом, но я не вижу, как это сделать для одного или другого.

Я всегда могу просто использовать другой ключ для 5 ГГц, так что это не так уж много. Большая лазейка в том, что это работает только с DHCP. Изменение настроек DNS на ноутбуке полностью обходит это. Мой 12-летний сын доходит до того, что он мог понять это без особых проблем.

Вопрос № 2: Как я могу заставить DNS для конкретного клиента, если они не используют DHCP? Я думал, что какое-то правило брандмауэра разрешает только трафик DNS на определенные IP-адреса для определенных MAC-адресов или что-то в этом роде, но я понятия не имею, как это сделать. Альтернативно, есть ли способ заставить DHCP (или заблокировать определенных клиентов, если они не используют DHCP)?

2 ответа2

2

Для чего это стоит, вот как я получил это работает (в основном). Во-первых, я убедился, что все устройства, которые я не хотел использовать OpenDNS, имели имена хостов. Затем я добавил "дом" в качестве имени домена в идентификации маршрутизатора (без этого не получится). Затем я добавил следующий скрипт брандмауэра:

# 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

Это дает мне в значительной степени то, что я хотел. Единственное, чего не хватает, так это того, что клиенты, которые не соответствуют первому разделу (и, следовательно, получают IP-адрес OpenDNS), не имеют вторичного dns, если первый не работает. Там просто нет способа указать это с помощью этого метода. Тем не менее, это работает 99,99% времени, что должно быть достаточно хорошо. Эти последние две строки для br1 гарантируют, что любой, подключающийся к моей гостевой сети, также будет вынужден использовать OpenDNS.

0

Сейчас я экспериментирую с помидорами, но я могу вернуться к dd-wrt именно по этой причине. Вот как это сделать в dd-wrt:

http://www.dd-wrt.com/wiki/index.php/OpenDNS

Прокрутите вниз до раздела «Перехват IP-адресов для конкретного порта / диапазона»

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .