前言:這個伺服器的搭建隻是為了了解wifidog與認證伺服器的具體互動過程,在搭建商用認證服時,需要有所改進。 關于wifidog認證的流程,下面幾篇部落格介紹的很不錯: http://blog.csdn.net/huithe/article/details/27195903
一.了解認證互動的資料 搭建wifidog authpuppy伺服器,通過抓包,了解了認證過程資料的互動,以下是我搭建wifidog authpuppy參考的貼文 http://www.right.com.cn/forum/thread-196859-1-1.html
為了下面的解釋說明更清楚,在上面的部落格中截了下圖:
關于1、2、3步是在路由器和用戶端之間完成的,這裡就不介紹了, 下面是第4、5、6、7步資料包分析:(用戶端抓包:172.16.16.68)
第4步,截取的資料包如下,是一個get請求,附帶的資訊有網關ip,wifidog的監聽端口2060,wifidog的gw_id,用戶端mac,用戶端請求的url; 第5步,認證伺服器給用戶端回複的資訊是一個認證頁面, 在這個認證頁面中,是一個post送出的表格; 第6步,使用者送出賬号和密碼,伺服器收到post消息,檢查使用者的資訊是否合理,合理則将至重定向到網關,也就是第7步; 第7步,authpuppy認證服認證通過,回複用戶端一個重定向位址,包含token資訊; 第8步,是用戶端與路由器的互動,主要是比較token資訊,第11步(黑色),路由器回複給用戶端一個重定向到認證服,用戶端收到重定向,進入第11步(紅色); 第11步(紅色),是用戶端對認證服的一個get請求,認證服重定向一個url,本人重定向的url是:http://tooki.leptonnet.com/login.html。 綜上,認證服需要提供,login和portal接口
下面是在伺服器上的抓包,與上面抓包不是同一時間,下面的包是路由器與認證服的互動資訊,是以伺服器上需要有auth和ping的接口,關于字段的說明: 1.get auth的stage字段,有至少3種狀态,在stage為logout時,回複auth: 0即可,在其它狀态回複auth: 1; 2.get ping,回複Pong即可;
下面是認證失敗,認證服沒有處理好将第6步重定向到了路由器,但此後路由器在對認證服發auth時,認證服由于沒有對應的token記錄,回複auth: 0,使得路由器在第11步(黑色)的時候重定向了下面的Get請求,是以,認證服需要一個gw_message.php的應答接口
二.認證服的實作 綜合上面所有包的資訊:認證服上需要有以下5個接口: 使用者登入接口: 1.login; 登入認證成功重定向的接口: 2.portal; 路由器認證使用者是否存在: 3.auth; 路由器檢測認證服是否存在: 4.ping; 路由器發現使用者不合理: 5.gw_message.php;
以下是實作的代碼: https://gitee.com/cocos_yang/wifidogRenZhengFuWuQi.git
注: 需要自己搭建mysql資料庫,建兩個表,userInfo(此表中隻有兩個字段username和password)和tokenMac(此表也隻有兩個字段mac和token);截圖如下
下面是認證界面登入界面和認證成功後重定向的界面:
圖一:認證界面
圖二:認證成功後,重定向的界面
三.路由器中wifidog.conf的配置資訊:
GatewayID yangyang
GatewayInterface br-lan
GatewayAddress 172.16.8.1
HtmlMessageFile /etc/wifidog-msg.html
AuthServer {
Hostname 1XX.XXX.2XX.1XX
SSLAvailable no
HTTPPort 80
Path /wifidog/
}
CheckInterval 60
ClientTimeout 5
FirewallRuleSet validating-users {
FirewallRule allow to 0.0.0.0/0
}
FirewallRuleSet known-users {
FirewallRule allow to 0.0.0.0/0
}
FirewallRuleSet unknown-users {
FirewallRule allow udp port 53
FirewallRule allow tcp port 53
FirewallRule allow udp port 67
FirewallRule allow tcp port 67
}
FirewallRuleSet locked-users {
FirewallRule block to 0.0.0.0/0
}
注:在wifidog中不要删掉關于firewall的配置,删除了會導緻認證通過後無法上網。