当前位置: 首页 > Linux

Linux网络——一种强制门户技术

时间:2023-04-07 01:39:31 Linux

概述强制门户技术是一种位于网关上的功能。lan侧用户访问外网,强制先进行网关认证。认证通过后才能访问外网。最近在研究这个技术,并在一个项目中实现。CaptivePortal的原理是让用户快速登录网页。我认为强制门户技术的核心是重定向。重定向的方法有很多种,例如基于MAC或IP的重定向。定向、DNS重定向、HTTP重定向、WPAD等。当然,重定向的范围远不止captiveportal技术。不管是哪一种重定向,本质上都是利用通信协议的机制和规则来转发特定的数据流。我结合使用DNS重定向和HTTP重定向。网络访问请求分配给网关管理地址。网关HTTP进程收到具体的HTTP请求后,返回具体的重定向报文。lan侧的客户端浏览器用重定向报文中指定的URL再次发起请求。强制到网关的登录页面。整个通信过程如下图所示。这里的详细过程有几个前提条件:用户设备上网的方式是通过DHCP获取地址,或者手动设置静态地址,但DNS地址必须设置为网关地址。简而言之,用户设备必须知道DNS服务器位于网关上。用户浏览器设置设置默认主页,或用户手动输入任何域名而不是ip地址。基于这个前提,会有如下流程:当用户手动打开浏览器时,浏览器会无条件访问默认主页。比如www.hao123.com,但是首页是域名(domainname)而不是ip地址。浏览器不知道首页www.hao123.com的ip地址是多少,无法与域名所在的服务器建立tcp连接,所以需要使用DNS协议向DNS服务器查询域名对应的ip。由于用户设备上已经存在DNS服务器的地址,而这个地址就是网关地址,所以用户设备会将DNS查询报文用www.hao123.com封装起来,发送给网关上的DNSProxy进程。网关上的DNSProxy进程查询wan端当前的连接状态。如果连接不上,则封装一个以该IP地址为本机地址的DNS应答报文,回复给用户的浏览器。收到DNS应答报文后,使用该报文ip地址,向该地址发起tcp连接,连接建立后发起HTTPHEAD或GET请求。通常,该URL为空,或/wpad.dat。这个特殊的URL是WPAD协议规定的,目前还没有研究。只是PC会一直发送这个URL。网关上的HTTPServer收到特殊请求(/wpad.dat)后,会封装HTTP响应报文,状态码为301或307,Location为登录页面的URL,告诉浏览器发送请求Redirect到Location指定的URL。浏览器使用Location作为URL重新封装HTTPGET报文,请求页面,完成强制登录