网络配置/无线

出自 ArchWiki
(重定向自 无线网络配置

关于网络配置的主要文章是 网络配置

配置无线网络是一个两部分的过程;第一部分是识别并确保为您的无线设备安装了正确的驱动程序(它们在安装介质上可用,但通常必须显式安装),并配置接口。第二部分是选择一种管理无线连接的方法。本文涵盖了这两个部分,并提供了无线管理工具的附加链接。

#iw 章节描述了如何使用 iw 手动管理您的无线网络接口/您的无线 LAN。 网络配置#网络管理器 章节描述了几个可用于自动管理您的无线接口的程序,其中一些程序包括 GUI,并且所有程序都包括对网络配置文件的支持(当频繁切换无线网络时非常有用,例如使用笔记本电脑)。

设备驱动

默认的 Arch Linux 内核是模块化的,这意味着许多机器硬件的驱动程序都位于硬盘驱动器上,并作为模块提供。在启动时,udev 会清点您的硬件,并为您的相应硬件加载适当的模块(驱动程序),这将反过来允许创建网络接口

除了相应的驱动程序外,一些无线芯片组还需要固件。许多固件映像由 linux-firmware 软件包提供;但是,不包括专有固件映像,必须单独安装。这在 #安装驱动/固件 中进行了描述。

注意: 如果 udev 在启动时未加载正确的模块,只需手动加载它。如果 udev 为一个设备加载了多个驱动程序,则由此产生的冲突可能会阻止成功配置。请务必禁用不需要的模块。

检查驱动状态

要检查是否已加载您的网卡的驱动程序,请检查 lspci -klsusb -v 命令的输出,具体取决于网卡是通过 PCI(e) 还是 USB 连接的。您应该看到正在使用某些内核驱动程序,例如

$ lspci -k
06:00.0 Network controller: Intel Corporation WiFi Link 5100
	Subsystem: Intel Corporation WiFi Link 5100 AGN
	Kernel driver in use: iwlwifi
	Kernel modules: iwlwifi
注意
  • 如果网卡是 USB 设备,以 root 身份运行 dmesg | grep usbcore 应该会输出类似 usbcore: registered new interface driver rtl8187 的内容。
  • 如果您根本看不到网卡,则可能是它未正确地插入 PCI(e) 插槽/USB 端口中。尝试重新插拔。

另请检查 ip link 命令的输出,以查看是否创建了无线接口;通常无线网络接口的命名以字母“wl”开头,例如 wlan0wlp2s0。然后使用以下命令启动接口

# ip link set interface up

例如,假设接口是 wlan0,则命令为 ip link set wlan0 up

注意
  • 如果您收到类似 RTNETLINK answers: Operation not possible due to RF-kill 的错误,请确保设备未被硬阻塞或软阻塞。有关详细信息,请参见 #Rfkill 注意事项
  • 如果您收到错误消息 SIOCSIFFLAGS: No such file or directory,则很可能意味着您的无线芯片组需要固件才能运行。

检查内核消息中是否加载了固件

# dmesg | grep firmware
[   7.148259] iwlwifi 0000:02:00.0: loaded firmware version 39.30.4.1 build 35138 op_mode iwldvm

如果没有相关输出,请检查消息以获取您之前识别的模块(在此示例中为 iwlwifi)的完整输出,以识别相关消息或进一步的问题

# dmesg | grep iwlwifi
[   12.342694] iwlwifi 0000:02:00.0: irq 44 for MSI/MSI-X
[   12.353466] iwlwifi 0000:02:00.0: loaded firmware version 39.31.5.1 build 35138 op_mode iwldvm
[   12.430317] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEBUG disabled
...
[   12.430341] iwlwifi 0000:02:00.0: Detected Intel(R) Corporation WiFi Link 5100 AGN, REV=0x6B

如果内核模块已成功加载并且接口已启动,则可以跳过下一节。

安装驱动/固件

检查以下列表以了解您的网卡是否受支持

请注意,即使产品标识符相同,某些供应商发货的产品也可能包含不同的芯片组。只有 usb-id(对于 USB 设备)或 pci-id(对于 PCI 设备)是权威的。

如果您的无线网卡在上面列出,请按照此页面的 #驱动程序和固件故障排除 子章节进行操作,其中包含有关安装某些特定无线网卡的驱动程序和固件的信息。然后再次检查驱动状态

如果您的无线网卡未在上面列出,则可能仅在 Windows 下受支持(某些 Broadcom、3com 等)。对于这些,您可以尝试使用 ndiswrapper

实用程序

与其他网络接口一样,无线接口也由 iproute2 软件包中的 ip 控制。

可以使用网络管理器来管理无线连接,它将使用 wpa_supplicantiwd 进行无线身份验证,或者直接使用 wpa_supplicantiwd。对于较低级别的配置,或者如果您正在使用旧式驱动程序或旧式身份验证方法,则可以使用 iw 和已弃用的 wireless_tools

iw 和 wireless_tools 比较

软件 软件包 WEXT2 nl80211 WEP WPA/WPA2/WPA3 Archiso
iw iw
wireless_tools1 wireless_tools
  1. 已弃用。
  2. 请注意,某些旧式驱动程序仅支持 WEXT。

下表概述了 iwwireless_tools 的可比较命令。有关更多示例,请参见 使用 iw 替换 iwconfig

iw 命令 wireless_tools 命令 描述
iw dev wlan0 link iwconfig wlan0 获取链接状态。
iw dev wlan0 scan iwlist wlan0 scan 扫描可用接入点。
iw dev wlan0 set type ibss iwconfig wlan0 mode ad-hoc 将运行模式设置为 ad-hoc
iw dev wlan0 connect your_essid iwconfig wlan0 essid your_essid 连接到开放网络。
iw dev wlan0 connect your_essid 2432 iwconfig wlan0 essid your_essid freq 2432M 连接到开放网络并指定频道。
iw dev wlan0 connect your_essid key 0:your_key iwconfig wlan0 essid your_essid key your_key 使用十六进制密钥连接到 WEP 加密网络。
iwconfig wlan0 essid your_essid key s:your_key 使用 ASCII 密钥连接到 WEP 加密网络。
iw dev wlan0 set power_save on iwconfig wlan0 power on 启用节能。

iw

注意
  • 请注意,大多数命令必须以root 权限执行。以普通用户权限执行时,某些命令(例如 iw list)将退出且不报错,但也不会产生正确的输出,这可能会造成混淆。
  • 根据您的硬件和加密类型,某些步骤可能不是必需的。已知某些网卡需要先激活接口和/或扫描接入点,然后才能关联到接入点并获得 IP 地址。可能需要进行一些实验。例如,WPA/WPA2 用户可以尝试从步骤 #连接到接入点 直接激活其无线网络。

本节中的示例假设您的无线设备接口为 interface,并且您正在连接到 your_essid Wi-Fi 接入点。请相应地替换两者。

获取接口名称

提示: 有关更多示例,请参阅 iw 工具的 官方文档

要获取无线接口的名称,请执行以下操作

$ iw dev

接口的名称将在“Interface”一词后输出。 例如,通常是 wlan0

获取接口的状态

要检查链路状态,请使用以下命令。

$ iw dev interface link

您可以使用以下命令获取统计信息,例如 tx/rx 字节数、信号强度等

$ iw dev interface station dump

激活接口

提示: 通常不需要此步骤。

某些网卡需要先激活内核接口,然后才能使用 iwwireless_tools

# ip link set interface up
注意: 如果您收到类似 RTNETLINK answers: Operation not possible due to RF-kill 的错误,请确保硬件开关已打开。 有关详细信息,请参阅 #Rfkill caveat

要验证接口是否已启动,请检查以下命令的输出

$ ip link show interface
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff

<BROADCAST,MULTICAST,UP,LOWER_UP> 中的 UP 表示接口已启动,而不是后面的 state DOWN

发现接入点

要查看可用的接入点

# iw dev interface scan | less
注意: 如果显示 Interface does not support scanning,则您可能忘记安装固件。 在某些情况下,当未以 root 身份运行 iw 时,也会显示此消息。
提示: 根据您所在的位置,您可能需要设置正确的 监管域 才能看到所有可用的网络。

要检查的要点

  • SSID: 网络的名称。
  • 信号: 以 dBm 为单位(例如,从 -100 到 0)的无线功率比率报告。 负值越接近零,信号越好。 观察高质量链路和低质量链路上的报告功率应该可以了解各个范围。
  • 安全性: 它不是直接报告的,请检查以 capability 开头的行。 如果有 Privacy,例如 capability: ESS Privacy ShortSlotTime (0x0411),则网络受到某种程度的保护。
    • 如果您看到 RSN 信息块,则网络受 Robust Security Network 协议(也称为 WPA2)保护。
    • 如果您看到 WPA 信息块,则网络受 Wi-Fi Protected Access 协议保护。
    • RSNWPA 块中,您可能会找到以下信息
      • 组密码: TKIP、CCMP、两者或其他值。
      • 成对密码: TKIP、CCMP、两者或其他值。 不一定与组密码的值相同。
      • 身份验证套件: PSK、802.1x 或其他值。 对于家用路由器,您通常会找到 PSK( 密码)。 在大学中,您更可能找到需要登录名和密码的 802.1x 套件。 然后,您需要知道正在使用哪种密钥管理(例如 EAP),以及它使用什么封装(例如 PEAP)。 有关详细信息,请参阅 #WPA2 EnterpriseWikipedia:Authentication protocol
    • 如果您既没有看到 RSN 块也没有看到 WPA 块,但有 Privacy,则使用 WEP。

设置操作模式

您可能需要设置无线网卡的正确操作模式。 更具体地说,如果您要连接到 ad-hoc 网络,则需要将操作模式设置为 ibss

# iw dev interface set type ibss
注意: 在某些网卡上更改操作模式可能需要无线接口关闭 (ip link set interface down)。
注意: 在将操作模式更改为 AP (iw interface set type ap) 期间,您将收到如下错误
You need to run a management daemon, e.g. hostapd,
see https://wireless.wiki.kernel.org/en/users/documentation/hostapd
for more information on how to do that.
可以通过将操作模式更改为 __ap (iw interface set type __ap) 来绕过此错误。 [1]

连接到接入点

根据加密方式,您需要将无线设备与要使用的接入点关联,并传递加密密钥

  • 无加密
    # iw dev interface connect "your_essid"
  • WEP
    • 使用十六进制或 ASCII 密钥(格式会自动区分,因为 WEP 密钥具有固定长度)
      # iw dev interface connect "your_essid" key 0:your_key
    • 使用十六进制或 ASCII 密钥,将第三个设置密钥指定为默认密钥(密钥从零开始计数,可能有四个)
      # iw dev interface connect "your_essid" key d:2:your_key
  • 其他
    • iw 只能处理 WEP。 要使用其他加密方案连接,请参阅下面的 #Authentication 部分。

无论使用哪种方法,您都可以检查是否已成功关联

# iw dev interface link

身份验证

本文或本节需要扩充。

原因: 添加 机会无线加密 (OWE) 又名增强开放。 警告不要使用 WEP 和开放网络。 (在 Talk:Network configuration/Wireless 中讨论)

Linux 上 Wi-Fi 身份验证主要有两种选择:wpa_supplicantiwd

WPA2 个人版

WPA2 个人版,又名 WPA2-PSK,是 Wi-Fi Protected Access 的一种模式。

您可以使用 wpa_supplicantiwd 验证到 WPA2 个人版网络的身份,或使用 网络管理器 连接。 如果您仅验证了到网络的身份,那么要获得功能齐全的连接,您仍然需要 手动 或使用 DHCP 客户端分配 IP 地址和路由。

WPA2 企业版

WPA2 企业版Wi-Fi Protected Access 的一种模式。 它提供比 WPA2 个人版 更好的安全性和密钥管理,并支持其他企业类型的功能,例如 VLAN 和 NAP。 但是,它需要一个外部身份验证服务器,称为 RADIUS 服务器,来处理用户的身份验证。 这与个人模式形成对比,个人模式除了无线路由器或接入点 (AP) 之外不需要任何东西,并且对所有用户使用单个密码或口令。

企业模式允许用户使用用户名和密码和/或数字证书登录 Wi-Fi 网络。 由于每个用户都有动态且唯一的加密密钥,因此它还有助于防止用户之间在无线网络上进行窥探,并提高加密强度。

本节介绍 网络客户端 的配置,以连接到具有 WPA2 企业版模式的无线接入点。 有关设置接入点本身的信息,请参阅 Software access point#RADIUS

注意: 企业模式需要更复杂的客户端配置,而个人模式仅需要在提示时输入密码。 客户端可能需要安装服务器的 CA 证书(如果使用 EAP-TLS,则还需要每个用户的证书),然后手动配置无线安全和 802.1X 身份验证设置。

有关协议的比较,请参阅以下 表格

警告: 可以使用 WPA2 企业版而不让客户端检查服务器 CA 证书。 但是,您应该始终寻求这样做,因为如果不验证接入点的身份,连接可能会受到中间人攻击。 这可能会发生,因为虽然连接握手本身可能是加密的,但最广泛使用的设置以纯文本或容易破解的 #MS-CHAPv2 传输密码本身。 因此,客户端可能会将密码发送到恶意接入点,然后该接入点代理连接。

MS-CHAPv2

需要使用 PEAP 进行 MSCHAPv2 类型 2 身份验证的 WPA2 企业版无线网络有时除了库存 ppp 软件包外,还需要 pptpclient。 但是,netctl 似乎无需 ppp-mppe 即可开箱即用。 在任何情况下,都不鼓励使用 MSCHAPv2,因为它非常容易受到攻击,尽管使用另一种方法通常不是一种选择。

eduroam

eduroam 是一项面向研究、高等教育和继续教育用户的国际漫游服务,基于 WPA2 企业版。

注意
  • 在应用本节中列出的任何配置文件之前,请先与您的机构核实连接详细信息。 示例配置文件不能保证有效或符合任何安全要求。
  • 当以未加密方式存储连接配置文件时,建议通过以 root 身份指定 chmod 600 profile 来限制对 root 帐户的读取访问权限。
  • 如果 NetworkManager 的身份验证持续失败,请尝试为 TLS 1.0 设置 phase1-auth-flags=32 或为 TLS 1.1 设置 phase1-auth-flags=64,如 [2]NetworkManager#WPA Enterprise connections fail to authenticate with OpenSSL "unsupported protocol" error 中所述。
提示: 可以使用 eduroam Configuration Assistant Tool 生成 NetworkManager 的配置。 它需要安装 pythonpython-dbus

手动/自动设置

注意: 特殊引用规则适用:请参阅 netctl.profile(5) § SPECIAL QUOTING RULES
提示: 可以通过在 WPAConfigSection 中添加行 'ca_cert="/path/to/special/certificate.cer"' 来指定自定义证书。

WPA3 个人版

WPA3 个人版,又名 WPA3-SAE,是 Wi-Fi Protected Access 的一种模式。

wpa_supplicantiwd 都支持 WPA3 个人版。

WPA3 企业版

WPA3 企业版是 Wi-Fi Protected Access 的一种模式。

wpa_supplicant(自 2:2.10-8 版本起)支持 WPA3 企业版。 请参阅 FS#65314

提示和技巧

遵守监管域

监管域 或“regdomain”用于重新配置无线驱动程序,以确保无线硬件的使用符合 FCC、ETSI 和其他组织制定的当地法律。 监管域使用 ISO 3166-1 alpha-2 国家代码。 例如,美国的监管域将为“US”,中国的监管域将为“CN”等。

监管域影响无线信道的可用性。 在 2.4GHz 频段中,美国的允许信道为 1-11,日本为 1-14,世界其他大部分地区为 1-13。 在 5GHz 频段中,允许信道的规则要复杂得多。 在任何情况下,请查阅 此 WLAN 信道列表 以获取更详细的信息。

监管域还会影响无线设备的 有效全向辐射功率 (EIRP) 的限制。 这源自发射功率/“tx power”,并以 dBm/mBm (1dBm=100mBm) 或 mW(对数刻度) 测量。 在 2.4GHz 频段中,美国和加拿大的最大值为 30dBm,欧洲大部分地区为 20dBm,世界其他地区为 20dBm-30dBm。 在 5GHz 频段中,最大值通常较低。 有关更详细的信息,请查阅 wireless-regdb(EIRP dBm 值位于每行第二组括号中)。

错误配置监管域可能很有用 - 例如,通过允许在使用其他信道拥挤时使用未使用的信道,或者通过允许增加发射功率来扩大发射器范围。 但是,不建议这样做,因为它可能会违反当地法律并对其他无线电设备造成干扰。

wireless-regdb 安装 时,内核会直接加载数据库。 为了安全起见,对于直接加载,内核应配置为 CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS 设置为 yes,以允许对数据库进行加密验证。 这对于库存 Arch 内核来说是正确的,但是如果您使用的是备用内核或编译自己的内核,则应验证这一点。 更多信息可在 本指南[死链接 2024-07-30 ⓘ] 中找到。

要配置监管域,请安装 wireless-regdb 并重新启动,然后编辑 /etc/conf.d/wireless-regdom 并取消注释相应的域。

当前监管域可以临时设置为美国,命令如下

# iw reg set US

可以使用以下命令查询

$ iw reg get
注意: 您的设备可能被设置为国家/地区代码“00”,即“世界无线电法规域”,其中包含通用设置。如果无法取消设置,请按照以下详细信息检查您的配置。

但是,设置 regdomain 可能不会更改您的设置。某些设备在固件/EEPROM 中设置了 regdomain,这决定了设备的限制,这意味着在软件中设置 regdomain 只能增加限制,而不能减少限制。例如,CN 设备可以在软件中设置为美国 regdomain,但是由于 CN 的 EIRP 最大值为 20dBm,因此该设备将无法以美国最大值 30dBm 进行传输。

例如,要查看 Atheros 设备的 regdomain 是否在固件中设置

# dmesg | grep ath:

对于其他芯片组,搜索“EEPROM”、“regdomain”或设备驱动程序的名称可能会有所帮助。

要查看您的 regdomain 更改是否成功,并查询可用信道数量及其允许的发射功率

$ iw list | grep -A 15 Frequencies:

wpa_supplicant 也可以在 /etc/wpa_supplicant/wpa_supplicant.confcountry= 行中使用 regdomain。

还可以通过添加例如 options cfg80211 ieee80211_regdom=JP 作为模块选项,来配置 cfg80211 内核模块以使用特定的 regdomain。模块选项继承自旧的法规实现,在现代内核中,它充当用户空间法规提示,就像它通过 nl80211 以及 iwwpa_supplicant 等实用程序传来一样。

Rfkill 注意事项

许多笔记本电脑都有一个硬件按钮(或开关)来关闭无线网卡;但是,网卡也可能被内核阻止。这可以通过 rfkill(8) 来处理。要显示当前状态

$ rfkill
ID TYPE      DEVICE      SOFT      HARD
 0 bluetooth hci0   unblocked unblocked
 1 wlan      phy0   unblocked unblocked

如果网卡被硬性阻止,请使用硬件按钮(开关)来解除阻止。如果网卡没有被硬性阻止,而是被软性阻止,请使用以下命令

# rfkill unblock wlan
注意: 有可能通过按下硬件按钮,网卡会从硬性阻止软性解除阻止状态变为硬性解除阻止软性阻止状态(即,无论如何,软性阻止位只是被切换)。这可以通过调整 rfkill 内核模块 的一些选项来调整。

用于切换无线网卡的硬件按钮由供应商特定的 内核模块 处理。通常,这些是 WMI 模块。特别是对于非常新的硬件型号,可能会出现最新的稳定内核尚不支持该型号的情况。在这种情况下,通常有助于在内核错误跟踪器中搜索信息,并将该型号报告给相应供应商内核模块的维护者(如果尚未报告)。

另请参阅 [3]

节电

请参阅 节电#网络接口

故障排除

本节包含一般的故障排除技巧,并非严格与驱动程序或固件问题相关。对于此类主题,请参阅下一节 #驱动程序和固件故障排除

临时互联网访问

如果您有硬件问题并且需要互联网访问,例如下载一些软件或在论坛中获得帮助,则可以利用 Android 的内置功能通过 USB 数据线共享互联网。有关更多信息,请参阅 Android 网络共享#USB 网络共享

观察日志

排除故障的良好首要措施是首先分析系统的日志文件。为了避免手动解析所有日志文件,可以打开第二个终端/控制台窗口并使用以下命令监视内核消息

# dmesg -w

同时执行操作,例如无线关联尝试。

当使用网络管理工具时,可以使用以下命令对 systemd 执行相同的操作

# journalctl -f 

通常,无线错误会伴随有特定原因代码的取消身份验证,例如

wlan0: deauthenticating from XX:XX:XX:XX:XX:XX by local choice (reason=3)

查找 原因代码 可能会提供初步提示。查看控制消息 流程图 也可能会有所帮助,日志消息将跟随其后。

本文中使用的各个工具还提供了用于更详细调试输出的选项,如果需要,可以在分析的第二步中使用这些选项。

无法获取 IP 地址

本文或本节已过时。

原因: iwconfig 已弃用,请参阅 #iw 和无线工具比较(在 talk:Network_configuration/Wireless#wireless_tools 中讨论)
  • 如果您可以为有线接口获取 IP 地址,但不能为无线接口获取 IP 地址,请尝试禁用无线网卡的节电功能(指定 off 而不是 on)。
  • 如果您由于等待载波问题而收到超时错误,则可能需要将特定设备的信道模式设置为 auto
# iwconfig wlan0 channel auto

在将信道更改为 auto 之前,请确保您的无线接口已关闭。成功更改后,您可以再次启动接口并从那里继续。

IP 地址有效但无法解析主机

如果您在可能具有强制门户的公共无线网络上,请确保从您的 Web 浏览器查询 HTTP 页面(而不是 HTTPS 页面),因为某些强制门户仅重定向 HTTP。如果这不是问题,请检查是否可以解析域名,可能需要使用通过 DHCP 广播的 DNS 服务器。

设置 RTS 和分片阈值

无线硬件默认禁用 RTS 和分片。这是两种不同的方法,以牺牲带宽为代价来提高吞吐量(即以牺牲速度为代价来提高可靠性)。这些在无线噪声或许多相邻接入点的环境中非常有用,这些环境可能会产生干扰,导致超时或连接失败。

数据包分片通过拆分大小超过分片阈值的数据包来提高吞吐量。最大值 (2346) 有效地禁用分片,因为没有数据包可以超过它。最小值 (256) 最大化吞吐量,但可能会带来显着的带宽成本。

# iw phy0 set frag 512

RTS 通过在传输大小超过 RTS 阈值的数据包之前与接入点执行握手来提高吞吐量。最大阈值 (2347) 有效地禁用 RTS,因为没有数据包可以超过它。最小阈值 (0) 为所有数据包启用 RTS,这对于大多数情况来说可能过分了。

# iw phy0 set rts 500
注意: phy0iw phy 列出的无线设备的名称。

随机断开连接

原因 #1

如果您的日志显示 wlan0: deauthenticating from MAC by local choice (reason=3) 并且您丢失了 Wi-Fi 连接,则可能是您的 Wi-Fi 网卡上的节电功能过于激进。尝试禁用无线网卡的节电功能(指定 off 而不是 on)。

如果您的网卡不支持启用/禁用节电模式,请检查 BIOS 中的电源管理选项。在 Lenovo W520 的 BIOS 中禁用 PCI-Express 电源管理解决了此问题。

原因 #2

如果您遇到频繁断开连接的情况,并且您的日志显示如下消息

ieee80211 phy0: wlan0: 在 500 毫秒后未收到来自 AP xx:xx:xx:xx:xx:xx 的探测响应,正在断开连接

尝试通过路由器的设置页面将信道带宽更改为 20MHz

原因 #3

在某些带有硬件 rfkill 开关的笔记本电脑型号上(例如,Thinkpad X200 系列),由于磨损或不良设计,开关(或其与主板的连接)可能会随着时间的推移而变得松动,当您不小心触摸开关或移动笔记本电脑时,会导致看似随机的硬性阻止/断开连接。除非您的开关是电气的并且 BIOS 提供了禁用开关的选项,否则没有软件解决方案可以解决此问题。如果您的开关是机械的(而且大多数都是),则有很多可能的解决方案,其中大多数旨在禁用开关:焊接主板或 Wi-Fi 卡上的触点,粘合或阻塞开关,使用螺母拧紧开关或完全移除它。

原因 #4

频繁断开连接或完全无法连接的另一个原因也可能是路由器不达标、路由器设置不完整、其他无线设备的干扰或信号质量差。

要排除故障,首先尝试在没有身份验证的情况下连接到路由器,并靠近路由器。如果不起作用,请重启路由器并首先尝试使用另一台设备。

如果这有效,请再次启用 WPA/WPA2,但选择固定和/或有限的路由器设置。例如

  • 如果路由器比您用于客户端的无线设备旧得多,请测试将其设置为一种无线模式是否有效。
  • 禁用混合模式身份验证(例如,仅 WPA2 与 AES,如果路由器较旧,则为 TKIP)。
  • 尝试固定/空闲信道而不是“自动”信道(可能隔壁的路由器很旧并且正在干扰)。
  • 禁用 WPS
  • 将路由器的 5 GHz 信道更改为 非 DFS(动态频率选择)信道。由于附近气象雷达的干扰,此类信道上的连接可能会被丢弃或突然切换
  • 尝试将您的客户端设置为仅 2.4 GHz,而不是让它在 5 GHz 和 2.4 GHz 之间选择它认为最好的(后者吞吐量较低,但在更长距离上提供更稳定的连接)。
  • 使用 cfg80211.cfg80211_disable_40mhz_24ghz=1 禁用 40MHz 信道带宽(吞吐量较低,但碰撞的可能性较小)。
  • 如果路由器具有服务质量设置,请检查设置的完整性(例如,Wi-Fi 多媒体 (WMM) 是可选 QoS 流量控制的一部分。错误的路由器固件可能会在设置未启用时宣传其存在)。

原因 #5

在某些无线网络适配器上(例如 Qualcomm Atheros AR9485),可能会发生带有 DMA 错误的随机断开连接

# journalctl -xb
ath: phy0: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x02000020 DMADBG_7=0x0000a400
wlp1s0: authenticate with 56:e7:ee:7b:55:bc
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 1/3)
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 2/3)
wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 3/3)
wlp1s0: authentication with 56:e7:ee:7b:55:bc timed out

一种可能的解决方法是禁用 Intel IOMMU 驱动程序 (DMA),将 intel_iommu=off 添加到内核参数 [4]

注意: Intel IOMMU 驱动程序是某些高级虚拟机功能(如 PCI 直通)所必需的。

原因 #6

如果您正在使用带有 iwlwifiiwlmvm 的设备进行无线连接,并且您的 Wi-Fi 网卡在电池供电时(可能在重启或从挂起状态恢复后)似乎消失了,则可以通过在 iwlmvm 中配置节电设置来解决此问题。

如果文件 /etc/modprobe.d/iwlmvm.conf 尚不存在,请创建它,然后将以下行添加到其中

/etc/modprobe.d/iwlmvm.conf
options iwlmvm power_scheme=1

power_scheme 设置为 1 将 iwlmvm 设置为“始终活动”。可用选项包括

描述
1 始终活动
2 平衡
3 低功耗

此修复程序在 [5] 中发现。

原因 #7

如果您的设备长时间处于非活动状态(例如文件服务器),则断开连接可能是由于节电造成的,这将阻止传入流量并阻止连接。尝试禁用接口的节电功能

# iw dev interface set power_save off

您可以创建一个 udev 规则以在启动时执行此操作,请参阅 电源管理#网络接口

原因 #8

如果您在连接到 mesh 网络(例如 Wi-Fi 6)时注意到偶尔的中断,并注意到如下消息

# journalctl -b
kernel: wlan0: disconnect from AP aa:bb:cc:dd:ee:ff for new auth to 11:22:33:44:55:66

您正在遇到漫游问题。根据您的连接方式和手头的问题,可以

由于错误的法规域而导致 Wi-Fi 网络不可见

如果计算机的 Wi-Fi 信道与用户所在国家/地区的信道不匹配,则某些范围内的 Wi-Fi 网络可能不可见,因为它们使用默认情况下不允许的无线信道。解决方案是正确配置法规域;请参阅 #遵守法规域

驱动程序和固件故障排除

本节介绍针对特定芯片组安装内核模块和固件的方法和过程,这些方法和过程与通用方法不同。

有关模块操作的一般信息,请参阅 内核模块

联发科/联咏

rt2x00

Ralink 芯片组的统一驱动程序(它取代了 rt2500rt61rt73 等)。此驱动程序自 Linux 内核 2.6.24 版本以来就已存在,您只需要为芯片加载正确的模块即可:rt2400pcirt2500pcirt2500usbrt61pcirt73usb,它们也会自动加载各自的 rt2x00 模块。

可在该项目的主页上找到模块支持的设备列表。

附加说明
  • 自内核 3.0 起,rt2x00 也包括以下驱动程序:rt2800pcirt2800usb
  • 自内核 3.0 起,过渡驱动程序 rt2860start2870sta 已被主线驱动程序 rt2800pcirt2800usb 取代 [6]
  • 某些设备有多种选项可以使用 iwpriv 进行配置。这些选项记录在 Ralink 提供的源代码 tarball 中。

rt3090

对于使用 rt3090 芯片组的设备,应该可以使用 rt2800pci 驱动程序;但是,它与此芯片组的配合效果不佳(例如,有时无法使用高于 2Mb/s 的速率)。

rt3290

内核 rt2800pci 模块可以识别 rt3290 芯片组。但是,一些用户遇到了问题,并且在这些情况下,还原到打过补丁的 Ralink 驱动程序似乎是有益的。

rt3573

2012 年推出的新芯片组。可能需要 Ralink 提供的专有驱动程序。不同的制造商使用它;请参阅Belkin N750 DB 无线 USB 适配器论坛主题。

mt7612u

2014 年推出的新芯片组,以其新的商业名称联发科发布。它是一款 AC1200 或 AC1300 芯片组。制造商在其支持页面上提供了 Linux 驱动程序。截至内核 5.5,它应该由包含的 mt76 驱动程序支持。

DFS 频道目前在 5 GHz AP 模式下不支持.

mt7921

这些联发科芯片组存在一些高延迟问题。要解决此问题,唯一的解决方案是禁用 ASPM

/etc/modprobe.d/wifi.conf
options mt7921e disable_aspm=1

此配置文件将在下次重启或使用 modprobe 重新加载模块后生效

# modprobe -r mt7921e && modprobe mt7921e

Realtek

有关 Realtek 芯片组和规格的列表,请参见 [7]

rtl8192cu

该驱动程序现在已在内核中,但许多用户报告说,尽管扫描网络可以工作,但仍无法建立连接。

8192cu-dkmsAUR 包含许多补丁;如果内核中的驱动程序无法正常工作,请尝试此驱动程序。

rtl8723ae/rtl8723be

rtl8723aertl8723be 模块包含在主线 Linux 内核中。

某些用户可能会在此卡上遇到电源管理错误。这表现为偶尔断开连接,但高级网络管理器(netctlNetworkManager)无法识别。可以通过以 root 身份运行 dmesg -w 或以 root 身份运行 journalctl -f 并查找与 powersave 和 rtl8723ae/rtl8723be 模块相关的输出来确认此错误。如果您遇到此问题,请使用 fwlps=0 内核模块参数,这应该可以防止 Wi-Fi 卡自动休眠并中断连接。

如果您的信号较差,则可能是您的设备仅连接了一个物理天线,并且天线自动选择已损坏。您可以使用 ant_sel=1ant_sel=2 内核选项强制选择天线。[8]

rtl88xxau

Realtek 芯片组 rtl8811au、rtl8812au、rtl8814au 和 rtl8821au 专为从 AC600 到 AC1900 的各种 USB 适配器而设计。一些软件包提供了各种内核驱动程序,这些驱动程序需要 DKMSdkms 软件包和已安装的内核头文件)

芯片组 软件包 注释
rtl8811au, rtl8812au, rtl8821au rtl88xxau-aircrack-dkms-gitAUR 用于 8811au、8812au 和 8821au 芯片组的 Aircrack-ng 内核模块,具有监听模式和注入支持。
rtl8812au rtl8812au-dkms-gitAUR 适用于 rtl8812au 的最新官方 Realtek 驱动程序版本。
rtl8811au, rtl8821au rtl8821au-dkms-gitAUR 适用于 rtl8821au 的较新驱动程序版本。
rtl8814au rtl8814au-dkms-gitAUR 可能也适用于 rtl8813au。

rtl8811cu/rtl8821cu

rtl8821cu-dkms-gitAUR 为 Realtek 8811cu 和 8821cu 芯片组提供内核模块。

这需要 DKMS,因此请确保您已安装正确的内核头文件。

如果即使加载了 8821cu 模块,也没有显示无线接口,您可能需要手动指定 rtw_RFE_type 内核模块参数 [9][10]。尝试例如 rtw_RFE_type=0x26,其他值也可能有效。

rtl8821ce

rtl8821ce-dkms-gitAUR 为华硕 X543UA 中发现的 Realtek 8821ce 芯片组提供内核模块。

这需要 DKMS,因此请确保您已安装正确的内核头文件。

注意:[11] 报告称,Realtek 提供的默认 rtl8821ce 模块对于 Linux 内核 ≥ 5.9 已损坏,这可能会导致连接性差。应首选上面的 AUR 版本。请参阅 GitHub 上的声明。 使用 lspci -k 检查是否正在使用默认内核驱动程序 (rtw88_8821ce)。如果是,请拉黑它并重启您的系统。

rtl8822bu

rtl88x2bu-dkms-gitAUR 为 Edimax EW7822ULC USB3、华硕 AC53 Nano USB 802.11ac 和 TP-Link Archer T3U 适配器中发现的 Realtek 8822bu 芯片组提供内核模块。

这需要 DKMS,因此请确保您已安装正确的内核头文件。

rtl8xxxu

本文或本节需要扩充。

原因: 应该说明主线模块和内核版本的具体问题。(在 Talk:Network configuration/Wireless 中讨论)

通过为特定芯片组编译第三方模块,可以解决 rtl8xxxu 主线内核模块的问题。源代码可以在 GitHub 存储库中找到。

某些驱动程序可能已在 AUR 中准备好,例如 rtl8723bu-dkms-gitAUR

RTW88

RWT88 内核模块包含在所有官方支持的 Arch Linux 内核中。支持的设备数量随着时间的推移而增长,如果配置和编译正确,目前它支持大多数 RTW88 芯片设备。

截至 Linux 6.10.3,该驱动程序支持:882BE(可能)、8703B、8723CS、8723D、8723DE、8723DS、8723DU、8723X、8821C、8821CE、8821CS、8821CU、8822B、8822BE、8822BS、8822BU、8822C、8822CE、8822CS、8822CU。

要获取更新的列表,请在 linuxconfig 中 Ctrl+F 搜索 CONFIG_RTW88_,或查看 wireless-next 上游

请确保 wireless-regdom 已配置。否则,您将能够看到所有 Wi-Fi 网络,但将无法连接。树外驱动程序 rtl88x2bu-dkms-gitAUR 可以在没有此类配置的情况下连接,因此在从它切换时设置监管域非常重要。

以下是在 dmesg 中的症状

[ +13.369951] wlan0: send auth to *WiFi_AP_mac* (try 1/3)
[  +0.000685] wlan0: authenticated
[  +0.000449] wlan0: associate with *WiFi_AP_mac* (try 1/3)
[  +0.000866] wlan0: RX AssocResp from *router_mac* (capab=0x1011 status=0 aid=2)
[  +0.323058] wlan0: associated
[  +0.000046] wlan0: deauthenticating from *WiFi_AP_mac* by local choice (Reason: 3=DEAUTH_LEAVING)

以及在 iwd 日志中

event: state, old: autoconnect_full, new: connecting
event: connect-timeout, reason: 0
event: connect-failed, status: 1

RTW89

RTW89 内核模块已合并到上游内核中,并为更新的 Realtek 无线芯片组提供支持。

此驱动程序支持:8852AE、8851BE、8852BE 和 8852CE。

在某些计算机上,您可能会遇到连接不稳定的情况。这似乎是 HP 和联想后期型号上的常见问题。尝试使用以下配置禁用与 ASPM 相关的功能。

/etc/modprobe.d/70-rtw89.conf
options rtw89_pci disable_aspm_l1=y disable_aspm_l1ss

参见

Atheros

对于使用 Atheros 芯片组的设备,有不同的驱动程序

  • ath5k 是取代过时的 madwifi 驱动程序的驱动程序。目前对于某些芯片组来说是更好的选择,但并非所有芯片组都受支持(见下文)。
  • ath9k 旨在用于较新的 Atheros 芯片组。所有具有 802.11n 功能的芯片都受支持。
  • ath12k 是 Qualcomm Wi-Fi 7 (IEEE 802.11be) 设备的 Linux 驱动程序。ath12k 使用 mac80211。

还有一些其他驱动程序用于某些 Atheros 设备。有关详细信息,请参阅 Linux Wireless 文档

ath5k

外部资源

如果您发现网页随机加载速度非常慢,或者设备无法租用 IP 地址,请尝试通过加载带有 nohwcrypt=1 选项的 ath5k 模块,从硬件加密切换到软件加密。有关详细信息,请参阅 内核模块#设置模块选项

某些笔记本电脑的无线 LED 指示灯可能会出现红蓝色闪烁的问题。要解决此问题,请执行以下操作

# echo none > /sys/class/leds/ath5k-phy0::tx/trigger
# echo none > /sys/class/leds/ath5k-phy0::rx/trigger

有关替代方案,请参阅 此错误报告

ath9k

外部资源

自 Linux 3.15.1 起,一些用户一直遇到带宽下降的问题。在某些情况下,可以通过为 ath9k 模块设置 nohwcrypt=1 内核模块参数 来解决此问题。

注意: 使用命令 lsmod 查看正在使用的模块,如果 ath9k 的名称不同(例如 ath9k_htc),请进行更改。
节电

尽管 Linux Wireless 表示,对于比 AR9280 更新的 Atheros ath9k 单芯片,动态节能已启用,但对于某些设备(例如 AR9285),powertop 可能仍会报告节能已禁用。在这种情况下,请手动启用它。

在某些设备(例如 AR9285)上,启用节能可能会导致以下错误

# iw dev wlan0 set power_save on
command failed: Operation not supported (-95)

解决方案是为 ath9k 模块设置 ps_enable=1 内核模块参数

Intel

iwlegacy

iwlegacy 是 Intel 3945 和 4965 无线芯片的无线驱动程序。固件包含在 linux-firmware 软件包中。

udev 应该会自动加载驱动程序,否则请手动加载 iwl3945iwl4965。有关详细信息,请参阅 内核模块

如果您在连接网络时遇到问题(例如,启动时卡随机失败或链接质量非常差),请尝试禁用 802.11n

/etc/modprobe.d/iwl4965.conf
options iwl4965 11n_disable=1

iwlwifi

iwlwifi 是 Intel 当前无线芯片(例如 5100AGN、5300AGN 和 5350AGN)的无线驱动程序。请参阅支持设备的完整列表

如果您在连接网络时遇到问题或链接质量非常差,请尝试禁用 802.11n,并可能启用软件加密

/etc/modprobe.d/iwlwifi.conf
options iwlwifi 11n_disable=1 swcrypto=1

如果您遇到上行速度缓慢的问题,您可以尝试禁用无线适配器的节能

如果您有 802.11ax (Wi-Fi 6) 接入点并且在检测信标时遇到问题或连接不可靠,请查看 Intel 文章 54799

注意: 使用 11n_disable=1 也会阻止 802.11ac,并且只允许使用较慢的协议(5GHz 频段中的 802.11a 或 2.4 GHz 频段中的 802.11b/g)进行连接。
蓝牙共存

如果您在连接蓝牙耳机和保持良好的下行速度时遇到困难,请尝试禁用蓝牙共存

/etc/modprobe.d/iwlwifi.conf
options iwlwifi bt_coex_active=0
注意: 自内核版本 5.8 起,已为 iwlmvm 内核模块处理的硬件禁用了 bt_coex_activesw_crypto 模块选项。对于 iwldvm 模块处理的旧硬件,这些选项仍然启用。
固件问题

您可能会遇到驱动程序输出堆栈跟踪和错误的问题,这可能会导致一些卡顿。

# dmesg
Microcode SW error detected.  Restarting 0x2000000.

或者,您可能只是遇到各种各样的问题(例如,5GHz 连接问题、随机断开连接、恢复后无连接)。

要确认它是否是问题的原因,请降级软件包 linux-firmware

如果已确认,请移动有问题的固件文件,以便加载旧版本(以便能够拥有最新的 linux-firmware,因为它不仅为您的 Intel Wi-Fi 卡提供固件更新)

# for i in {64..73} ; do mv /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz.bak ; done

为了避免在每次更新后手动重复这些步骤,请在 pacman.conf 中使用带有通配符的 NoExtract 数组来阻止其安装。

从 Windows 启动后适配器未检测到

如果在 Windows 中完成会话后未检测到 Wi-Fi 适配器,则可能是由于默认启用的 Windows 快速启动功能所致。尝试禁用快速启动iwlwifi 内核驱动程序 wiki 有一个关于此问题的条目

禁用 LED 闪烁

注意: 这适用于 iwlegacyiwlwifi 驱动程序。

模块的默认设置是在活动时 LED 闪烁。有些人觉得这非常烦人。要使 LED 在 Wi-Fi 活动时保持常亮,您可以使用 systemd-tmpfiles

/etc/tmpfiles.d/phy0-led.conf
w /sys/class/leds/phy0-led/trigger - - - - phy0radio

运行 systemd-tmpfiles --create phy0-led.conf 以使更改生效,或重启。

要查看此 LED 的所有可能的触发值

# cat /sys/class/leds/phy0-led/trigger
提示: 如果您没有 /sys/class/leds/phy0-led,您可以尝试使用 led_mode="1" 模块选项。它应该对 iwlwifiiwlegacy 驱动程序都有效。

Broadcom

请参阅 Broadcom 无线

其他驱动/设备

Tenda w322u

将此 Tenda 网卡视为 rt2870sta 设备。请参阅 #rt2x00

orinoco

这应该是内核软件包的一部分,并且应该已经安装。

一些 Orinoco 芯片组是 Hermes II。您可以使用 wlags49_h2_cs 驱动程序代替 orinoco_cs 并获得 WPA 支持。要使用该驱动程序,请先 禁用 orinoco_cs

prism54

驱动程序 p54 已包含在内核中,但您必须从 此站点 下载适用于您网卡的固件,并将其安装到 /usr/lib/firmware 目录中。

注意: 还有一个较旧的、已弃用的驱动程序 prism54,它可能与较新的驱动程序 (p54pcip54usb) 冲突。请务必 禁用 prism54

zd1211rw

zd1211rw 是 ZyDAS ZD1211 802.11b/g USB WLAN 芯片组的驱动程序,它包含在最新版本的 Linux 内核中。有关支持的设备列表,请参阅 [12]。您只需要 安装 设备固件,该固件由 zd1211-firmwareAUR 软件包提供。

hostap_cs

Host AP 是一个 Linux 驱动程序,用于基于 Intersil Prism2/2.5/3 芯片组的无线 LAN 网卡。该驱动程序包含在 Linux 内核中。

注意: 请务必 禁用 orinoco_cs 驱动程序,它可能会导致问题。

ndiswrapper

Ndiswrapper 是一个包装脚本,允许您在 Linux 中使用一些 Windows 驱动程序。您将需要 Windows 驱动程序中的 .inf.sys 文件。

提示: 如果您需要从 .exe 文件中提取这些文件,可以使用 cabextract

按照以下步骤配置 ndiswrapper。

  1. 安装 ndiswrapper
  2. 将驱动程序安装到 /etc/ndiswrapper/
    # ndiswrapper -i filename.inf
  3. 列出 ndiswrapper 的所有已安装驱动程序
    $ ndiswrapper -l
  4. 让 ndiswrapper 将其配置写入 /etc/modprobe.d/ndiswrapper.conf
    # ndiswrapper -m
    # depmod -a

ndiswrapper 的安装即将完成;您可以 在启动时加载模块

测试 ndiswrapper 现在是否会加载

# modprobe ndiswrapper

请参阅 网络配置#列出网络接口 以更确信无线接口现在存在。

如果您遇到问题,可以在以下位置获得一些帮助:ndiswrapper howtondiswrapper FAQ

参见