An improved wifidog (改进版wifidog客户端).
Wifidogx是一款新的无线认证客户端,最早出于spyderj做无线营销时碰到的wifidog各种稳定性问题。经过一段时间的发展后,其功能和优点已经大幅超出了wifidog:
更稳定
更高效
采用epoll来支持并发。
新的认证通信协议可支持批量认证。
更强大
提供以ipset的方式进行防火墙规则管理(需要6.22及以上版本)。
支持与认证服务器之间采用https通信。
支持简单的静态文件服务。
更好的集中管理:认证服务器应答报文中可随时携带要下发的配置信息,wifidogx检测到有配置信息后会立刻予以生效。
更便捷
单线程架构,无需再小心翼翼的加锁。
全部由lua编码,即改即得,快的有点狠的二次开发效率。
目前Wifiodgx已被业内多家公司用于商场wifi,厂区wifi等领域,在最高在线用户近500人, 最大并发超过3000的状态下其各项性能指标仍然非常优异。
下载,编译,运行
wifidogx依赖
lask 。lask导出了常用的posix api,并提供了一个异步通信框架。
下载
git clone
https://github.com/spyderj-cn/wifidogx.git
编译
Wifidogx中(只)包含了支持openwrt的makefile文件,将源码包放在某个src-link的的目录下即可。
同wifidog一样,wifidogx也在menuconfig的/Network/Captive Portals栏目下。
本质上wifidogx不需要编译,其编译实际上是安装过程。
运行
启动
/etc/init.d/wifidogx start
停止
/etc/init.d/wifidogx stop
目前不支持restart
Wifidogx详细的启动参数
选项
含义
-a
认证路径,会覆盖配置文件中的AuthURL
-c
配置文件路径,默认为/etc/wifidogx.conf
-d
调试模式
-f
不要以守护进程的方式运行
-o
日志路径,默认为/tmp/wifidogx.log
-l
日志等级,默认为info
-t
测试配置文件是否正确
-I
初始化防火墙规则后退出
-D
销毁防火墙规则后退出
-h
帮助信息
-v
显示版本
调试模式下,Wifidogx自动开启-f选项,日志输出到标准输出,日志级别为debug。建议在初次接触wifidogx时使用调试模式。
Wifidogx运行时生成的文件
以下文件默认在/tmp目录下(其中日志文件所在目录可另行指定)
文件名
作用
wifidogx.log
日志文件
wifidogx.pid
文件中包含wifidogx的pid
wifidogx.sock
和wdxctl通信的unix域套接字服务端文件
wifidogx.death
异常退出后的lua栈信息
wdxctl(对应wdctl)工具
命令
作用
clients
获取连接了wifi的用户信息
jclients
获取连接了wifi的用户信息(json输出)
logcapture
截获日志
文件服务
wifidogx启动后检查/tmp/wifidogx-www是否存在,如果不存在则将/etc/wifidogx-www下的所有内容
复制到/tmp/wifidogx-www,并以/tmp/wifidogx-www为docroot开启文件服务。
如果来访的URL是“/wifidogx-static/*”格式则视其为请求静态文件。
当错误发生时,wifidogx自动回送/tmp/wifidogx-www目录下的以下文件:
文件名
错误原因
netdown.htm
外网不通
serverunreach.htm
有外网但认证服务器连不上
servererror.htm
服务器返回的数据不对
internalerror.htm
路由器系统/wifidogx 内部错误,如arp表中根据来访的ip找不到mac
在后续和服务器的通信中,如果服务器的应答配置了StaticGZ, 则wifidogx根据StaticGZ指定的URL下载该压缩包,并将压缩包的内容解压到/tmp/wifidogx-www中。
一些典型的StaticGZ用法:
替换wifidogx的错误提示页面。
缓存login等页面上的图片。
指定RedirectHostname为GatewayAddress,完全进行本地推送认证页面。
配置文件
配置文件中的选项,大部分都可以由认证服务器动态修改,除了以下几项:
AuthURL
GatewayID (可选)
GatewayPort (可选)
GatewayAddress
GatewayInterface
ExternalInterface (可选)
Firewall Rules
一些改动
不再支持AuthServer块和多个认证服务器,只支持单个AuthURL。
(如有特殊字符请先编码,wifidogx不自动进行url编码。)
示例:
AuthURL https://mysite.com:8888/index.php?s=/Wifidogx/auth
重定向服务器可以和认证服务器不同,由RedirectHostname指定。
RedirectPort指定跳转端口,默认为80。
几个跳转路径分别由PortalPath/MessagePath/LoginPath指定。
(PortalPath/MessagePath/LoginPath尾部的&(或?)是必要的;并且如有特殊字符请先编码)。
示例:
RedirectHostname www.mysite2.com
PortalPath /index.php?s=/Wifidogx/portal
MessagePath /index.php?s=/Wifidogx/message
LoginPath /index.php?s=/Wifidogx/login
ClientTimeout的意义改为认证后能上网的时间(秒)。
示例:
ClientTimeout 7200
添加PingInterval字段,意义是和服务器的心跳间隔(秒)。
示例:
PingInterval 30
通信协议
技术特点
通信过程是wifidogx和wifidog区别最大的一块:
能进行批量认证,数据采用json编码,使用post方法发送http请求。
数据量比较大的时候使用gzip压缩。
最多只和认证服务器建一条tcp连接,所有认证都通过这条连接进行。
报文的发送间隔和远程控制的延时成正比。因此心跳间隔不适合太大,并且双方的http报文应启用keep-alive。
请在http应答中指定Content-Length为实际长度,或者启用Chunked的传输编码,wifidogx无法自动探测消息体的结束。
请求
报文示例
{
" id" : " 11:11:11:11:11:11"
" version" : " 1.0.0" ,
" clients" : [
{
" mac" : " 11:11:11:11:11:12"
" ip" : " 192.168.1.123" ,
" token" : " whateverthetokenis" ,
" state" : " authed" ,
" incoming" : 1111 ,
" outgoing" : 2222 ,
" starttime" : 1234 ,
},
{
" mac" : " 11:11:11:11:11:13"
...
},
...
],
" uptime" : 333 ,
" seq" : 20 ,
" sys_uptime" : 123132 ,
" status" : {
" sys_memfree" : 9284 ,
" sys_load" : " 0.03"
},
}
字段意义详解
*表示必需的,非必需项的属性名可以不存在,也可能其值为false或者{}
字段名
说明
id*
即GatewayID,若无指定则是GatewayInterface的mac地址
version*
wifidogx版本号
uptime*
wifidogx启动后经过的秒数
sys_uptime*
系统启动后经过的秒数(即/proc/uptime)
seq*
报文序号,每成功完成一次http交互后加一,初始为0
clients
需要认证处理的用户信息
status
当前系统状态
clients为用户信息数组,每个元素的各字段意义是:
字段名
说明
mac
用户mac
ip
用户使用的ip
token
token
state
当前状态
starttime
进入此状态的时间戳(自系统启动),即sys_uptime - starttime为状态已持续时间
outgoing
发送的流量
incoming
接收的流量
几种状态:
状态名称
解释
login
用户还未认证,防火墙规则未放行
authed
已认证,已放行
logout
认证期已过,规则已关,通知了认证服务器后此用户信息会被删除
应答
报文示例
{
" config" : {
" ClientTimeout" : 7200 ,
" PingInterval" : 20 ,
" CheckInterval" : 300 ,
" StaticGZ" : " http://mysite.com/Public/wifidogx.tar.gz" ,
" SetWhiteMaclist" : [" 9c:c1:72:5e:51:49" ," 11:11:11:11:11:12" ],
" SetBlackMaclist" : [" 11:11:11:11:11:13" ," 11:11:11:11:11:14" ],
" GreenHostname" : [" www.baidu.com" , " 1.2.3.4" ]
},
" clients" : [
{" mac" : " 08:7a:4c:8a:c1:62" ," auth" : 1 }
]
}
配置项
当应答中指定了config时,wifidogx将立即接受这样配置并予以生效。
这些是wifidogx新增的配置项:
配置名
解释
StaticGZ
见文件服务部分
SetWhiteMaclist
设置白名单
AddWhiteMaclist
添加白名单
DelWhiteMaclist
删除白名单
SetBlackMaclist
设置黑名单
AddBlackMaclist
添加黑名单
DelBlackMaclist
删除黑名单
GreenHostname
无论是否认证都可直接访问的主机名
认证结果
wifidogx不支持wifidog的试用期功能,认证结果只能是1或者0,其他值不合法.
from https://github.com/spyderj-cn/wifidogx
----------
openwrt-wifidog编译
提示:openwrt编译包在编译的过程中会在git中下载文件,编译之后的文件相当的大,所以需要一个大的磁盘编译环境,
我用的是VMware虚拟机中安装ubuntu16.04编译openwrt的,在安装虚拟机时,我的100G磁盘空间的ubuntu内存分配方案为:
(1) 根文件目录分配了60G;
(2) home文件目录分配了10G;
(3) swp目录分配了20G;
(4) tmp文件目录分配了10G。(一开始编译的时候我是在home文件目录中编译的,结果很悲催,磁盘用的一滴不剩,后来转用根文件目录)
编译完成之后整个文件大小为13G。
1,下载环境
(1) 下载环境
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk asciidoc libz-dev git libssl-dev
(2) 更新程序
./script/feeds update -a
./script/feeds install -a
make menuconfig
cp feeds.conf.default feeds.conf
(3) 权限修改为用户权限
(4) 修改环境:
export FORCE_UNSAFE_CONFIGURE=1
export SOURCE_DATE_EPOCH=1
(5) make defconfig
make prereq --显示未安装的环境包
make V=99
在编译的过程中出现了错误,
(mkyaffsimage.o报的错误)
environment variable SOURCE_DATE_EPOCH must expand to a non-negative integer less than or equal to xxx
这个错误耽搁了我很久,当时没仔细想,直接在网上找答案,以为能行,结果也很悲催。再一次闲来没事做的时候,我决定自己解决,发现很简单,只要把这个二进制文件删除重新编译就行。
我的mkyaffs文件放置的文件目录为build_dir/host/yaffs2_android/yaffs2/utils(这个路径在错误的前面可以找得到)
cd build_dir/host/yaffs2_android/yaffs2/utils/
rm mkyaffsimage.o
make
然后退出到之前的目录,make V=99就行了。
2,openwrt中wifidog的编译包为:
wifidog-gateway-master.tar
wifidog-gateway-master放置的位置为:
cd /openwrt-x86/openwrt-master/build_dir/target-x86_64_musl-1.1.15/wifidog-normal/wifidog-1.3.0
3,openwrt的源码包路径:
src/gz puppies_base http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/base
src/gz puppies_kernel http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/kernel
src/gz puppies_telephony http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/telephony
src/gz puppies_oldpackages http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/oldpackages
src/gz puppies_packages http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/packages
src/gz puppies_qca http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/qca
src/gz puppies_puppies http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/puppies
src/gz puppies_routing http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/routing
src/gz puppies_luci http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/luci
src/gz puppies_management http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/management
# src/gz puppies_targets http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/targets
还可以使用wget自己下载
wget
http://downloads.openwrt.org/snapshots/trunk/x86/64/packages/packages/lrzsz_0.12.20-1_x86_64.ipk
from https://github.com/z694456114/openwrt
No comments:
Post a Comment