检测联网
先探测 `generate_204`,再用 TCP 拨测兜底;在线时保持待命。
它最初为 Radxa Cubie A7Z 这类 ARM64 Debian 设备设计,也适合任意支持 AP 模式的 Debian / Ubuntu 网关、边缘盒子和自制硬件。
服务常驻 systemd,只有设备确实未联网或收到重新配网触发时才介入。
先探测 `generate_204`,再用 TCP 拨测兜底;在线时保持待命。
未联网时广播 `CubieSetup-XXXX`,SSID 可按配置覆盖。
纯 Go DHCP + DNS,把手机导向内置的配网页。
手机端选择 SSID、填写密码,门户实时返回连接进度。
单射频设备先关闭 AP,再连接目标网络并等待地址获取。
联网成功后收起热点;失败时热点重新出现,方便重试。
DHCP、DNS 劫持和门户网页都内置在二进制里,部署面更小。
有 NetworkManager 时走 `nmcli`,没有时回退到 `hostapd + wpa_supplicant`。
Linux 下通过 `SO_BINDTODEVICE` 限制服务只在配网子网可见。
支持哨兵文件和 GPIO 长按触发,设备上线后也能回到配网模式。
目标系统可以是 Debian 11+ 或 Ubuntu;Radxa Cubie A7Z 是首个目标板, 但代码不绑定具体硬件。
仓库附带安装脚本。自行编译时使用 Go 1.21+,默认交叉编译 Linux ARM64 静态二进制。
sudo ./install.sh
sudo systemctl start wifi-provisioner
journalctl -u wifi-provisioner -f
make build
scp bin/wifi-provisioner root@device:/usr/local/bin/
sudo systemctl restart wifi-provisioner
iw list | sed -n '/Supported interface modes/,/Band/p'
# 输出中必须出现:* AP
配置文件位于 `/etc/wifi-provisioner/config.json`。空值会回落到内置默认值, 现场部署时通常只需要设置网卡名、热点密码和重新配网触发。
先看 `iw list` 是否有 `* AP`,再跟 `journalctl -u wifi-provisioner -f`。
手机浏览器直接打开 `http://192.168.4.1`,手动入口始终保留。
多半是密码或 DHCP 客户端问题;热点会重新出现,重连即可重试。