![Portal cautivo dnsmasq con ipset/nft "lista permitida"](https://rvso.com/image/1703346/Portal%20cautivo%20dnsmasq%20con%20ipset%2Fnft%20%22lista%20permitida%22.png)
Estoy jugando con dnsmasq para crear una especie de portal cautivo.
La idea es:
dnsmasq
de forma predeterminada, reescriba todas las solicitudes de DNS a la IP local ( address=/#/123.123.123.123
), y nginx
ya 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.1
pasar IP reales.
Según tengo entendido, dnsmasq
la 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 DNAT
o -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