利用wifidog实现无线网络认证

场景:

现在很多的商场、酒店、车站登公共上网环境中,很多都是用到了无线网络认证,到底是什么东西呢?就是无线网络公开的,没有密码,但是你登陆上网的时候,会弹出认证页面,让你先注册登陆之后,才能正常上网,这个就是今天要讲到的东西。

做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:运维实谈

最实用的运维知识

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190118G0AYIQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券