Captive Portal 认证流程 - 基于 Iptables 转发
全局说明
本认证流程部分参考 wifidog/nocat/nodogsplash 认证流程,并结合了实际项目需求。
本认证项目分两部分,分别为:
- self-wifidog 32571 认证、校验等
- self-wifidog-watch 32573 请求转发、与 self-wifidog 通信
以下,用户统称为 client,服务器统称 server,服务地址统称 IP。
认证流程
前置配置
server 配置 iptables 转发全部 80 端口请求至 self-wifidog-watch 32573 端口。
首次认证
-
client 接入 wifi,并通过浏览器访问网站,如访问 baidu.com,
若此时无网,则 client 设备将主动访问其自身配置的地址验证网络是否可用。
部分设备验证网络地址见附录1。 -
server 转发 client 请求至 self-wifidog-watch 32573,转发地址为 IP:32573
-
self-wifidog-watch 转发 2 中的请求到 self-wifidog,请求地址格式为:
IP:31571/wifidog/login?gw_address=1.1.1.1&gw_port=80&gw_id=xx&mac=xx&url=baidu.com -
self-wifidog /wifidog/login 校验该请求为未认证,则转发请求至指定认证地址。
当前使用 self-wifidog 内置认证地址,具体扩展待讨论。 -
client 通过认证页面提交信息,self-wifidog /wifidog/login?username=xx&password=xx
-
self-wifidog 转发 client 认证结果到 self-wifidog-watch,转发地址格式为:
IP:32573/wifidog/auth?token=xx -
self-wifidog-watch 请求 self-wifidog 校验登陆状态,请求地址格式为:
IP:32571/wifidog/auth?stage=login&ip=1.1.1.1&mac=xx&token=xx&gw_id=xx -
self-wifidog 返回校验结果到 self-wifidog-watch。校验成功结果为 Auth:1,校验失败结果为 Auth:0 。
若认证成功网关在Firewall添加该用户放行规则,并向用户返回重定向到服务器认证成功的地址;若认证失败,用户重新返回 login页面。 -
self-wifidog-watch 转发 self-wifidog 结果到 client,请求地址格式为:
IP:32571/wifidog/portal?gw_id=xx -
client 访问 9 返回地址页面到 self-wifidog,self-wifidog 转发请求到 baidu.com,
client 完成请求目标地址
非首次认证
- 同首次认证1
- 同首次认证2
- 同首次认证3
- 检查认证记录,若已认证成功,则转发请求到 baidu.com,client 完成请求目标地址
附录
- 部分设备验证网络地址
http://connect.rom.miui.com/generate_204
https://connect.rom.miui.com/generate_204
http://connectivitycheck.platform.hicloud.com
http://edge.microsoft.com/captiveportal
http://captive.apple.com/hotspotdetect.html
http://connectivitycheck.android.com
https://captive.v2ex.co
http://clients3.google.com/generate_204
http://connectivitycheck.gstatic.com/generate_204
https://www.google.com/generate_204