场景:
现在很多的商场、酒店、车站登公共上网环境中,很多都是用到了无线网络认证,到底是什么东西呢?就是无线网络公开的,没有密码,但是你登陆上网的时候,会弹出认证页面,让你先注册登陆之后,才能正常上网,这个就是今天要讲到的东西。
做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 #这一块内容,是指定认证服务器的链接信息
Hostname192.168.2.111#认证服务器地址
SSLAvailableno#是否开启SSL
SSLPort443#SSL端口
HTTPPort81#HTTP链接Auth端口
Path/#认证服务器链接地址
LoginScriptPathFragment login/?#认证服务器登陆地址
PortalScriptPathFragment portal/?#认证服务器protal地址
MsgScriptPathFragment gw_message.php?#message接口地址
PingScriptPathFragment ping/?#认证服务器心跳监测地址
AuthScriptPathFragment auth/?#认证服务器认证地址
Daemon1#wifidog是否以daemon进程启动
GatewayPort2060#wifidog-gateway端口
HTTPDMaxConn10#wifidog最大链接数
HTTPDUserNameadmin#wifidog的http页面登陆认证账户
HTTPDPasswordsecret#wifidog的http页面登陆认证密码
配置完成后,即可启动wifidog
wifidog有一个状态页面,url为:http://hostname:2060/wifidog/status,可以看到客户端链接状态
用客户端去链接开启wifidog的无线网络,会自动跳转到认证页面,需要在认证页面注册登陆,才能管正常上网
另外,如果需要实现部分url可直接上网,不需要认证,则需要在iptables中添加要放行的网站的IP,wifidog中没有实现URL白名单,比如需要放心微信能够正常访问,需要做如下操作
iptables-IWiFiDog_br-lan_Global-dshort.weixin.qq.com-jACCEPT
iptables-IWiFiDog_br-lan_Global-dlong.weixin.qq.com-jACCEPT
iptables-IWiFiDog_br-lan_Global-dszlong.weixin.qq.com-jACCEPT
iptables-IWiFiDog_br-lan_Global-dszshort.weixin.qq.com-jACCEPT
iptables-IWiFiDog_br-lan_Global-dres.wx.qq.com-jACCEPT
iptables-tnat-IWiFiDog_br-lan_Global-dmp.weixin.qq.com-jACCEPT
iptables-tnat-IWiFiDog_br-lan_Global-dres.wx.qq.com-jACCEPT
iptables-tnat-IWiFiDog_br-lan_Global-dshort.weixin.qq.com-jACCEPT
iptables-tnat-IWiFiDog_br-lan_Global-dlong.weixin.qq.com-jACCEPT
iptables-tnat-IWiFiDog_br-lan_Global-dszlong.weixin.qq.com-jACCEPT
iptables-tnat-IWiFiDog_br-lan_Global-dszshort.weixin.qq.com-jACCEPT
wifidog的iptables链需要根据具体的情况修改,这里通过iptables -d参数将微信用到的域名都解析IP加入到iptables放行,因为微信在全国有很多服务器,所以只能用域名解析的方式来做,其他url类似。
附:
wifidog-authhttps://github.com/wifidog/wifidog-auth-laravel.git
wifidog-gatewayhttps://github.com/wifidog/wifidog-gateway.git
完
公众号ID:运维实谈
最实用的运维知识
领取专属 10元无门槛券
私享最新 技术干货