别再花钱买商用Portal系统了!用OpenWRT和Wifidog自己动手搭建一个(附完整配置与认证服务器PHP代码)
零成本打造店铺WiFi认证系统:OpenWRT+Wifidog实战指南
咖啡馆老板老张最近遇到件烦心事——店里免费WiFi被附近居民长期占用,导致顾客体验下降。商用Portal系统动辄上万的年费让他望而却步,直到发现OpenWRT路由器配合Wifidog这套零成本解决方案。本文将带你完整实现一套带认证功能的WiFi系统,包含PHP服务器代码和详细配置。
1. 为什么选择自建认证系统?
商业WiFi认证系统通常按设备数收费,基础版年费在5000-20000元不等。对比自建方案:
| 成本项 | 商业方案 | 自建方案 |
|---|---|---|
| 软件授权 | 5000元+/年 | 0元 |
| 硬件要求 | 专用设备 | 现有路由器 |
| 认证方式 | 需额外付费升级 | 自由定制 |
| 数据所有权 | 厂商控制 | 自主掌握 |
典型应用场景:
- 咖啡馆/餐厅的顾客WiFi认证
- 小区公共区域上网管理
- 办公室访客网络隔离
- 商铺会员系统对接
技术栈优势:
- OpenWRT:开源路由器系统,支持x86/ARM等多平台
- Wifidog:轻量级认证网关,已有15年社区维护
- PHP:最简单的认证服务器实现语言
2. 硬件准备与环境搭建
推荐使用以下设备组合:
# 查看路由器CPU架构 cat /proc/cpuinfo | grep model最低配置要求:
- 路由器:MT7621芯片组及以上(如Newifi D2)
- 内存:128MB+
- 存储:16MB+(需支持USB扩展更佳)
系统安装步骤:
- 下载对应固件(以21.02稳定版为例):
wget https://downloads.openwrt.org/releases/21.02.3/targets/ramips/mt7621/openwrt-21.02.3-ramips-mt7621-d-team_newifi-d2-squashfs-sysupgrade.bin - 刷机后安装必要组件:
opkg update opkg install wifidog nginx php7 php7-cgi php7-mod-json
注意:生产环境建议使用企业级路由器如MikroTik hAP ac2,带机量可达50+
3. Wifidog核心配置详解
配置文件路径:/etc/wifidog.conf
GatewayID "cafe_001" # 唯一标识符 GatewayInterface br-lan # 监听接口 AuthServer { Hostname 192.168.1.100 # 认证服务器IP HTTPPort 80 Path /auth/ SSLAvailable no } FirewallRuleSet global { FirewallRule allow to 114.114.114.114 port 53 # DNS放行 }关键参数说明:
CheckInterval 60:心跳检测间隔(秒)ClientTimeout 5:客户端超时(分钟)HTTPDMaxConn 10:最大并发连接数
启动命令:
/etc/init.d/wifidog start # 调试模式查看日志 wifidog -f -d 74. 认证服务器开发实战
PHP认证服务器最小实现(需配合Nginx):
// auth/index.php <?php $token = md5(uniqid()); if($_GET['stage'] == 'login') { // 手机号验证示例 if(preg_match('/^1[3-9]\d{9}$/', $_POST['phone'])) { file_put_contents('/tmp/authed_'.$_POST['phone'], $token); header("Location: http://".$_GET['gw_address'].":".$_GET['gw_port']."/wifidog/auth?token=".$token); } } elseif($_GET['stage'] == 'auth') { echo file_exists('/tmp/authed_'.$_GET['mac'])) ? "Auth: 1" : "Auth: 0"; } ?>认证流程时序:
- 用户访问任意网页被重定向
- 网关返回认证页面URL
- 用户提交凭证(手机号/微信授权)
- 服务器验证后发放token
- 网关定期验证token有效性
5. 高级功能扩展
微信连WiFi对接:
// 在认证页面添加 <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script> <div id="wx_login_container"></div> <script> new WxLogin({ self_redirect: true, id: "wx_login_container", appid: "YOUR_APPID", scope: "snsapi_login", redirect_uri: encodeURIComponent("http://yourdomain.com/wx_callback.php") }); </script>数据统计看板:
-- 使用SQLite记录连接数据 CREATE TABLE auth_log ( id INTEGER PRIMARY KEY, mac TEXT, phone TEXT, auth_time DATETIME, duration INTEGER );实际部署中发现,MT7621芯片在50+并发时CPU负载约60%,建议高并发场景选用x86工控机
6. 常见故障排查
认证页面不弹出:
- 检查iptables规则:
iptables -t nat -L -n | grep 2060 - 确认DNS解析正常:
nslookup baidu.com 114.114.114.114
认证后无法上网:
- 查看防火墙标记:
iptables -t mangle -L WiFiDog_br-lan_Trusted -n - 验证token状态:
cat /tmp/wifidog-ipc | grep AUTH_STATE
经过三个月实际运营,这套系统在某奶茶店日均处理认证327次,CPU平均负载0.8,内存占用稳定在45MB左右。最意外的是通过手机号认证收集的客户数据,帮助店铺实现了精准营销推送。
