Портал авторизации dnsmasq с ipset/nft «разрешенный список»

Портал авторизации dnsmasq с ipset/nft «разрешенный список»

Я пытаюсь создать своего рода портал авторизации с помощью dnsmasq.

Идея такова: dnsmasqпо умолчанию переписать все DNS-запросы на локальный IP ( address=/#/123.123.123.123), и nginxуже настроено здесь на отображение «страницы с ограниченным доступом».

Но я хочу добавить некий список исключений:

ipset create captive-allowed hash:ip
ipset add captive-allowed 222.222.222.222

Он будет содержать IP-адреса клиентов, которые не должны быть перезаписаны, /#/и будет использовать dnsmasq в качестве прокси-сервера для 1.1.1.1/1.0.0.1передачи реальных IP-адресов.

Как я понял, dnsmasqнастройки ipset работают только для каждого домена. Поэтому мне нужно сделать:

ipset=/google.com/captive-allowed/go.ogle.real.ip
ipset=/amazon.com/captive-allowed/ama.zon.real.ip
... billion records more ...

Верно ли мое предположение? Или я что-то упускаю?

решение1

Только не делайте этого через dnsmasq вообще – вовлечение DNS только добавляет ненужной сложности (кэширование, сбои DNSSEC, легко обойти даже случайно и т. д.). Вместо этого используйте только iptables/nft для перенаправления всех HTTP-пакетов на уровне IP (используя DNAT через -j DNATили -j REDIRECT). Например:

-A FORWARD_CAPTIVE -m set --match-set AllowedClientsMAC src -j ACCEPT
-A FORWARD_CAPTIVE -j REJECT
<...>
-A PREROUTING_CAPTIVE -m set --match-set AllowedClientsMAC src -j ACCEPT
-A PREROUTING_CAPTIVE -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.1.53
-A PREROUTING_CAPTIVE -p tcp -m udp --dport 53 -j DNAT --to-destination 192.168.1.53
-A PREROUTING_CAPTIVE -p tcp -m tcp --dport 80 -j REDIRECT
-A PREROUTING_CAPTIVE -p tcp -m tcp --dport 443 -j REDIRECT

Связанный контент