1

Я пытаюсь использовать iptables для принудительной установки DNS для определенных устройств (Shibby Tomato на Asus RT-N66U). Я не нашел ничего в Интернете, описывающего такую конфигурацию. Самое близкое, что я мог найти, было это:

# 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)

Это близко, но есть пара проблем.

1) Я бы предпочел сделать это по MAC-адресу, а не по имени хоста. Это возможно?

2) Это позволяет использовать только один DNS-сервер для каждого клиента. Есть ли способ назначить первичный и вторичный DNS с помощью этого (или аналогичного) метода?

2 ответа2

2

Вопрос №1. Да, это можно сделать: просто используйте

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}')

Первая новая опция -m mac инструктирует iptables загружать модуль mac . Я не знаком с Shibby Tomato, но в стандартном Linux этот модуль довольно стандартный.

Вопрос №2. Вы всегда можете придумать обходной путь. Предположим, вы поручили вашему телевизору Samsung использовать 8.8.4.4 и 8.8.8.8 в качестве DNS (даже если это не тот DNS, который вам нужен). Затем вы можете отсортировать второй DNS, подставив предыдущую команду iptables следующими двумя командами:

 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}')

Это работает следующим образом: если телевизор не получает ответ от своего первого DNS (который он считает 8.8.4.4, но мы знаем, что это wan_get_dns1), то он попытается связаться со вторым, 8.8.8.8, который теперь перенаправляется на второй DNS, wan_get_dns.

0

iptables самом деле не для управления DNS-сервером - он не устанавливает DNS-сервер, скорее он перехватывает все DNS-запросы от клиента и вынуждает их перейти на определенный сервер. Вам лучше настроить DHCP-сервер так, чтобы он делал то, что вы хотите, так как в любом случае DHCP-сервер передает информацию DNS-сервера. Это единственный способ установить основной / дополнительный DNS-серверы.

Вы можете маршрутизировать по MAC-адресу, но я бы посоветовал не делать этого, поскольку он легко сломается, если устройство не будет подключено напрямую к маршрутизатору. Если вы не хотите использовать имена хостов, используйте IP.

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