作为一个项目,我正在为“未经身份验证”的用户构建自己的强制门户网页。这些用户没有点击我的强制门户页面上的任何按钮。我希望这是带外的(就像一个packetfence部署选项),这样我的Linux机器就不会充当路由器/代理。
要做到这一点,我需要知道如何将设备(在我的情况下是运行 iOS 8 的 iPhone)重定向到强制门户页面。
我认为应该发生以下事情:
- iPhone 连接到 Wi-Fi
- DNS 指向我的 Linux 机器,它用自己的 IP 解析所有请求
- Linux 机器有一个 Web 服务器,它响应端口 80 上的所有内容,并使用 HTTP Location: 标头将所有内容重定向到包含内容和按钮的页面
- 按下按钮后,用户的 mac 地址会添加到“某物”中,从那时起 DNS 就会进行正确的解析(??)或者 iptables 将 DNS 请求重定向到另一个公共 DNS 主机(??)
我已经浏览过这个网站和谷歌好几天了,甚至试图查看 Packetfence 代码(我不是 perl 开发人员),我需要确认上面的过程是否正确,或者正确步骤的要点列表。我看过此服务器故障帖子中详细介绍了重定向如何发生,更重要的是,如何在用户“通过身份验证”后不发生重定向。
如果有人具备这方面的知识来填补空白或向我指出一个有“如何/重定向做什么 - dns/dhcp/http/iptables”的网站,我将不胜感激。
我要解决的问题是阐明这一工作方式的技术过程,并扩展此站点上其他帖子的内容,例如“第一个请求应重定向”。我的问题是... 我需要如何/哪些工具来做到这一点。
谢谢!
答案1
实现重定向需要做的第一件事是一些在线身份验证器(访问控制器),就像在主题上下文中一样,如果您选择对 AP 进行集中管理,您将需要一个无线局域网控制器。您还可以将具有围墙花园功能的强制门户类型的网络访问控制器放置在
NAS 通过混杂模式原始套接字监控进入下行链路(客户端)的流量,当检测到浏览器发起的未经身份验证的客户端流量时,将 HTTP 重定向作为响应提供给它。因此,接收时的浏览器将被重定向到我们的 CAPTIVE 门户主页,该主页可以内联在身份验证器上,也可以在某些外部 Web 服务器上开箱即用。
此页面的唯一作用是向用户提供输入凭据的 UI。输入的凭据将转发回身份验证器守护程序(如 coova chilli 中的 chilli),然后这些凭据将作为 radius 请求传递到 RADIUS 服务器或可以在本地检查。身份验证成功后,身份验证器上的客户端状态将被标记为已授权,并授予客户端访问权限。
如何实现重定向
最广泛使用的方法是拦截用户发起的 HTTP 请求,并将 302 代码作为对客户端的响应。在 chilli 中,它通过以下函数来实现
http_redirect2() { cat < < EOF
HTTP/1.1 302 重定向
地点:$1
设置 Cookie:PORTAL_SESSIONID=$PORTAL_SESSIONID
设置 Cookie:COOVA_USERURL=$COOVA_USERURL
连接:关闭
末梢血
exit
}
这种重定向可以通过程序控制的 tuntap 接口轻松实现,客户端接口可拦截客户端流量。进一步的重定向也可以通过 DNS 投毒实现。但如果响应缓存在客户端浏览器中,有时可能会导致问题。可以根据问题域更具体地执行进一步的操作。
如果你需要的话我可以帮助你