树莓派Hostapd热点优化:实现自动跳转或Captive Portal引导访问本地站点
实现树莓派WiFi热点连接后自动跳转至本地站点
我来帮你搞定这个需求——让用户连上网后自动跳转到你的本地站点,完全不用手动输网址。核心就是利用移动设备自带的Captive Portal(强制门户)检测机制,设备连接新WiFi后会自动发送检测请求,我们拦截这些请求并重定向到你的目标站点就行,完全不用搞条款认证那一套。下面是具体步骤:
1. 配置dnsmasq拦截设备检测请求
几乎所有移动设备(安卓、苹果、Windows)连接新WiFi后,都会向特定域名发送网络连通性检测请求,我们要把这些域名解析到树莓派的热点IP,让设备的检测请求落到树莓派上。
编辑dnsmasq配置文件:
sudo nano /etc/dnsmasq.conf
添加以下内容(把192.168.4.1换成你的树莓派热点实际IP):
address=/connectivitycheck.gstatic.com/192.168.4.1 address=/www.msftconnecttest.com/192.168.4.1 address=/www.msftncsi.com/192.168.4.1
保存后重启dnsmasq生效:
sudo systemctl restart dnsmasq
2. 搭建HTTP服务处理重定向
我们需要一个简单的HTTP服务,把设备发来的检测请求直接重定向到你的本地站点http://examplepi.com。这里推荐用Nginx,稳定又省心:
安装Nginx
sudo apt update && sudo apt install nginx -y
配置重定向规则
编辑Nginx默认站点配置:
sudo nano /etc/nginx/sites-available/default
把默认的location /块替换成以下内容:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; # 处理所有常规请求 location / { return 302 http://examplepi.com; } # 针对性处理苹果设备的检测路径 location /hotspot-detect.html { return 302 http://examplepi.com; } # 针对性处理安卓设备的检测路径 location /generate_204 { return 302 http://examplepi.com; } }
保存后重启Nginx:
sudo systemctl restart nginx
备选:用Python快速搭建(适合测试)
如果不想装Nginx,也可以用Flask写个极简重定向服务:
from flask import Flask, redirect app = Flask(__name__) # 匹配所有设备的检测路径 @app.route('/') @app.route('/generate_204') @app.route('/hotspot-detect.html') def redirect_to_target(): return redirect('http://examplepi.com', code=302) if __name__ == '__main__': app.run(host='0.0.0.0', port=80)
先安装Flask:pip install flask,然后运行脚本即可。
3. 测试效果
用手机连接树莓派的WiFi热点:
- 安卓设备通常会自动弹出浏览器,直接跳转到你的本地站点
- 苹果设备会弹出「登录到网络」的提示框,点击后就会打开你的站点
- Windows设备会在右下角弹出网络提示,点击后也会跳转
这样就完全简化了用户的操作步骤,连上网就直达你的站点了。
内容的提问来源于stack exchange,提问作者Ryan Bobrowski




