前言
这可能是一个小众需求。
作为社团社长,每次在纳新的时候总有一个难题:操场没有校园网 WIFI 覆盖,各大运营商信号覆盖也差,每次新成员需要扫码登记信息或者我们展示社团活动内容的时候,总是一群人围着,等网。。。
据此需求,我最近想到了一个花活儿玩法,使用各种派类开发板,开 AP 模式,部署成局域网站点,在 ARM 的低功耗和 Halo 的超易迁移的特性加持下,完美实现相关需求。
技术栈
1Panel (参考
https://1panel.cn/docs/installation/online_installation/ )Halo (参考
https://docs.halo.run/ )AP 模式[1]
Nmcli 启动 WIFI 热点
在这里我的需求是启动一个公开的热点,方便同学们扫码连接。
查看 WiFi 设备
在终端中通过命令获取 WiFi 网络接口的名称,命令如下:
ip link show
获取如下内容
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:00:a4:b4:9f:bf brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DORMANT group default qlen 1000
link/ether c8:8a:d8:1e:1f:1f brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 02:42:e2:d1:28:bf brd ff:ff:ff:ff:ff:ff
5: br-d77d4300a732: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 02:42:3a:f9:45:a0 brd ff:ff:ff:ff:ff:ff
这里获取名称为:wlan0
,因人而异。现在基本所有的无线网卡均支持 AP 模式,这里就不再检查了。
建立热点
在终端中输入以下内容,创建热点网络配置并启动。
IFNAME="wlan0" # 设置无线网卡名称
CON_NAME="WIFI" # 设置连接名称
nmcli con add type wifi ifname $IFNAME con-name $CON_NAME autoconnect yes ssid $CON_NAME # 添加连接,设置自动连接,设置SSID
nmcli con modify $CON_NAME 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared # 修改连接模式:ap模式,802.11b/g,共享模式
nmcli con up $CON_NAME # 启动连接
开启成功会有如下输出:
Connection 'WIFI' (9894adac-f246-4025-b05f-8ffe792cf4b8) successfully added.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
查看热点信息
通过以下命令检查接口和IP信息。
ip ad show wlan0 # 这里改成你自己的网卡名
输出:
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether c8:8a:d8:1e:1f:1f brd ff:ff:ff:ff:ff:ff
inet 10.42.0.1/24 brd 10.42.0.255 scope global noprefixroute wlan0
valid_lft forever preferred_lft forever
inet6 fe80::221f:e157:e636:8bb1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
修改 DNS 解析到本机
为了实现在后续同学们访问同一个域名仍然可以访问到站点,我这里把局域网站点的域名与公网的站点域名设置成了一个,这就需要把局域网的 IP 解析改成开发板的 IP,在我这里是 10.42.0.1
。
在 1Panel 的进程中查到 Nmcli 开起来的 NetworkManager
为无线热点启动了一个 dnsmasq
子进程,检查启动命令:
/usr/sbin/dnsmasq --conf-file=/dev/null --no-hosts --keep-in-foreground --bind-interfaces --except-interface=lo --clear-on-reload --strict-order --listen-address=10.42.0.1 --dhcp-range=10.42.0.10,10.42.0.254,60m --dhcp-lease-max=50 --dhcp-leasefile=/var/lib/NetworkManager/dnsmasq-wlan0.leases --pid-file=/run/nm-dnsmasq-wlan0.pid --conf-dir=/etc/NetworkManager/dnsmasq-shared.d
找到了配置文件所在的文件夹:
/etc/NetworkManager/dnsmasq-shared.d
创建自定义配置文件:
nano /etc/NetworkManager/dnsmasq-shared.d/custom.conf
在配置文件中添加自定义解析规则:
address=/www.example.com/10.42.0.1
重启 NetworkManager 服务:
systemctl restart NetworkManager