Portal cautivo dnsmasq con ipset/nft "lista permitida"

Portal cautivo dnsmasq con ipset/nft "lista permitida"

Estoy jugando con dnsmasq para crear una especie de portal cautivo.

La idea es: dnsmasqde forma predeterminada, reescriba todas las solicitudes de DNS a la IP local ( address=/#/123.123.123.123), y nginxya está configurada aquí para mostrar la "página de acceso restringido".

Pero quiero agregar algún tipo de lista excluyente:

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

Eso contendrá la dirección IP de los clientes, que no deben reescribirse /#/y utilizará dnsmasq como proxy para 1.1.1.1/1.0.0.1pasar IP reales.

Según tengo entendido, dnsmasqla configuración de ipset de solo funciona para cada dominio. Entonces tengo que hacer:

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

¿Es correcta mi suposición? ¿O tal vez me falta algo?

Respuesta1

Simplemente no hagas eso a través de dnsmasq en absoluto: involucrar a DNS solo agrega complejidad innecesaria (almacenamiento en caché, fallas de DNSSEC, fácil de omitir incluso por accidente, etc.). En su lugar, use solo iptables/nft para redirigir todos los paquetes HTTP a nivel de IP (usando DNAT a través de -j DNATo -j REDIRECT). Por ejemplo:

-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

información relacionada