如何仅使用 NetWorkManager 将 Raspi 变成 Wi-Fi 接入点

将 Raspberry Pi 的 Wi-Fi 变成接入点一直是通过安装 hostapd 和 dnsmasq 来实现的。在当前的操作系统中,网络管理现在由 NetworkManager 实现,无需使用其他应用程序。而且非常简单。

*自 2023 年 10 月起,NetworkManager 已成为树莓派操作系统的标准配置。(前身为 dhcpcd)

如果把 Raspberry Pi 变成一个 Wi-Fi 接入点,你就可以把另一台机器或智能手机直接连接到 Raspberry Pi 上并进行操作。
为了清楚起见,我们将向你展示如何通过 Wi-Fi 把另一台机器连接到 Raspberry Pi 上构建的网络环境。

当时的环境

  • PL-R4(计算模块 4)
  • Raspberry Pi OS bullseye 64bit
  • 通过有线局域网电缆上网

该环境用于将 ComputeModule4 Wi-Fi 设置为接入点。为使其成为接入点,Wi-Fi 不设置为普通互联网连接。

在撰写本报告时,操作系统处于更新状态。

sudo apt update && sudo apt full-upgrade -y

如果安装了 dnsmasq,则应将其停止、禁用或移除,以避免击球。
NetworkManager 可在运行 dnsmasq 的实例中使用。


互联网端通过有线网线与 Raspberry Pi 连接。

网络管理员命令

使用命令在 NetworkManager 中配置 Wi-Fi 设置。

也可以在终端上进行图形配置,如 raspi-config(nmtui=网络管理员文本用户界面)。

  • nmtui 终端中的图形配置工具
  • 使用 nmcli 命令的配置工具

这一次,使用 nmcli 命令来设置系统。

以下命令非常有用
您可能需要在设置过程中运行这些命令作为确认。

nmcli dev status (nmcli device)
nmcli connection show (nmcli connection)
nmcli connection show wlan0
nmcli connection show AP名

配置文件位置

设置新接入点时,会在/etc/NetworkManager/system-connections/.(持久配置文件的位置)下创建该接入点。

sudo nano /etc/NetworkManager/system-connections/rpi_ap.nmconnection

它是这样描述的

[connection]
id=rpi_ap
uuid=********-****-****-****-************
type=wifi
interface-name=wlan0
permissions=

[wifi]
band=bg
mac-address-blacklist=
mode=ap
ssid=raspida-lan
[wifi-security]
key-mgmt=wpa-psk
pairwise=ccmp;
proto=rsn;
psk=password
[ipv4]
address1=192.168.2.1/24
dns-search=
method=shared
[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto
[proxy]

addr-gen-mode=stable-privacy dns-search= method=auto [proxy]

您可以直接编辑该文件,但我不建议您这样做,因为 UUID 等信息会发生变化,所以还是使用 nmcli 命令吧。

使用 nmcli 命令进行设置。

主要问题就在这里。

为了使它成为一个接入点,我们将创建一个名为 rpi_ap 的连接点,而不是通常的 eth0 或 wlan0,这样设置后,智能手机(PC)就可以连接到 Raspi 上的 wlan0。

使用 nmcli 命令。
命令格式有点复杂,因为有很多选项,而且命令选项可以省略。

nmcli 格式

nmcli [OPTIONS...] { help | general | networking | radio | connection | device | agent | monitor } [COMMAND] [ARGUMENTS...]

输入中可省略的命令选项可以少至一个字符;还可以使用 con 和 dev 等微妙的缩写,因此使用命令完成(TAB 键)键入会更方便。

遗漏示例

nmcli connection show rpi_ap

nmcli c s rpi_ap

我想你会习惯的,但一开始如果用全文来设置,会更容易理解。

创建和配置 Wi-Fi 接入点配置文件

为接入点创建配置文件。如果创建新的配置文件,可以将设置写在一行中。


可选设置是 ssid 名称(raspida-lan)和密码(”password”)。

sudo nmcli connection add type wifi ifname wlan0 con-name rpi_ap autoconnect yes \
ssid raspida-lan \
802-11-wireless.mode ap \
802-11-wireless.band bg \
ipv4.method shared ipv4.address 192.168.2.1/24 \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.pairwise ccmp \
wifi-sec.proto rsn \
wifi-sec.psk "password"

最后,设置得到体现。

sudo nmcli connection up rpi_ap

配置选项说明

下面我将解释一下命令示例的含义。

sudo nmcli connection add type wifi ifname wlan0 con-name rpi_ap autoconnect yes
连接类型为 Wi-Fi,接口为 wlan0,连接 AP 名称为 rpi_ap,自动连接为 yes。我们启用自动连接设置是因为每次都需要执行连接命令。

ssid raspida-lan
我将 SSID 命名为 raspida-lan。这是任意文本。您将用这个名称连接到 WLAN。

Wi-Fi 身份验证方法也一并设置。
802-11-wireless~ 或 wifi-sec~ 部分是 Wi-Fi 验证方法、IP 地址等。这有必要吗?
请根据您的网络环境进行更改。

802-11-wireless.mode ap
802-11-wireless.band bg
ipv4.method shared ipv4.address 192.168.*.1/24
wifi-sec.key-mgmt wpa-psk
wifi-sec.pairwise ccmp
wifi-sec.proto rsn
wifi-sec.psk "password"

在设置 IP 地址前,将模式设为 AP(接入点),频段设为 b/g,并将 ipv4.method 设为共享,而不是手动(手动)。


当 NetworkManager 单独设置为 MANUAL 时,将分配本地地址(169.254~)。

为清晰起见,IP 地址为192.168.*.1/24。我已将 * 设置为不覆盖我家的 WLAN。

由于环形认证方法是 WPA2,我们将 RSN 设置为协议,将 AES(≒ CCMP)设置为密码方法。

稍后设置

如果要在 conf 文件创建后再设置,可使用nmcli modify命令添加。

设置示例:

nmcli connection modify rpi_ap ipv4.method manual ipv4.addresses 192.168.2.1/24 \
nmcli connection modify rpi_ap 802-11-wireless-security.key-mgmt wpa-psk \
nmcli connection modify rpi_ap 802-11-wireless-security.psk "任意パスワード" \
nmcli connection modify rpi_ap 802-11-wireless-security.pairwise ccmp \
nmcli connection modify rpi_ap 802-11-wireless-security.proto rsn
nmcli connection modify rpi_ap 802-11-wireless.band a \
nmcli connection modify rpi_ap 802-11-wireless.channel 12

设置的反映

设置好所需的一切后,建立连接。(反映更正和补充内容)

sudo nmcli connection up AP名

重启服务也能反映出这一点。

您也可以重新启动服务以反映修改。通常情况下,连接起来就足够了。

sudo systemctl restart NetworkManager.service

确认列表视图和内容设置

可以使用 show 命令显示列表。使用 show 命令(nmcli connection show rpi_ap)指定接入点名称(本例中为 rpi_ap)将显示接入点设置。

nmcli connection show
nmcli connection show rpi_ap

如果缺少任何部件,可以按照之前的nmcli con modify〜 进行设置。

删除接入点命令

要删除接入点,请使用删除命令。
如果您犯了错误,可能需要重新开始。先删除,然后重新创建。

sudo nmcli connection delete rpi_ap

让我们联系起来!

接入点设置完成后,尝试从另一台电脑或智能手机进行连接。

连接到另一个 Raspi 上 SSID 设置为 ikkadan-lan 的接入点的示例。

在 iPhone 上连接 SSID 设置为 raspida-lan 的接入点的示例。

您可以看到,IP 地址也是在指定范围内分配的。在本例中,我们将其设置为192.168.2.1/24

只使用了 NetworkManager。

只需使用 NetworkManager,就能轻松方便地将 Wi-Fi 变成接入点。

与之前的 dhcpcd+hosted+dnsmasq 组合相比,从手数上看似乎更容易。

nmcli 命令也可在 shell 脚本(.sh)中使用,因此,将自己的配置方法组合在一起会很有用。
这里没有提及 nmtui 命令。虽然它很容易理解,因为可以在图形用户界面中配置,但除非最终执行连接命令,否则不会立即反映出来。但是,由于在执行连接启动命令之前不会立即反映出来,因此很容易忘记激活它。

虽然这是一个执行命令的设置,但并不复杂,因为只需要一行。

这是一种将 Raspi 变成用 NetworkManager 配置的 Wi-Fi 接入点的方法。


記事寄稿:ラズパイダ

非エンジニアでも楽しく扱えるRaspberry Pi 情報サイト raspida.com を運営。ラズベリーパイに長年触れた経験をもとに、ラズベリーパイを知る人にも、これから始めたいと興味を持つ人にも参考になる情報・トピックを数多く発信。PiLinkのサイトへは産業用ラズベリーパイについて技術ブログ記事を寄稿。