Anye
Anye
Published on 2024-05-18 / 102 Visits
0
0

一个花活玩法:随身站点

前言

这可能是一个小众需求。

作为社团社长,每次在纳新的时候总有一个难题:操场没有校园网 WIFI 覆盖,各大运营商信号覆盖也差,每次新成员需要扫码登记信息或者我们展示社团活动内容的时候,总是一群人围着,等网。。。

据此需求,我最近想到了一个花活儿玩法,使用各种派类开发板,开 AP 模式,部署成局域网站点,在 ARM 的低功耗和 Halo 的超易迁移的特性加持下,完美实现相关需求。

技术栈

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

参考资料

[1] https://linux265.com/news/3899.html


Comment