OpenWRT下实现Portal认证(WEB认证)

本文介绍了在OpenWRT上实现Portal认证的方法,重点探讨了wifidog及其工作原理,并分享了如何编写轻量级的Web Portal认证服务器。内容包括Wifidog的工作流程、配置关键项及Portal服务器的脚本配置。适合具备程序设计基础和了解HTML、CSS的读者,可自建认证服务器,提高灵活性。
摘要由CSDN通过智能技术生成

首先简单介绍一下什么是Portal认证,Portal认证,通常也会叫Web认证,未认证用户上网时,设备强制用户登录到特定站点,用户可以免费访问其中的服务。当用户需要使用互联网中的其它信息时,必须在门户网站进行认证,只有认证通过后才可以使用互联网资源。现金很多中国移动CMCC、中国联通、中国电信ChinaNet的WIFI都使用这种认证接入方式。

 

在OpenWRT上实现Portal认证,实际上早已有解决方案:

1. chillispot,但原维护作者停止更新,被chillispot.info接管继续开发;

2.coova-chilli,它是基于chillispot开发拓展的,功能最为强大;可以去官方看一下Coova-chilli;

3.wifidog

前两个由于原维护作者停止更新,笔者也没有深入研究,重点钻研了wifidog,Wifidog也是OpenWRT和DD-WRT中实现Portal比较出名的。

但是,Wifidog只是实现AP认证网关,需要配合外部的Portal服务器才能使用,Portal主要是提供认证所需的WEB页面且实现认证计费等的功能。虽然这也有很多商用解决方案,例如wiwiz、wifiap等,但是这些商业解决方案的目标都是盈利,即使可以免费使用,免费账号的功能和权限都受到了很大的限制,例如不能自定义页面,Web认证页面有广告等等。有条件的人可能打算自己搭建Portal服务器,但是看看Wifidog的官方Wiki,对搭建过程实在是难以理解。后来,笔者发现网络上还有一个authpuppy方案,官方网站www.authpuppy.org,是一个已实现好的Wifidog认证服务器,里面包含各种插件供你使用,官方的安装过程也很简单,如果你懂的HTML和面向对象编程的相关知识且拥有一个服务器,可以自行修改认证页面,使用authpuppy也是一个不错的方案。

但是,即便如此,这些方案还是不够灵活,经过笔者认真钻研,查阅大量资料并经过多次抓包分析,终于理解了Wifidog的工作原理。接下来笔者将会跟你介绍如何自行编写一个轻量级的Web Portal认证服务器。当然,这需要你具有程序设计基础,HTML、CSS当然是少不得的,后端开发语言可以使用PHP或Python或Java等。

首先,需要简单介绍一下Wifidog的工作原理:

1.客户端发出初始化请求,比如访问 www.baidu.com

2.网关的防火墙规则将这个请求重定向到本地网关的端口上。这个端口是Wifidog监听的端口。

3.Wfidog提供一个HTTP重定向回复,重定向到Web认证页面,重定向的Url的Querystring中包含了Gateway的ID,Gateway的FQDN以及其他的信息。

4.用户向认证服务器发出认证请求

http://portal_server:port/login_script?

gw_id=[GatewayID, default: “default”]

gw_address=[GatewayAddress, internal IP of router]

gw_port=[GatewayPort, port that wifidog Gateway is listening on]

url=[user requested url];

5.网关返回一个(可以是自定义的)splash(也称作“登录”)页面。

6.用户提供他的凭据信息,比如用户名和密码。

7.成功认证的话,客户端将会被重定向到网关的自己的web页面上,并且带有一个认证凭据(一个一次性的token),内容比如:

http://GatewayIP:GatewayPort/wifidog/auth?token=[auth token];

8.用户就是用获取到的凭据访问网关。

9.网关去认证服务器询问token的有效性。

10.认证服务器确认token的有效性。

11.网关发送重定向给客户端,以从认证服务器上获取 成功提示页面,重定向到 http://portal_server:port/portal_script 这个位置。

12.认证服务器通知客户请求成功,可以上网了。

图解:

图解Wifidog工作原理

然后考察一下Wifidog的配置文件/etc/wifidog.conf,关键的配置项是:

Source code    
AuthServer {
    Hostname                  (Mandatory; Default: NONE) SSLAvailable (Optional; Default: no; Possible values: yes, no) SSLPort (Optional; Default: 443) HTTPPort (Optional; Default: 80) Path (Optional; Default: /wifidog/ Note: The path must be both prefixed and suffixed by /. Use a single / for server root.) LoginScriptPathFragment (Optional; Default: login/? Note: This is the script the user will be sent to for login.) PortalScriptPathFragment (Optional; Default: portal/? Note: This is the script the user will be sent to after a successfull login.) MsgScriptPathFragment (Optional; Default: gw_message.php? Note: This is the script the user will be sent to upon error to read a readable message.) PingScriptPathFragment (Optional; Default: ping/? Note: This is the script the user will be sent to upon error to read a readable message.) AuthScriptPathFragment (Optional; Default: auth/? Note: This is the script the user will be sent to upon error to read a readable message.) }   # Listen on this port GatewayPort 2060   # Parameter: CheckInterval # Default: 60 # Optional # # How many seconds should we wait between timeout checks. This is also # how often the gateway will ping the auth server and how often it will # update the traffic counters on the auth server. Setting this too low # wastes bandwidth, setting this too high will cause the gateway to take # a long time to switch to it's backup auth server(s). CheckInterval 60   # Parameter: ClientTimeout # Default: 5 # Optional # # Set this to the desired of number of CheckInterval of inactivity before a client is logged out # The timeout will be INTERVAL * TIMEOUT ClientTimeout 5
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、因手头有一个7620N芯片的大功率无线路由器(万兴达WR5508商用路由),由于要使用无线广告营销功能,但在网上搜寻了很久,都没找到合适的固件。 2、可能有人会说支持7620方案的广告营销固件多的是,但这款路由器是大功率的,500mW,刷了海蜘蛛、RippleOS以及其他有wifidog功能的固件,无线超过3-5米就没有信号了。只有刷了openwrt和PandoraBox固件,无线信号超级强大,达到26db。 3、因此,只能使用openwrt和PandoraBox固件,查询了多种方法,都是需要对固件进行编译的,由于小弟不懂编程,只有通过网友们的安装配置经验进行参考,在刷好的固件基础上安装wifidog和Luci界面的配置,如果哪位高手能将Luci-wifidog源码打包成ipk安装包,小弟万分感谢!此方法仅供想玩wifidog的朋友参考,编程高手勿拍砖就行了! 方法: 1、安装wifidog(前提是路由器必须接入互联网) [root@PandoraBox:/root]#opkg update [root@PandoraBox:/root]#opkg install wifidog [root@PandoraBox:/root]#/etc/init.d/wifidog enable [root@PandoraBox:/root]#/etc/init.d/wifidog start 备注:安装wifidog可能需要依赖包 libc iptables-mod-extra iptables-mod-ipopt iptables-mod-nat-extra libpthread 2、安装配置luci-wifidog(luci-wifidog源码是在网上找的,别人已经设置好了的,如果不喜欢,自行到官网下) (1)使用winscp把源码controller文件夹下的内容复制到/usr/lib/lua/luci里目录的controller下,model放到model下 (2)源码root文件夹下的内容复制到root/etc下各自相应的目录下 (3)源码ipkg文件夹下的内容复制到/usr/lib/opkg目录下 (4)源码makefile文件复制到/etc下并给xxx权限 (5)最后重启路由器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值