iwd (简体中文)

iwd (iNet wireless daemon,iNet 无线守护程序) 是由英特尔(Intel)为 Linux 编写的一个无线网络守护程序。该项目的核心目标是不依赖任何外部库,而是最大程度地利用 Linux 内核提供的功能来优化资源利用。

翻译状态:本文是 iwd翻译。上次翻译日期:2020-08-09。如果英文版本有所更改,则您可以帮助同步翻译。

iwd 可以独立工作,也可以和 ConnMansystemd-networkdNetworkManager 这样更完善的网络管理器结合使用。

安装

安装 iwd 软件包。

使用方法

iwd 软件包提供了客户端程序 iwctl、守护程序 iwd 和 WiFi 监控工具 。

启动/启用 以便可以使用 iwctl 对其进行控制。

iwctl

要进入交互式提示符(interactive prompt),执行:

$ iwctl

然后交互式提示就会以 前缀显示出来了。

要列出所有可用的命令:

[iwd]# help

连接网络

首先,如果不知道你的网络设备名称,请列出所有 WiFi 设备:

[iwd]# device list

然后,要扫描网络,执行:

[iwd]# station device scan

再然后,就可以列出所有可用的网络:

[iwd]# station device get-networks

最后,要连接到一个网络:

[iwd]# station device connect SSID

如果要求输入网络密码,将会提示用户输入。此外,连接操作可以应用成命令行参数的形式:

$ iwctl --passphrase passphrase station device connect SSID
注意:
  • iwd 会自动将网络密码存储在 /var/lib/iwd 目录中,以后就可以使用其自动连接记住的网络。参见 #可选配置 一节。
  • 要连接 SSID 里带空格的网络,连接时请用双引号将网络名称括起来。
  • iwd 仅支持 8 到 63 位 ASCII 编码字符组成的 PSK 密码。如果没有满足要求,会出现下列错误信息:PMK generation failed. Ensure Crypto Engine is properly configured

使用 WPS/WSC 连接网络

如果网络配置为可以通过按下一个按钮就能进行连接 (Wikipedia:Wi-Fi Protected Setup,WPS,WiFi 保护配置),先检查设备是否能兼容以下配置步骤:

[iwd]# wsc list

然后,假设设备出现在了上面的列表中:

[iwd]# wsc device push-button

接着按下路由器上的按钮。如果提前按下按钮,但只要少于两分钟前,以上步骤也是可以生效的。

如果网络要求验证 PIN 码才能连接,请检查 命令的输出,了解如何为 命令提供正确的选项。

断开网络连接

要断开网络连接:

[iwd]# station device disconnect

显示设备和连接信息

要显示 WiFi 设备详细情况,比如 MAC 地址:

[iwd]# device device show

要显示包括 WiFi 设备的连接网络在内的连接状态:

[iwd]# station device show

管理已知网络

要列出以前连接过的网络:

[iwd]# known-networks list

要忘记已知的网络:

[iwd]# known-networks SSID forget

WPA Enterprise

EAP-PWD

为了连接到受 EAP-PWD 保护的企业(无线)访问接入点 (Access Point, AP),需要在 /var/lib/iwd 文件夹中创建一个 格式的文件,并包含以下内容:

如果不想自动连接到 AP,可以将相应选项设定为 False 并手动通过 iwctl 连接网络。密码同理,如果不想让密码以明文保存,则将相应选项从文件中删去,直接连接企业 AP。

EAP-PEAP

和 EAP-PWD 一样,同样需要在同一文件夹中创建一个 格式的文件。在继续编写配置文件之前,不妨了解一下自己所属组织所使用的 CA 证书。下面是一个使用 MSCHAPv2 密码认证的示例配置文件:

注意: 如果打算使用 eduroam,另请参见 #Eduroam

TTLS-PAP

和 EAP-PWD 一样,同样需要在同一文件夹中创建一个 格式的文件。在继续编写配置文件之前,不妨了解一下自己所属组织所使用的 CA 证书。下面是一个使用 PAP 密码认证的示例配置文件:

Eduroam

Eduroam 提供了一个 配置助手工具 (Configuration Assistant Tool,CAT), 遗憾的是它并不支持 iwd。但是,CAT 的安装程序只是一个 Python 脚本,可以通过点击下载按钮,然后选择你的大学来下载它。可以很轻易地提取出必要的配置选项,包括证书和服务域掩码。

下列的表格包含了 iwd 配置选项到 Eduroam CAT 安装脚本变量的映射关系:

Iwd 配置选项CAT 脚本变量
文件名某个 文件
EAP-Identity
one of
username@Config.user_realm

其他情况

更多测试范例可在上游仓库的 测试案例中找到

可选配置

文件 用于存储主要配置。参见 。

默认情况下,iwd 将网络配置存储在 /var/lib/iwd 目录中。配置文件名格式为 network.type,其中 network 指网络的 SSID,而 type 指的是网络类型(即 "open"、"wep"、"psk" 和 "8021x" 四种类型的其中一种)。这个文件用于存储加密的 (预共享密钥)和明文的 (网络密码),用户可自行创建,而无需调用 iwctl。它还可以用于存储与该网络 SSID 相关的其他配置。有关更多设置,请参阅 。

下面是一个最精简的示例文件,演示了如何连接到一个 SSID 为 "spaceship" 和密码为 "test1234" 的 WPA2/PSK 安全网络:

PreSharedKey(预共享密钥)可以使用 wpa_passphrase (来源于 ) 或 wpa-pskAUR 从 SSID 和 WiFi 密码计算得出:

禁用特定网络的自动连接

创建或编辑 文件。在其中添加如下部分:

禁用定期扫描可用网络

默认情况下,当 iwd 处于未连接状态时,它会定期扫描可用网络。要禁用定期扫描(以便总是手动扫描网络),创建或编辑 文件并添加以下部分:

/etc/iwd/main.conf
[Scan]
DisablePeriodicScan=true

启用内置网络配置

自 0.19 版本起,iwd 可使用内置的 DHCP 客户端或静态配置来分配(多个)IP 地址并设置路由。它是 独立 DHCP 客户端 不错的替代品。

要激活 iwd 的网络配置功能,创建或编辑 并添加以下部分:

还可以用 设置路由指标(route metric):

在网络配置中设定静态 IP 地址

将下列部分添加到 文件中。例如可以这样写:

选择 DNS 管理器

目前,iwd 支持两种 DNS 管理器 —— systemd-resolvedresolvconf

要使用 ,将下列部分添加到 中:

而对于 ,添加的为:

/etc/iwd/main.conf
[Network]
NameResolvingService=resolvconf

拒绝控制台(本地)用户修改设置

默认情况下 iwd D-Bus 接口允许 任何 控制台用户连接到 iwd 守护程序并修改配置,即使该用户不是 root 用户。

如果不想让控制台用户修改设置,但允许读取状态信息,请按如下所示创建一个 D-Bus 配置。

故障排除

详细 TLS 调试

如果在配置 MSCHAPv2 或 TTLS 时遇到困难,这会很有用。可以通过一个 附加配置片段 来设定以下环境变量

之后通过 命令检查 iwd 日志。

重启后出现连接问题

较低的熵池可能会导致连接问题,特别是在重启之后。请参阅 随机数生成 获取如何增大熵池的建议。

由于设备不可用,systemd 单元启动失败

一些用户曾报告说,iwd 提供的 systemd 单元没有等待无线设备可用(就开始启动了)。不幸的是,如果在 udev 重命名完成前 iwd 就启动了,网络设备会被拦截并且导致重命名失败。因此,单元启动失败。这个问题可通过在 中添加以下选项来解决,通过强制 iwd 进入传统模式(legacy mode),从而不重命名新检测到的设备:

也可以选择通过创建一个带有以下内容的 systemd 单元,将 iwd(服务)绑定到指定设备上。截至 0.21 版本,已经观察到这不会阻止 iwd 在稍后重命名无线设备,因此必须使用 iwd 的传统模式:

然后,禁用 并为指定设备 device 启用 iwd@device.service 单元。

此外,还可以通过创建如下 附加配置文件,为 iwd 设定适当的依赖,使其在 systemd/udevd 之后运行:

如果使用了 systemd-networkd,因为 systemd-udevd/networkd 两者都能相对较好地一起工作,且两者都有参与,所以可以在这两者之后启动 iwd,是合理的:

参见 。

无线设备没有被 udev 重命名

iwd 升级到 1.0 版本后引入了 systemd 网络链路配置文件:

/usr/lib/systemd/network/80-iwd.link
[Match]
Type=wlan

[Link]
NamePolicy=keep kernel

这可以防止 udev 将接口重命名为 。因此,无线链路名称在系统启动后会被保留。

如果这会导致问题,请尝试用以下方法屏蔽它:

# ln -s /dev/null /etc/systemd/network/80-iwd.link

另请参阅

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.