@klirichek

Как сделать «белый список» mac-адресов в ipchain?

Преамбула

Есть "семейный" яндекс-dns, для которого на роутере запущен второй экземпляр dnsmasq и настроены правила ipchains, прозрачно проксирующие все коннекты с этих хостов куда угодно на 53-й порт этому экземпляру dnsmasq

Эти правила прописаны через uci, и в реальном ipchains выглядят примерно так:

iptables -t nat -A zone_lan_prerouting -p udp -m id --id 0x66773300 -m udp --dport 53 -m mac --mac-source XX:XX:XX:XX:XX:XX -m comment --comment family-yandex-dns -j DNAT --to-destination 192.168.1.5:65053
iptables -t nat -A zone_lan_prerouting -p tcp -m id --id 0x66773300 -m udp --dport 53 -m mac --mac-source XX:XX:XX:XX:XX:XX -m comment --comment family-yandex-dns -j DNAT --to-destination 192.168.1.5:65053


(и так по паре правил для каждого хоста).

Получается своего рода "чёрный список" - всем хостам сети можно напрямую ходить в интернет, кроме явно прописанных в правилах хостов (детские устройства), которые всегда ходят через запасной dns и оттуда на "семейный" dns.

Фабула

Хочется сделать наоборот. Чтобы все хосты по умолчанию проксировались на семейный dns, кроме избранного списка тех, кому можно ходить куда угодно напрямую.

Модифицировать правила выше, поставив перед мак-адресом ! не получается - не дают правила Де-Моргана. Иными словами - в этом случае между правилами должно стоять "ИЛИ", а не "И".
Прописать несколько мак-адресов в одно правило тоже нельзя.

И что делать?
Напрашивается мысль как-то маркировать трафик для "белых" хостов, и позднее в зависимости от маркировки либо пускать его прямо в интернет, либо проксировать. Но кроме мысли ничего нет; я не сисадмин и совершенно не представляю, как это сделать. К тому же это лучше бы делать через uci, а не напрямую лезть в правила iptables.
Или может вообще нужно как-то по-другому?
  • Вопрос задан
  • 648 просмотров
Пригласить эксперта
Ответы на вопрос 1
hint000
@hint000
у админа три руки
Пусть маки белых хостов - 11:11:11:11:11:11 и 22:22:22:22:22:22, тогда:

iptables -t nat -A zone_lan_prerouting -p udp -m id --id 0x66773300 -m udp --dport 53 -m mac --mac-source 11:11:11:11:11:11 -j ACCEPT
iptables -t nat -A zone_lan_prerouting -p tcp -m id --id 0x66773300 -m udp --dport 53 -m mac --mac-source 11:11:11:11:11:11 -j ACCEPT

iptables -t nat -A zone_lan_prerouting -p udp -m id --id 0x66773300 -m udp --dport 53 -m mac --mac-source 22:22:22:22:22:22 -j ACCEPT
iptables -t nat -A zone_lan_prerouting -p tcp -m id --id 0x66773300 -m udp --dport 53 -m mac --mac-source 22:22:22:22:22:22 -j ACCEPT

iptables -t nat -A zone_lan_prerouting -p udp -m id --id 0x66773300 -m udp --dport 53 -m comment --comment family-yandex-dns -j DNAT --to-destination 192.168.1.5:65053
iptables -t nat -A zone_lan_prerouting -p tcp -m id --id 0x66773300 -m udp --dport 53 -m comment --comment family-yandex-dns -j DNAT --to-destination 192.168.1.5:65053

Т.е. сначала пропускаем (accept) всех белых без "проксирования" dns. После этого всех оставшихся (кто не белый) уже невзирая на маки "проксируем".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы