将 Linux 主机配置为无线 AP 的方法
Tnze
编辑于 2024年04月02日 04:49
收录于文集
共18篇

 在这篇文章里,我将介绍一种把 Linux 主机配置为无线 AP 的方法。该方法有以下几点特性:

  • 不进行 NAT,连接上无线 AP 的设备依然与 Linux 主机本身处于同一网段

  • 不需要配置 DNS 和 DHCP 服务器,使用上级路由提供的 DNS 和 DHCP 服务。

  • 你可以选择开机自动启动或者手动启动

本人测试环境为 ArchLinux ,理论上其他发行版配置方法类似。我们会用到以下软件包:

  • 用 systemd-networkd 作为网络管理器,因此与其他网络管理器(如 NetworkManager)冲突

  • 用 hostapd 作为无线 AP 管理与认证服务的守护进程,因此与 iwd 或 wpa_supplicant 冲突(大概)

网络拓扑图如下,标记为 ArchLinux 的设备即我们要配置的 Linux 主机。

我们的 Linux 主机至少需要两张网卡:一张以太网卡与一张无线网卡。在我的机器上,这张以太网卡叫做 enp1s0,无线网卡叫做 wlan0,后面均已这两个名字称呼这两张网卡。

首先需要自行安装好 systemd-networkd 与 hostapd 这两个软件包,并且禁用或卸载与它们冲突的其他软件包。在 ArchLinux 上,前者是自带的软件,只需要使用 pacman 包管理器安装 hostapd 即可。


首先我们需要配置 systemd-networkd,详细的配置方法说明可以参考 ArchLinux 的文档:

https://wiki.archlinuxcn.org/wiki/Systemd-networkd

具体到本文介绍的配置,我们需要在 /etc/systemd/network/ 目录下创建三个文件:20-wired.network、bridge.netdev 与 bridge.network 。其中文件名可以自定义,后缀名则不行。

三个文件的具体配置如下:

代码块
Shell
自动换行
复制代码
# /etc/systemd/network/bridge.netdev
[NetDev]
Name=br0
Kind=bridge
复制成功

代码块
Shell
自动换行
复制代码
# /etc/systemd/network/bridge.network 
[Match]
Name=br0

[Network]
DHCP=true
DNSSEC=allow-downgrade 
复制成功

代码块
Shell
自动换行
复制代码
# /etc/systemd/network/20-wired.network
[Match]
Name=enp1s0

[Network]
Bridge=br0 
复制成功

进行如上配置后,systemd-networkd 会自动创建一个名为 br0 的网桥设备,并且将 enp1s0 添加到该网桥之中。由于开启了 DHCP 功能,br0 会从局域网中的 DHCP 服务器自动获取 IP 地址。现在可以启动 systemd-networkd ,检查上述配置是否正确:

代码块
Shell
自动换行
复制代码
sudo systemctl start systemd-networkd
复制成功

此时通过命令 ip addr 应该可以看到 br0 设备成功获取到的 IP 地址。


接下来进行 hostapd 的配置,同样详细的配置可以参考 ArchLinux 提供的文档(以下链接为英文版,在页面里可以切换为中文版):

https://wiki.archlinux.org/title/Software_access_point

由于 hostapd 的配置选项特别多,这边建议对着配置文件里的说明慢慢配置,或者干脆对着上面的 wiki 改。特别需要注意的是以下两项配置:

代码块
Shell
自动换行
复制代码
# /etc/hostapd/hostapd.conf(节选)
interface=wlan0
bridge=br0
复制成功

指定 bridge=br0 后,hostapd 会自动将 wlan0 添加到 systemd-networkd 创建的网桥 br0 中。这也是前面不需要在 systemd-networkd 配置文件中配置 wlan0 的原因。

最大的坑是 Intel 的无线网卡工作在 AP 模式时不支持 5G 频段,截至攥写本文时并没有解决方案,我最后将 hw_mode 配置为了 2.4G 频段的 802.11g。

为了方便大家修改配置,这里提供部分 Wi-Fi 代际名称与标准名称的对照表:

  • Wi-Fi 7:802.11be

  • Wi-Fi 6:802.11ax

  • Wi-Fi 5:802.11ac

  • Wi-Fi 4:802.11n

按照你喜欢的方案修改完配置文件后,通过以下命令启动 hostapd 守护进程:

代码块
Shell
自动换行
复制代码
sudo systemctl start hostapd
复制成功

通过以下命令查看 hostapd 运行情况:

代码块
Shell
自动换行
复制代码
systemctl status hostapd
复制成功

如果你看到 Active: dead,那么说明你的配置存在问题(例如硬件不支持你请求的模式),需要修改配置文件之后重新 sudo systemctl start hostapd🥲。

进行正确的配置后,hostapd 的状态应该是 Active: active (running),至此全部配置都做完了。用手机搜索热点试试连接吧!

Tnze · 2024年4月1日20点41分