场景:
现在很多的商场、酒店、车站登公共上网环境中,很多都是用到了无线网络认证,到底是什么东西呢?就是无线网络公开的,没有密码,但是你登陆上网的时候,会弹出认证页面,让你先注册登陆之后,才能正常上网,这个就是今天要讲到的东西。
做wifi认证的有很多,包括商用的,免费的、开源的,今天主要是讲wifidog,是开源的一套认证系统。
由于没有openwrt的路由器,所以直接用一台双网卡的CentOS系统来做wifidog认证。
整个这一套东西,是三部分组成,下面详细介绍
服务器改路由器
用CentOS来做,需要将CentOS服务器配置成路由器
实现步骤如下:
- 服务器em0配置外网配置
- 服务器em1配置内网配置,不配网关
- 在服务器上启动dhcp服务,在/etc/sysconfig/dhcpd中设置DHCP网卡为eth1
- 将无线路由器设置成无线AP的模式,设置DHCP转发,并关闭无线安全,即不需要密码连接wifi
- 开启服务器ip转发功能
- 添加iptables的nat转换,将从em0口出的流量的SNAT都设置成em0的IP,这样才能保证内网网络能通外网
设置完以上,从客户端连接wifi,测试能够获取到DHCP的IP,已经能够正常连接网络,这部分工作就完成了(以上步骤都是很简单的基础服务,这里就不多做说明了,有问题可以留言)。
wifidog-auth
wifidog-auth安装部署
wifidog-auth是用php写的,采用laravel5.7框架,需要php7.1 支持
wifidog-auth安装
- 从git上下载源码后,通过composer安装依赖
- cp .env.example .env 修改配置文件,默认是用sqlite,根据情况,自己修改
- 修改wifidog-auth目录权限为fpm用户权限
- php artisan key:generate 生成key
- php artisan jwt:generate 生成jwt
- php artisan migrate 创建数据库
基本就可以访问了,在源码文件夹中,有个apache2目录,里面有写好的apache的配置文件,也可以用,需要自己写配置文件,完成后就可以访问了
wifidog-gateway
wifidog-gateway安装部署
wifidog-gateway是用C编写的,目前只支持linux平台,他是通过利用iptables来实现网络控制。
- wifidog-gateway安装很简单,直接从git上拉取源码,源码中包含自动编译脚本
- 在源码目录,执行./autogen.sh,然后make && make install安装
- 安装完成后,在/usr/local/bin/wifidog生成可执行文件,在/usr/local/include/wifidog生成动态库
这就安装好了
wifidog-gateway启动
在编译安装完成后,在源文件目录里中,有个wifidog.conf,这个文件是wifidog的示例配置文件,将这个文件拷贝到/usr/local/etc/下,然后通过wifidog -c /usr/local/etc/wifidog.conf启动wifidog
在启动的过程中,如果遇到找不到动态库,需要将/usr/local/include/wifidog加入到/etc/ld.so.conf,或在/etc/ld.so.conf.d下面,添加wifidog的conf文件,然后执行ldconfig刷新动态库。
下面了解下wifidog配置文件
wifidog配置文件中的参数,不止这些,这里只拿这几个最主要的做个详细的解释
GatewayInterfate eth1 #这个参数是指定是那个网卡作为网关接口
GatewayAddress 192.168.11.1 #这个参数是指订网关IP地址
AuthServer #这一块内容,是指定认证服务器的链接信息
Hostname 192.168.2.111 #认证服务器地址
SSLAvailable no #是否开启SSL
SSLPort 443 #SSL端口
HTTPPort 81 #HTTP链接Auth端口
Path / #认证服务器链接地址
LoginScriptPathFragment login/? #认证服务器登陆地址
PortalScriptPathFragment portal/? #认证服务器protal地址
MsgScriptPathFragment gw_message.php? #message接口地址
PingScriptPathFragment ping/? #认证服务器心跳监测地址
AuthScriptPathFragment auth/? #认证服务器认证地址
Daemon 1 #wifidog是否以daemon进程启动
GatewayPort 2060 #wifidog-gateway端口
HTTPDMaxConn 10 #wifidog最大链接数
HTTPDUserName admin #wifidog的http页面登陆认证账户
HTTPDPassword secret #wifidog的http页面登陆认证密码
配置完成后,即可启动wifidog
wifidog有一个状态页面,url为:http://hostname:2060/wifidog/status,可以看到客户端链接状态
用客户端去链接开启wifidog的无线网络,会自动跳转到认证页面,需要在认证页面注册登陆,才能管正常上网
另外,如果需要实现部分url可直接上网,不需要认证,则需要在iptables中添加要放行的网站的IP,wifidog中没有实现URL白名单,比如需要放心微信能够正常访问,需要做如下操作
iptables -I WiFiDog_br-lan_Global -d short.weixin.qq.com -j ACCEPT
iptables -I WiFiDog_br-lan_Global -d long.weixin.qq.com -j ACCEPT
iptables -I WiFiDog_br-lan_Global -d szlong.weixin.qq.com -jACCEPT
iptables -I WiFiDog_br-lan_Global -d szshort.weixin.qq.com -jACCEPT
iptables -I WiFiDog_br-lan_Global -d mp.weixin.qq.com -j ACCEPT
iptables -I WiFiDog_br-lan_Global -d res.wx.qq.com -j ACCEPT
iptables -t nat -I WiFiDog_br-lan_Global -d mp.weixin.qq.com -jACCEPT
iptables -t nat -I WiFiDog_br-lan_Global -d res.wx.qq.com -j ACCEPT
iptables -t nat -I WiFiDog_br-lan_Global -d short.weixin.qq.com -jACCEPT
iptables -t nat -I WiFiDog_br-lan_Global -d long.weixin.qq.com -jACCEPT
iptables -t nat -I WiFiDog_br-lan_Global -d szlong.weixin.qq.com -jACCEPT
iptables -t nat -I WiFiDog_br-lan_Global -d szshort.weixin.qq.com -jACCEPT
wifidog的iptables链需要根据具体的情况修改,这里通过iptables -d参数将微信用到的域名都解析IP加入到iptables放行,因为微信在全国有很多服务器,所以只能用域名解析的方式来做,其他url类似。
附:
wifidog-auth https://github.com/wifidog/wifidog-auth-laravel.git
wifidog-gateway https://github.com/wifidog/wifidog-gateway.git
wifidog官网:http://dev.wifidog.org
完