Seu wifi precisa estar conectado a um gateway onde você pode redirecionar o tráfego para o seu portal cativo (página de login).
Você pode fazer isso usando o iptables no linux. Digamos que sua interface eth0 esteja conectada ao seu ponto de acesso com a sub-rede 192.168.0.0/24
e seu gateway (servidor linux) esteja configurado em 192.168.0.1
e tenha acesso à Internet em uma interface separada. Seu servidor IIS está em 192.168.0.2:80
.
Suas regras do iptables podem ser algo como:
iptables -t mangle -N my_access_filter
iptables -t mangle -A INPUT -i eth0 -j my_access_filter
iptables -t mangle -A my_access_filter -m mac --mac-source 11:22:33:44:55:66 -j RETURN # Grant access to mac 11:22:33:44:55:66, by returning and not marking the traffic
iptables -t mangle -A my_access_filter -j MARK --set-mark 99 # Arbitrarily selected number
# that's it for the mangle table, now the nat table
iptables -t nat -A PREROUTING -p tcp --dport 80 -m mark --mark 99 -j DNAT --to 192.168.0.2:80 # ip o
iptables -t nat -A PREROUTING -p udp --dport 53 -m mark --mark 99 -j DNAT --to 192.168.0.1 # For good measure, lets redirect their dns queries to our own dns server.
# now the filter table reads:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # standard rule to accept established connections
iptables -A FORWARD -i eth0 -m mark --mark 99 -j DROP # This will drop traffic that is marked, preventing clients from accessing the internet
Seu portal cativo precisa apenas colocar os clientes ip ou mac, ou qualquer coisa que você filtrar no my_access_filter na tabela mangle, o que pode ser feito por
iptables -t mangle -I my_access_filter -m mac --mac-source <mac> -j RETURN
ou
iptables -t mangle -I my_access_filter -s 192.168.0.xx -j RETURN # by ip
Espero que isso dê alguma inspiração.