Para fazer um portal cativo aparecer, você precisa parar todo o tráfego da Internet e fornecer um 302 redirect
ao navegador do cliente. Para fazer isso, você precisa ter um firewall (como iptables
) redirecionar todo o tráfego para um servidor da Web (como nginx
, apache
, etc) onde o servidor responde com 302 redirect
à URL da sua página de login .
Escrevi um artigo longo no meu blog sobre como fazer isso com um Raspberry Pi. Basicamente se resume ao bloco / redirecionamento do iptables para o servidor web :
iptables -t nat -A wlan0_Unknown -p tcp --dport 80 -j DNAT --to-destination 192.168.24.1
e, em seguida, o servidor da web ( nginx
) redirecionando para a página de login:
# For iOS
if ($http_user_agent ~* (CaptiveNetworkSupport) ) {
return 302 http://hotspot.localnet/hotspot.html;
}
# For others
location / {
return 302 http://hotspot.localnet/;
}
O iOS tem que ser difícil, pois precisa das configurações do WISP. Os conteúdos hotspot.html
são os seguintes:
<!--
<?xml version="1.0" encoding="UTF-8"?>
<WISPAccessGatewayParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.wballiance.net/wispr_2_0.xsd">
<Redirect>
<MessageType>100</MessageType>
<ResponseCode>0</ResponseCode>
<VersionHigh>2.0</VersionHigh>
<VersionLow>1.0</VersionLow>
<AccessProcedure>1.0</AccessProcedure>
<AccessLocation>Andrew Wippler is awesome</AccessLocation>
<LocationName>MyOpenAP</LocationName>
<LoginURL>http://hotspot.localnet/</LoginURL>
</Redirect>
</WISPAccessGatewayParam>
-->