分类 wifidog服务器 下的文章

wifidog认证服务器authpuppy 搭建

此文仅限于搭建authpuppy 认证服务器,不包含认证插件等安装,仅说明步骤以备下次安装忘记步骤、耽误时间。

环境:ubuntu10.04

软件版本:authpuppy-1.0.0-stable.tgz

准备工作:ubuntu中安装Apache2,php5,mysql,及 postgres。具体的步骤可以去搜下,一般的多是apt-get install 就OK。postgres 安装名为postgresql

具体还可以参照authpuppy官方doc ,http://www.authpuppy.org/doc/Getting_Started。这个一定要看!写的很详细。

1.首先在authpuppy 官网下载源码http://www.authpuppy.org/。找到download,去下载authpuppy-1.0.0-stable.tgz 该版本。

2.将authpuppy-1.0.0-stable.tgz代码解压到/var/www/目录下后,访问http://localhost/authpuppy/web/ 会访问到preinstall.php,下面开始安装。先按照http://www.authpuppy.org/doc/Getting_Started中,将PostgreSQL数据建立成功。成功后,按照Getting_Started帮助手册,修改/etc/apache2/sites-available/default 这个文件,内容如下:

<VirtualHost *:80>
       ServerAdmin webmaster@localhost
       ServerName authpuppy.localhost
       ServerAlias authpuppy.test

       <span style="color: #ff0000;">#DocumentRoot /var/www/authpuppy/web/</span>  <br>    DocumentRoot /var/www/     <br>    DirectoryIndex index.php
       <Directory /var/www/authpuppy/web/>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride All
               Order allow,deny
               allow from all
       </Directory>

       Alias /sf /var/www/authpuppy/lib/vendor/symfony/data/web/sf
       <Directory "/var/www/authpuppy/lib/vendor/symfony/data/web/sf">
               AllowOverride All
               Allow from All
       </Directory>

       <span style="color: #ff0000;">#ErrorLog /var/log/apache2/authpuppy/error.log
</span>    ErrorLog /var/log/apache2/error.log<br>   
       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       <span style="color: #ff0000;">#CustomLog /var/log/apache2/authpuppy/access.log combined
</span>    CustomLog /var/log/apache2/access.log combined<br>  <br>     
  </VirtualHost>

加红色部分为Getting_Started中给的原样,我针对这个做了部分修改。关于两个log,因为/var/log/apache2/目录下没有authpuppy 这个文件,所以加这个的话Apache重启时会失败,所以将其去掉(或者你自己添加上也可以)。

$ sudo service apache2 restart

重启Apache,访问http://localhost/authpuppy/web/ .会出现第一个页面,点击let's go按钮。然后进到下一个页面上,这里会提示你什么文件没有可写权限或者没有安装某个php的扩展,按照上面提示做就可以了!还有注意一点。有时候点击let's go 就会出错,页面就访问失败了!这里可以将/authpuppy/web/installed.txt 这个删除掉。就可以了!处理好后点击next。进到连接数据库页面。我刚开始这个页面总访问不进来。这时按照http://www.authpuppy.org/doc/Getting_Started,将环境设置了一边后就可以访问了。具体的原因没有查明。然后就是与数据库连接,数据库选择postsql,注意用户名密码是否正确。过了这个页,基本上就是成功了。

用自己的话写的比较粗略,只供自己下次再搭建该环境时有个提醒。(这次就是第二次,又花费了一天多- -),第一次搭建步骤都忘了,所以想记录一下过程。主要是参考这两个链接:

http://www.authpuppy.org/doc/Getting_Started

http://blog.sina.com.cn/s/blog_d2facf270101g7hy.html ;wifidog+authpuppy认证页面的配置

第一个是官方手册上的,第二个是新浪博客上的一篇blog,我也不知道是不是原创。不过这个写的比较好,比我的详细些。到家可以参考下,但转载要注明哈。

本文章由 http://www.wifidog.pro/2015/01/22/wifidog-authpuppy-2.html 整理编辑,转载请注明出处

OPENWRT安装wifidog

需要学会用ssh登录路由器用linux命令查看。
ps 命令查看当前系统运行的进程信息
free 命令查看内存使用和swap挂载情况
ls 查看目录和文件
cd 进入退出目录
vi 查看编辑配置文件

安装命令:

#opkg update
#opkg install nano


uci set network.lan.ipaddr=[lan ip]  

使用pppoe设置
Shell代码

uci set network.wan.proto=pppoe    //设置wan口类型为pppoe  
uci set network.wan.username=[上网帐户]  
uci set network.wan.password=[上网密码]    //这两行设置pppoe用户名和密码 

如果要挂在上级路由下面,就需要进行下面的设置
Shell代码

uci set network.wan.proto=none    //关掉wan  
uci set network.lan.gateway=[上级路由ip]    //网关指向上级路由  
uci set network.lan.dns=[上级路由ip]    //dns指向上级路由  
uci set dhcp.lan.ignore=1    //关掉lan的dhcp  

最后对无线网络进行配置
Shell代码

uci set wireless.@wifi-device[0].disabled=0    //打开无线  
uci set wireless.@wifi-device[0].txpower=17    //设置功率为17dbm 太高会烧无线模块  
uci set wireless.@wifi-device[0].channel=6    //设置无线信道为6  
uci set wireless.@wifi-iface[0].mode=ap    //设置无线模式为ap  
uci set wireless.@wifi-iface[0].ssid=[自己设置SSID]    //设置无线SSID  
uci set wireless.@wifi-iface[0].network=lan    //无线链接到lan上  
uci set wireless.@wifi-iface[0].encryption=psk2    //设置加密为WPA2-PSK  
uci set wireless.@wifi-iface[0].key=[密码]    //设置无线密码  

提交应用配置
Shell代码

uci commit    //应用  
/etc/init.d/network restart    //重启网络服务  

安装luci管理界面
Shell代码

opkg update // 更新软件列表  
opkg list-installed // 查看已安装软件  
opkg install luci // 安装LUCI  
opkg install luci-i18n-chinese // 支持中文  

luci-app-firewall - 0.10.0-1
luci-i18n-english - 0.10.0-1
luci-lib-core - 0.10.0-1
luci-lib-ipkg - 0.10.0-1
luci-lib-lmo - 0.10.0-1
luci-lib-nixio - 0.10.0-1
luci-lib-sys - 0.10.0-1
luci-lib-web - 0.10.0-1
luci-mod-admin-core - 0.10.0-1
luci-mod-admin-full - 0.10.0-1
luci-proto-core - 0.10.0-1
luci-proto-ppp - 0.10.0-1
luci-sgi-cgi - 0.10.0-1
luci-theme-base - 0.10.0-1
luci-theme-openwrt - 0.10.0-1

即可完成LUCI的安装。
输入以下命令开启支持web服务的uhttpd,并设置其为自启动:
Shell代码

/etc/init.d/uhttpd enable # 开机自启动  
/etc/init.d/uhttpd start # 启动uhttpd  
  • Wifidog
    你可以尝试执行以下命令安装Wifidog:

    opkg update # Optional
    opkg install wifidog

--sftp安装

opkg update
opkg install vsftpd openssh-sftp-server
/etc/init.d/vsftpd enable
/etc/init.d/vsftpd start

SSH工具:
1.WINSCP
2.putty中文版 中文的使用的难度相对低一点
3.熟练一些的用户推荐 SecureCRT
操作多台设备的时候,十分的方便。这个自行搜索安装吧~

本文章由 http://www.wifidog.pro/2015/01/21/openwrt%E5%AE%89%E8%A3%85wifidog.html整理编辑,转载请注明出处

wifidog用php实现验证流程

步骤

首先简单说说wifidog认证的过程
客户端首次连接到wifi后,浏览器请求将会被重定向到:
login/?gw_address=%s&gw_port=%d&gw_id=%s&url=%s
验证通过后,客户端被重定向到网关,url格式如下:
http://网关地址:网关端口/wifidog/auth?token=
wifidong会启动一个线程周期性地报告每一个用户的状态信息,并通过如下地址发送给认证
服务器:
auth_server:/auth/?stage=
ip=
mac=
token=
incoming=
outgoing=
认证服务器根据该状态信息决定是否允许该用户继续连接,并回复网关,回复格式为:Auth:状态码,
如:Auth:1
常用状态码:
0:AUTH_DENIED,表示拒绝
1:AUTH_ALLOWED,验证通过
验证通过后,将重定向到如下地址:
portal/?gw_id=%s
wifidog的ping协议
wifidog通过ping协议将当前状态信息发送给认证服务器,发送地址为:
http://auth_sever/ping/?
gw_id=%s
sys_uptime=%lu
sys_memfree=%u
sys_load=%.2f
wifidog_uptime=%lu
认证服务器须返回一个“Pong”作为回应。
具体php实现代码如下

public function auth()  
    {  
        //响应客户端的定时认证,可在此处做各种统计、计费等等  
        /* 
            wifidog 会通过这个接口传递连接客户端的信息,然后根据返回,对客户端做开通、断开等处理,具体返回值可以看wifidog的文档 
        wifidog主要提交如下参数 
        1.ip 
        2. mac 
        3. token(login页面下发的token) 
        4.incoming 下载流量 
        5.outgoing 上传流量 
        6.stage  认证阶段,就两种 login 和 counters 
        */  


        $stage = $_GET['stage'] == 'counters'?'counters':'login';  
        if($stage == 'login')  
        {  
            //XXXX跳过login 阶段的处理XXXX不能随便跳过的  
            //默认返回 允许  
            echo "Auth: 1";  
        }  
        else if($stage == 'counters')  
        {  

            //做一个简单的流量判断验证,下载流量超值时,返回下线通知,否则保持在线  
            if(!empty($_GET['incoming']) and $_GET['incoming'] > 10000000)  
            {  
                echo "Auth: 0";  
            }else{  
                echo "Auth: 1\n";  
            }  
        }  
        else  
            echo "Auth: 0"; //其他情况都返回拒绝  


        /* 
            返回值:主要有这两种就够了 
        0 - 拒绝 
        1 - 放行 

        官方文档如下 
        0 - AUTH_DENIED - User firewall users are deleted and the user removed. 
        6 - AUTH_VALIDATION_FAILED - User email validation timeout has occured and user/firewall is deleted(用户邮件验证超时,防火墙关闭该用户) 
        1 - AUTH_ALLOWED - User was valid, add firewall rules if not present 
        5 - AUTH_VALIDATION - Permit user access to email to get validation email under default rules (用户邮件验证时,向用户开放email) 
        -1 - AUTH_ERROR - An error occurred during the validation process 
        */  
    }  
    public function portal()  
    {  
        /* 
         wifidog 带过来的参数 如下 
        1. gw_id 
        */  
        //重定到指定网站 或者 显示splash广告页面  
        redirect('http://www.baidu.com', 'location', 302);  

    }  
    public function ping()  
    {  
        //url请求 "gw_id=$gw_id&sys_uptime=$sys_uptime&sys_memfree=$sys_memfree&sys_load=$sys_load&wifidog_uptime=$wifidog_uptime";  
        //log_message($this->config->item('MY_log_threshold'), __CLASS__.':'.__FUNCTION__.':'.debug_printarray($_GET));  

        //判断各种参数是否为空  
        if( !(isset($_GET['gw_id']) and isset($_GET['sys_uptime']) and isset($_GET['sys_memfree']) and isset($_GET['sys_load']) and isset($_GET['wifidog_uptime']) ) )  
        {  
            echo '{"error":"2"}';  
            return;  
        }  
        //添加心跳日志处理功能  
        /* 
            此处可获取 wififog提供的 如下参数 
        1.gw_id  来自wifidog 配置文件中,用来区分不同的路由设备 
        2.sys_uptime 路由器的系统启动时间 
        3.sys_memfree 系统内存使用百分比 
        4.wifidog_uptime wifidog持续运行时间(这个数据经常会有问题) 
        */  

        //返回值  
        echo 'Pong';  
    }  
    /** 
     * wifidog 的gw_message 接口,信息提示页面 
     */  
    function gw_message()  
    {  
        if (isset($_REQUEST["message"])) {  
            switch ($_REQUEST["message"]) {  
                case 'failed_validation':  
                    //auth的stage为login时,被服务器返回AUTH_VALIDATION_FAILED时,来到该处处理  
                    //认证失败,请重新认证  
                    break;  
                case 'denied':  
                    //auth的stage为login时,被服务器返回AUTH_DENIED时,来到该处处理  
                    //认证被拒  
                    break;  
                case 'activate':  
                    //auth的stage为login时,被服务器返回AUTH_VALIDATION时,来到该处处理  
                    //待激活  
                    break;  
                default:  
                    break;  
            }  
        }else{  
            //不回显任何信息  
        }  
    }

本文章由 http://www.wifidog.pro/2015/01/21/wifidog-php.html 整理编辑,转载请注明出处

wifidog 配置,实现强制网关跳转

最开始想用openwrt,刷了一个,结果发现不会用,里面的配置太复杂了,被wan lan搞晕了,一直无法联网,因为在公司路由器本来就在一个局域网下,没办法请公司SA帮忙搞了下,也没有搞定,换DDWRT吧,这个可是有中文页面的,顿时亲了很多。

ddwrt确实方便很多了,不过一定要注意呀,因为我要用WIFIDOG,之前下了几个版本都没有wifidog的配置,好像可以自己装,没试过,因为最开始测试用的wiwiz,下载到路由器上以后,没法安装,最后直接下了dd-wrt.v24_nokaid_generic.bin这个版本的ddwrt,上面可以直接配置wifidog.org相当的方便。

wifidog认证服务用authpuppy.org,web服务配置(nginx)

if(!-e$request_filename){
    rewrite^(.*)/index.php last;
}

ddwrt=>services=>hotspot

gateway id这个很重要,认证服务需要这个

服务器路径一定要注意哈,加/,这个最开始老是不对,研究了很久。发现原来路径里面少了个/,导致无法访问到正确的认证接口,如果是路径的最后还要多加个/哦。亲

认证服务配置
nodes页面里面加一个node,默认会有一个的啦。定义gw_id 就是刚才ddwrt wifidog里面配置的那个。
然后去下载一个plugin,做验证的,apAuthLocalUserPlugin,就它了吧。安装以后里面可以配置,页面信息,注册等等。
现在客户端连接上你的WIFI,去测试下吧,应该可以了哦,亲。
下面说下自己开发wifidog服务接口的问题。
我只实现了4个接口地址,不晓得其他的还有那些哈。E文看的不是很懂,需要的自己可以看http://dev.wifidog.org/wiki/doc/developer/WiFiDogProtocol_V1

/login这个是连接的时候访问的登陆接口,登陆成功以后,返回一个302转向到http://gw_server:gw_port/wifidog/auth?token=xxx,你的token,这样子就可以了。至于是否需要用户名密码等登陆方法。看你自己咯。

/auth这个接口太重要了,之前各种没法验证的原因都是因为没有访问到这个,路由器在刚才拿到login的token之后,会再次访问这个接口,带上一些其他参数如ip/mac等,当然也包括token,服务器可以再次做验证,这个接口的重要是返回给路由器成功与否,结果如下:
Auth: Number
Number如下:
0-AUTH_DENIED
6-AUTH_VALIDATION_FAILED
1-AUTH_ALLOWED
5-AUTH_VALIDATION
-1-AUTH_ERROR
返回1是成功了。

/ping这个接口很简单,返回结果内容包含Pong字符串就可以了。
/port哦,这个还是有点重要的,是认证通过之后,路由器自动定向的页面,当然如果你需要返回到用户之前的页面,在/login接口的时候,路由器传入了一个url地址,那个是用户真的想访问的地址哈。

本文章由 http://www.wifidog.pro/2015/01/19/wifidog%E8%B7%B3%E8%BD%AC.html 整理编辑,转载请注明出处