網絡配置/無線網絡配置 - Arch Linux 中文维基

跳至內容

# 網絡配置/無線網絡配置

出自 Arch Linux 中文维基
< 网络配置
翻譯狀態：

- 本文（或部分內容）譯自 Network configuration/Wireless，最近一次同步於 2023-01-20，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- 網絡配置
- 軟AP
- Ad-hoc networking
- Internet sharing
- 無線網絡綁定
- Network Debugging
- Bluetooth

網絡配置的主頁面是網絡配置。

配置無線網絡一般分兩步：第一步是識別硬體、安裝正確的驅動程序並進行配置，安裝盤中已經包含驅動，但是通常需要額外安裝；第二步是選擇一種管理無線連接的方式。這篇文章涵蓋了這兩方面，並提供了無線管理工具的連結地址。

#iw 段落描述了如何使用 iw包 來手動管理你的網絡接口/無線區域網連接。網絡配置#網絡管理器段落介紹了幾個可以自動管理您無線網絡接口的程序。這些程序中的某些會包含一個圖形界面，而所有的程序都支持網絡配置文件（在頻繁切換網絡時有用，比如使用筆記本電腦的場合）。

## 設備驅動

默認的 Arch Linux 內核是模塊化的，硬體的設備驅動作為內核模塊保存在硬碟上。啟動時，udev 會根據硬體加載不同的驅動模塊，從而允許創建網絡接口。

除了相應的驅動程序之外，某些無線晶片組還需要固件。linux-firmware包 提供了很多固件，然而專有固件並不包含在內，需要另行安裝。這部分指南請參考 #安裝 driver/firmware。

注意：如果 udev 在啟動時未加載正確的模塊，只需 手動加載 即可。 如果 udev 為一台設備加載多個驅動程序，則產生的衝突可能會導致配置失敗。 確保將不需要的模塊加入 黑名單。

### 檢查驅動狀態

根據設備的連接方式是 PCI(e) 或 USB，對應地執行 `lspci -k` 或 `lsusb -v` 可以檢查設備驅動是否已經加載：

    $ 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 權限執行 `grep usbcore` 的輸出應當類似於 `usbcore: registered new interface driver rtl8187`。

If you do not see the card at all, it may not be seated/plugged in properly in its PCI(e) slot/USB port. Try re-plugging it in.

同時也要通過 `ip link` 命令來查看無線接口是否已經創建。通常來說，設備名以字母「w」開頭，例如`wlan0` 或 `wlp2s1`。確認之後，使用以下命令使設備上線：

    # ip link set <设备名> 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

如果需要的內核模塊已經加載且網絡接口已經上線，您可以跳過下一節的內容。

### 安裝驅動程序/固件

根據獲得的信息，在下面網址查找硬體支持：

- 參閱表格 Linux 支持的無線驅動並轉到特定驅動程序頁面，其中包含受支持設備的列表。
- Ubuntu Wiki 維護了一個設備被內核和用戶空間驅動支持狀況的列表。
- Linux 無線支持頁面和硬體兼容性列表(HCL)也維護了一個內核友好的設備列表。

注意有些廠商的產品名稱相同，實際使用的晶片組卻不同。usb-id (USB設備) 或 pci-id (PCI設備)才是唯一識別名稱。

如果您在上述列表裡找到了您的無線網卡，請按照驅動與固件排錯中的指示操作，這一節中包含有關安裝某些特定無線網卡所需的驅動程序和固件的信息。完成後，再次檢查驅動程序狀態。

如果您的上述列表裡沒有找到您的無線網卡，那麼大概率您的網卡僅在windows作業系統下受支持。對於這些設備，您可以嘗試使用 #ndiswrapper。

## 工具

同其他網絡設備一樣，無線網絡接口可以通過 iproute2包 包提供的 ip 命令來管理。

管理一個無線網絡連接需要一套基本的工具。可以使用一個網絡管理器或直接使用以下表格中的一個：

軟體 | 軟體包 | WEXT | nl80211 | WEP | WPA/WPA2/WPA3 | Archiso [1]
--- | --- | --- | --- | --- | --- | ---
wireless_tools1 | wireless_tools包 | 是 | 否 | 是 | 否 | 是
iw | iw包 | 否 | 是 | 是 | 否 | 是
wpa_supplicant | wpa_supplicant包 | 是 | 是 | 否 | 是 | 是
iwd | iwd包 | 否 | 是 | 否 | 是 | 是

1. 過時，不推薦使用.
2. 一些老驅動只支持WEXT

### iw 與 wireless_tools 的對比

下面表格給出了 `iw` 和 `wireless_tools` 命令的對比（更多示例參閱這裡）。

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 | 用16進制密匙連接到 WEP 加密網絡。
iw dev wlan0 connect your_essid key 0:your_key | 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`, 您想要連接到的WiFi接入點名稱是 `your_essid`。請將這兩個欄位作相應替換。

### 獲取接口名

提示：更多關於 iw 工具的示例，請查看 官方文檔 。

獲取您無線網卡的名稱，運行：

    $ iw dev

接口的名稱會在 "Interface" 單詞後顯示。比如，常見的無線網卡設備名是 `wlan0`。

### 檢查連接狀態

用下面的命令檢查連接狀態:

    $ iw dev interface link

### 獲取統計數據

獲取一些統計數據，比如上傳下載的數據量，信號強度等：

    $ iw dev interface station dump

#### 激活接口

提示：通常不需要執行此步驟。

一些無線網卡在使用 `iw` 或 `wireless_tools`前需要先激活內核接口：

    # ip link set interface up

注意：如果出現錯誤 `RTNETLINK answers: Operation not possible due to RF-kill`, 請確保硬體開關已經打開。參閱 #Rfkill 說明。

如果出現錯誤 `RTNETLINK answers: Operation not possible due to RF-kill`, 請確保硬體開關已經打開。參閱 #Rfkill 說明。

要驗證接口確實打開：

    $ 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 doesn't support scanning"，可能是忘了安裝固件。有時不以 root 運行 `iwlist` 也會產生這個問題。無線網絡也可能被軟鎖定，請運行 `rfkill list all` 進行檢查。

提示：Depending on your location, you might need to set the correct regulatory domain in order to see all available networks.

需要關注的信息:

- SSID: 網絡的名稱.
- Signal: 用 dbm (-100 to 0) 報告的無線信號強度。數值越接近零，信號越好。觀察高質量連接和低質量連接的數值差異可以了解設備的信號範圍。
- Security: 沒有直接報告, 檢查 `capability` 開頭的行，如果有 `Privacy` 信息，例如 `capability: ESS Privacy ShortSlotTime (0x0411)`, 表示網絡具有某種程度的保護，
  - 如果有 `RSN` 信息，網絡被 Robust Security Network(WPA2) 協議保護。
  - 如果有 `WPA` 信息，網絡被 Wi-Fi Protected Access 協議保護。
  - 在 `RSN` 和 `WPA` 信息塊中，可能看到如下信息：
    - Group cipher: 數值包括 TKIP, CCMP, both, others.
    - Pairwise ciphers: 數值包括 TKIP, CCMP, both, others. 可能和 Group cipher 數值不同.
    - Authentication suites: 數值包括 PSK, 802.1x, others. 家用路由器通常可以看到 PSK (i.e. 密碼). 在大學中，通常會連結到需要登錄名和密碼的 802.1x 網絡。需要知道其使用的密碼管理方式(例如 EAP), 封裝方法 (例如 PEAP). 詳情請參考這裡和這裡.
  - 如果沒有看到 `RSN` 或 `WPA`，但是看到了 `Privacy`, 表示使用的是 WEP.

### 運行模式

設置無線網卡的操作模式，如果連接到漫遊網絡，需要設置操作模式為 ibss

    # iw dev interface set type ibss

注意：有些網卡需要先關閉無線接口(`ip link set interface down`)才能修改模式。

### 連接到接入點

根據加密方式不同，需要使用密碼將無線設備關聯到接入點。

假設要使用的接入點 ESSID 為 `MyEssid`:

#### 無加密

    # iw dev interface connect "your_essid"

#### WEP

使用十六進制或 ASCII 密碼(格式是自動識別出來的，因為 WEP 密碼長度是固定的):

    # iw dev interface connect "your_essid" key 0:your_key

使用十六進制或 ASCII 密碼，第三個是默認 (從0計數，共四個):

    # iw dev interface connect "your_essid" key d:2:your_key

#### 其它

- - iw 只能處理 WEP。要使用其他加密方案登錄, 請查看下文中的 #認證章節。

無論您使用什麼認證方法，都可以使用以下命令來確認連接是否成功：

    # iw dev interface link

## 認證

### WPA2 個人模式

WPA2 個人（模式）, 又名 WPA2-PSK, 是一種 受保護Wi-Fi訪問（Wi-Fi存取保護）的模式。

您可以通過 wpa_supplicant 或 iwd 來連接, 或者直接使用網絡管理器. 如果您只進行了認證，那麼要獲取功能齊全的連接，您仍然需要進行手動連接或使用 DHCP 客戶端。

### WPA2 企業模式

WPA2 企業模式也是一種 受保護Wi-Fi訪問（Wi-Fi存取保護）的模式，提供了比 WPA2 個人版更好的安全性和密鑰管理，並支持其他的企業型功能，例如 VLAN 和 NAP。然而，與個人模式不同，此種加密需要額外的 RADIUS 認證伺服器來處理用戶的認證。個人模式不需要除無線路由器/接入點以外的設備，對所有用戶也只要求一個密碼或密碼短語。

企業模式允許用戶使用用戶名和密碼或者數字證書來登錄 Wi-Fi。因為每個用戶都擁有一個動態唯一的加密密碼，因此企業模式可以防止通過無限網絡的用戶探聽，並提高加密強度。

本章節描述如何使用網絡管理器來連接到使用 WPA2 企業模式的無線接入點。

查看軟體接入點#RADIUS 來獲取關於設置接入點自身的相關信息。

注意：企業級加密模式需要更複雜的客戶端配置，個人模式則只需要在出現提示時輸入密碼。客戶端可能需要安裝伺服器的 簽名證書(CA certificate)，如果使用 EAP-TLS, 則另需要為每個用戶安裝證書，再手動配置無線安全和 802.1X 認證設置。

協議間的對照可以參照此表格。

警告：您可以讓客戶端在使用WPA2企業級時不檢查伺服器的授權證書。然而，您在任何情況下都該盡最大努力來配置證書，因為如果不驗證接入點，連接可能遭受中間人攻擊。雖然連接握手可能是加密的，但最常見的密碼傳輸配置會將密碼用明文或易於破解的MS-CHAPv2協議協議進行傳輸。因此，客戶端可能會將密碼發送到代理連接的惡意接入點。

#### MS-CHAPv2

有時，除了原配的 ppp包 (Point-to-Point Protocol) 之外，要求 MSCHAPv2 type-2 with PEAP 的 WPA2 企業級接入點有時會需求 pptpclient包。netctl包 似乎能在缺少 ppp-mppe 的情況下開箱即用。雖然其他認證實現方式通常都並不可用，由於其高度脆弱的特性，用戶在任何情況下都不被鼓勵使用 MSCHAPv2。

#### eduroam

eduroam 是一項面向科研，高等教育與繼續教育領域人員的國際漫遊服務。

注意：* 在應用本章節列出的任何配置之前，首先向您的機構確認連接的詳細信息。示例配置不保證任何安全性或者匹配任何安全需求。

- 存儲未加密的連接配置文件時，建議用 root 用戶運行以下命令以限制 root 帳戶對此文件的的讀取訪問權限: `chmod 600 配置文件`

提示：針對 NetworkManager 的配置可以用 eduroam 配置助手工具 來生成。 此工具需要安裝 python包 與 dbus-python包 。

#### 手動/自動配置

- wpa_supplicant 可以直接通過其配置文件或使用其 CLI/GUI 前端進行配置，並與 DHCP 客戶端結合使用。 請參閱`/usr/share/doc/wpa_supplicant/wpa_supplicant.conf` 中的示例來結合您的詳細連接信息。
- iwd#WPA Enterprise
- NetworkManager 可以使用 nmcli 或 graphical front ends 來創建 WPA2 企業級配置文件。nmtui 不支持此功能 (NetworkManager issue 376), 但可以使用現有配置。
- ConnMan 需要在連接至網絡之前配置一個單獨的配置文件。詳情請參閱 connman-service.config(5) 和 ConnMan#連接到 eduroam (802.1X)。
- netctl 可以通過填寫配置中的`WPAConfigSection=` 欄位來支持 wpa_supplicant 配置文件。詳情請參閱 netctl.profile(5)。

  注意：特殊引用規則適用: 參考 netctl.profile(5) § SPECIAL QUOTING RULES.
  提示：自定義證書可通過在 `WPAConfigSection` 中添加欄位 `'ca_cert="/path/to/special/certificate.cer"'` 來配置。

### WPA3 個人

WPA3 Personal, 又名 WPA3-SAE, 是一種 受保護Wi-Fi訪問（Wi-Fi存取保護）的模式。

wpa_supplicant 及 iwd 都支持 WPA3 個人認證模式。

### WPA3 企業模式

WPA3 企業模式 是一種 受保護Wi-Fi訪問（Wi-Fi存取保護）的模式。

wpa_supplicant (自版本起 2:2.10-8) 支持 WPA3 企業模式。 參見 FS#65314。

## 提示和技巧

### 遵循監管區域要求

監管區域用於配置無線驅動，確保對無線硬體的使用符合由 FCC、ETSI 及其他組織制定的當地法規。監管區域使用ISO 3166-1二位字母國家代碼。例如，美國的監管區域代碼是「US」，中國則是「CN」，等等。

監管區域影響無線信道的可用性。在2.4GHz波段，美國允許使用1-11信道，日本是1-14，世界上多數其它地區則是1-13。在5GHz波段，允許使用信道的規則要複雜得多。這兩種情況的更詳細信息見這一WLAN信道列表。

監管區域也影響對來自無線設備的等效各向同性輻射功率（EIRP）所作的限制。這衍生自發射功率（tx power）並以dBm/mBm（1dBm=100mBm）或mW（對數尺度）衡量。在2.4GHz波段，美國和加拿大最大限制30dBm，歐洲大部分是20dBm，世界上其他地區則是20dB-30dBm。在5GHz波段，最大值通常更低。更詳細的信息請參考 wireless-regdb（EIRP dBm 值在每行第二對括號裡）。

錯誤設置監管區域可能會有用——例如，在其他信道擁擠時可以使用未用信道，或者提升發射功率以擴大傳輸範圍。然而不推薦這種做法，因為可能會違反當地法規以及造成與其他無線電設備的干擾。

要配置監管區域，安裝 crda包[損壞的連結：replaced by wireless-regdb包] 並重啟（以重新加載 `cfg80211` 模塊及所有相關驅動）。檢查啟動日誌以確認 `cfg80211` 正在調用CRDA：

    # dmesg | grep cfg80211

以下命令可將當前監管區域設為美國：

    # iw reg set US

用以下命令查詢：

    $ iw reg get

注意：

- 你的設備國家代碼可能為「00」，它是包含了通用設置的「世界監管區域」。如果無法解除此設置，則CRDA可能配置有誤。
- 根據 CRDA 的 README，從內核版本4.15開始就不再需要它，因為內核會自動從固件加載監管資料庫。然而也有說法稱這一加載操作需要特定的內核設置。

然而設置監管區域可能不會改變您的設置。有些設備在固件/EEPROM中設置了一個監管區域，為設備規定了限制，這意味著通過軟體設置監管區域只能增加限制而不能減少。例如，一個 CN（中國）設備可以用軟體設置為 US（美國）監管區域，但由於中國的 EIRP 最大值為20dBm，設備將無法以美國的最大值30dBm進行發射。

例如，查看一個 Atheros 設備的固件中是否設置了監管區域：

    # dmesg | grep ath:

對於其他晶片組，搜索「EEPROM」、「regdomain」或設備驅動的名字可能會有用。

要查看監管區域更改是否成功，以及查詢可用信道數和允許發射功率：

    $ iw list | grep -A 15 Frequencies:

監管區域的持久設置可以通過編輯 `/etc/conf.d/wireless-regdom` 並解除相應區域的注釋實現。 `wpa_supplicant` 也可以在 `/etc/wpa_supplicant/wpa_supplicant.conf` 中的 `country=` 行應用監管區域。

也可以通過添加模塊參數（如 `options cfg80211 ieee80211_regdom=EU`），配置 cfg80211 內核模塊，從而使用指定的監管區域。然而這是一種老舊的監管實現。

更多信息請閱讀 wireless.kernel.org 監管文檔。

### Rfkill 說明

許多筆記本都有一個硬體按鈕或開關用於關閉無線網卡，然而無線網卡也可以通過內核來屏蔽。這一任務可由 rfkill 處理。顯示當前狀態：

    $ rfkill

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

如果網卡處於硬體屏蔽（hard-blocked）狀態，請使用硬體按鈕或開關來開啟它。 如果無線網卡並沒有被硬體屏蔽但處於軟體屏蔽（soft-blocked），請使用以下命令：

    # rfkill unblock wifi

注意：按下硬體按鈕可能會讓無線網卡從硬體屏蔽，軟體未屏蔽狀態變為硬體未屏蔽，軟體屏蔽狀態。 可以通過調整 `rfkill` 內核模塊的一些選項改變這一現象。

切換無線網卡的硬體按鈕是廠商專用的內核模塊處理的，經常是 WMI 模塊。特別是非常新的硬體型號，可能還沒有得到最新穩定內核的完全支持。這種情況下，在內核 bug 跟蹤系統搜索信息，並將型號報告給對應廠商內核模塊的維護者（如果還沒有報告的話）經常會有幫助。

參見 https://askubuntu.com/questions/62166/siocsifflags-operation-not-possible-due-to-rf-kill 。u

### 節能

見電源管理#網絡接口。

## 排錯

這個單元包含一般性的錯誤排除提示, 目的並非是排除與設備或固件驅動有關的錯誤。 對於驅動與固件上的問題, 請看 #驅動與固件排錯.

### 臨時上網

如果您的網絡設備出了問題但需要網絡訪問，例如， 下載一些軟體或向社區尋求幫助， 您可以利用安卓的內置功能來通過USB埠共享網絡。 詳見 Android Tethering#USB tethering。

### 觀察日誌文件

分析系統日誌文件是排錯的良好切入點。在進行操作（如嘗試連接到無線網絡）的同時，打開第二個終端/控制台窗口並用以下命令監看內核消息：

    # dmesg -w

這樣，您就不需要手動一行一行的瀏覽這些消息了。

當您使用網絡管理器時，同樣的，可以用 systemd 提供的日誌命令：

    # journalctl -f

通常來說，無線網絡錯誤都伴隨著具有特定理由代碼（reason code）的取消驗證（deauthentication）。例如：

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

對照原因代碼表可能會給出解決問題的第一個提示。

### 獲取IP位址失敗

本文或本章節的事實準確性存在爭議。

原因： The dhcpcd包 vs dhclient包 is mostly FUD.（在 Talk:網絡配置/無線網絡配置 中討論）

本文或本節內容已經過時。

原因： iwconfig 被棄用了, 詳見 #iw and wireless tools comparison. (在Talk:網絡配置/無線網絡配置討論)

- 如果用 dhcpcd包 客戶端獲取ip地址反覆多次均失敗, 嘗試安裝並使用 dhclient包 。不要忘記在連接管理器中選擇 dhclient 作為首選DHCP客戶端

- 如果你使用有線接口可以獲得IP位址而無線接口不能， 嘗試禁用無線網卡的省電功能(指定 `off` 而非 `on`).

- 如果由於等待網絡連接而導致超時錯誤，可能要將特定網卡設備的信道模式改為自動: `auto`

    # iwconfig wlan0 channel auto

在將wifi信道更改為自動之前，請確保無線接口已關閉。成功地更改後，再次打開無線接口並繼續。

### IP位址有效但無法接解析主機名

如果你正在使用公共無線網絡，可能會有認證門戶, 確保在瀏覽器查詢認證頁面時使用HTTP 而不是HTTPS, 因為有些認證門戶會重定向到HTTP. 如果不是這個導致的問題, 檢查你是否可以解析域名, 可能有必要使用通過DHCP方式得到的DNS伺服器。

### 設置 RTS 和靜態幀分段閾值

無線網卡默認禁用了 RTS 和 分段機制 。這兩種方法都以犧牲帶寬來換取吞吐量 (i.e. 以速度為代價提高可靠性)。在由於無線干擾和有多個相鄰接入點，從而導致連接超時或失敗的環境中，這兩個設置非常有用。

數據包分段通過將超過閾值的包分割，從而提高吞吐量。最大值（2346）實際上禁用了分段，因為沒有任何包可以超過這個值，最小值（256）最大化了吞吐量，但帶寬成本很會大。

    # iw phy0 set frag 512

RTS 通過在與接入點傳輸超過RTS閾值的分組之前來進行握手，從而提高吞吐量。最大值（2347）實際上禁用了RTS，沒有分組可以超過這個值。最小值（0）意味著所有分組都啟用RTS，但這很極端。

    # iw phy0 set rts 500

注意：`phy0` 是用`iw phy` 命令 列舉出的無線網卡的名稱

### 隨時可能斷開連接

#### Cause #1

如果你在日誌裡看到：`wlan0: deauthenticating from MAC by local choice (reason=3)` 並且 Wi-Fi 斷開連接, 很可能是你的無線網卡的電源節能設置太激進。嘗試禁用無線網卡的省電功能。

如果你的網卡不支持 啟用/禁用 節能模式, 看看 BIOS 的電源管理選項。 比如，在 聯想 W520 的BIOS中禁用PCI-Express電源管理就解決了這個問題。

#### Cause #2

如果你經常斷連，並且在日誌看到如下信息：

`ieee80211 phy0: wlan0: No probe response from AP xx:xx:xx:xx:xx:xx after 500ms, disconnecting`

在你路由器設置面板裡把頻道帶寬改成 `20MHz` 。

#### Cause #3

有些筆記本有硬體 rfkill 開關（如Thinkpad X200系列），因為磨損或有問題，開關（或與主板的連接）可能會隨時間的推移而變松，不小心觸摸開關或移動電腦時就可能出現斷連。這問題沒有軟體解決方案，除非開關是電子式的，BIOS提供了禁用開關的選項。如果開關是機械式的（大部分機型都是），就有很多解決方案，其中大多數都是要禁用開關：在主板/無線網卡上的接觸點進行焊接，用膠水封堵或阻擋，使用螺絲來擰緊開關，或者直接拆除開關。

#### Cause #4

導致隨時斷連或完全無法連接的其他原因，比如路由器質量差，配置不完整，其他無線設備干擾，或信號質量差。

為了排錯, 首先要靠近路由器，並且在不需要身份驗證的情況下進行連接

如果有效，那重新啟用 WPA/WPA2 ，但是選擇固定/有限的路由器配置，比如：

- 如果路由器比你用的無線設備客戶端老的多，把路由器設置為單一無線模式進行測試。
- 禁用混合驗證模式 ，(e.g. 只啟用 WPA2 with AES, o如果是老路由器，則是TKIP)
- 使用固定頻道而不是自動頻道 (因為附近的路由器可能老舊而且存在干擾)
- 禁用 WPS
- 把路由器的 5 GHz 頻道切換為 non-DFS (Dynamic Frequency Selection) 頻道. 在這種頻道的連接突然被丟棄或者切換，這是因為附近天氣雷達的干擾。
- 只使用2.4 GHz ，而不是自動在 5 GHz 和2.4 GHz 切換。 (後者吞吐量低，但是遠距離連接更穩定)
- 禁用 `40MHz` 頻道帶寬 (吞吐量低，但衝突更少) ，用`cfg80211.cfg80211_disable_40mhz_24ghz=1`
- 如果路由器有 Qos功能, 檢查設置的完整性。(e.g. Wi-Fi 多媒體 (WMM) 是 QoS 流控制中可選的功能， 損壞的路由器固件可能會表明他已經存在，即使沒有啟用這個功能)

#### Cause #5

對於一些無線網卡適配器 (e.g. 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 driver (DMA), 把`intel_iommu=off` 加入 kernel parameters [2].

注意：Intel IOMMU 驅動對於一些高級虛擬機功能是必需的，如PCI直通。

#### Cause #6

如果你用的是帶 `iwlwifi` 或 `iwlmvm` 的設備進行無線連接，使用電池電源的時候，無線網卡似乎消失了，（可能是重啟或從休眠中恢復後），可以通過 iwlmvm 裡的節能模式設置修復。

創建 `/etc/modprobe.d/iwlmvm.conf` ，再添加以下行：

    /etc/modprobe.d/iwlmvm.conf

    options iwlmvm power_scheme=1

`power_scheme` 為 1 表明把 iwlmvm 設置為總是活躍。可選項如下：

值 | 描述
--- | ---
1 | 總是活躍
2 | 平衡
3 | 節能

這個修複方法是在 [3]被找到的。

#### Cause #7

若設備長期不使用 (e.g. 文件伺服器), 可能會因為節能模式導致無法連接，節能模式會阻止流量傳入和建立連接。嘗試為接口禁用節能模式:

    # iw dev interface set power_save off

可以創建udev規則，讓開機時自動執行它。參閱 Power management#Network interfaces.

#### Cause #8

如果你連接 Mesh 網絡時 (e.g., WiFi6) ，會偶爾中斷連接，並且你看到了如下日誌信息：

    # journalctl -b

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

你遇到的是漫遊問題，可採取以下措施：

- 如果不需要漫遊，在 NetworkManager中鎖定BSSID (如上面的 `aa:bb:cc:dd:ee:ff` ) (參閱 NetworkManager#Regular network disconnects, latency and lost packets (WiFi)).
- 在 Wpa_supplicant#Roaming 中調整 `bgscan`

### Wi-Fi 由於錯誤的信道設置而變得不可見

若電腦 Wi-Fi 信道不符合用戶所處國家之規定，部分Wi-Fi即使處於信號覆蓋範圍內，也可能因信道默認不被允許而不可見。參閱 #Respecting the regulatory domain.

## 驅動與固件排錯

這一部分包含了關於特定晶片組安裝內核模塊與固件的方法與規範，不同於一般的方法。

參閱內核模塊了解通用的模塊操作方法。

### Ralink

#### rt2x00

Ralink 晶片組的統一驅動，代替了 `rt2500`、`rt61`、`rt73` 等。Linux 內核從 2.6.24

    開始包含此驅動，但是有些設備可能需要額外固件。可以使用標準 wpa_supplicant包 和 iwconfig 工具配置。

有些晶片組需要固件文件，可以安裝軟體包 linux-firmware包。

參見: Using the new rt2x00 beta driver。

- 從內核 3.0 開始，rt2x00 也包含了這些驅動程序：

`rt2800pci`、`rt2800usb`。 `rt2860sta` 被主分支驅動 `rt2800pci` 替代，`rt2870sta` 被 `rt2800usb` 替代。

- 通過 `iwpriv` 可以配置很多參數，文檔在 Ralink 原始碼包中。

#### rt3090

對於使用 rt3090 晶片組的設備, 應該使用的驅動是`rt2800pci` ; 然而， 它並沒有非常好的適配這個晶片組 (例如：有時候網速甚至不能到 2Mb/s).

#### rt3290

rt3290 晶片組是由內核模塊 `rt2800pci` 識別的。一些用戶遇到這些問題，他們選擇恢復到打了補丁的 Ralink 驅動，這樣效果更好。

#### rt3573

2012年新出的晶片組，需要 Ralink 的閉源驅動，有不同的廠商使用他們，參閱 Belkin N750 示例。

#### mt7612u

2014年新發布的晶片組，以新的商用名稱聯發科發布。這是一款 AC1200 或 AC1300 級別的晶片組。製造商提供了 Linux 驅動程序在支持頁面。從內核 5.5 版本開始，該晶片組應該已被包含的 `mt76` 驅動所支持。

### Realtek

參見 [4][失效連結 2022-11-10] 查看 Realtek 晶片組和規範列表

#### rtl8192cu

這個驅動已經被包含在內核裡了, 但很多用戶報告指出即使掃描到了 wifi 也無法連接。

8192cu-dkmsAUR 包含了很多補丁；如果內核裡的驅動並沒有很好的起效果可以嘗試這個。

#### rtl8723ae/rtl8723be

`rtl8723ae` 和 `rtl8723be` 模塊已經被包含在 Linux 內核主線。

一些用戶使用此網卡時可能會遇到省電方面的問題. 這表現為可能偶爾斷開連接，但高級網絡管理器無法識別 (netctl、NetworkManager)。以 root 身份執行 `dmesg -w` 可以驗證這個錯誤 ，或以 root 身份執行 `journalctl -f` 查找與 powersave 和`rtl8723ae`/`rtl8723be`

    模塊相關的輸出. 如果你遇到了這個問題，使用 fwlps=0 內核選項，這樣可以防止無線網卡自動休眠或停止連接。參閱內核模塊#配置模塊參數。

如果你信號很差，可能你只有一個物理天線連接了，並且天線的自動選擇損壞了。可以用 `ant_sel=1` 或 `ant_sel=2` 內核選項強制選擇天線[5]。

#### rtl88xxau

Realtek 晶片組 rtl8811au、rtl8812au、rtl8814au 和 rtl8821au 被設計為用於各種 USB 適配器，範圍從 AC600 到 AC1900。有幾個包提供對應的內核驅動，需要 DKMS 和內核頭文件：

C | P | N
--- | --- | ---
rtl8811au、rtl8812au、rtl8821au | rtl88xxau-aircrack-dkms-gitAUR | Aircrack-ng 給 8811au、8812au、8821au 提供了監控模式和注入支持。
rtl8812au | rtl8812au-dkms-gitAUR | Realtek 最新官方驅動版本，僅適用於 rtl8812au。
rtl8811au、rtl8821au | rtl8821au-dkms-gitAUR | 用於 rtl8821au 的新一代驅動版本
rtl8814au | rtl8814au-dkms-gitAUR | rtl8813au 可能也適用

#### rtl8811cu/rtl8821cu

rtl8821cu-dkms-gitAUR 提供了一個內核模塊給 Realtek 8811cu 和 8821cu 晶片組。

需要 DKMS, 確保安裝了內核頭文件。

如果安裝並加載了 `8821cu` 模塊，無線接口還是沒有顯示，需要手動指定 `rtw_RFE_type` 選項[6][7]。試試例如 `echo "options 8821cu rtw_RFE_type=0x26" | sudo tee /etc/modprobe.d/8821cu.conf`，其他值可能也可以，比如 1 或 2 等等。詳見內核模塊#配置模塊參數

#### rtl8821ce

rtl8821ce-dkms-gitAUR 為華碩 X543UA 中的 Realtek 8821ce 晶片組提供了一個內核模塊。

它需要 DKMS，所以應確保已安裝內核頭文件。

注意：有報告[8]提出，在 Linux 內核版本 ≥ 5.9 中由 Realtek 提供的 `rtl8821ce` 無線模塊是破損的，會導致連接弱，應該優先使用上面的 AUR 版本。詳見在 github 上的討論，使用 `lspci -k` 檢查是否在用默認的 (`rtw88_8821ce`)模塊。如果是，把它加入黑名單。

#### rtl8822bu

rtl88x2bu-dkms-gitAUR 給 Edimax EW7822ULC USB3、Asus AC53 Nano USB 802.11ac 和 TP-Link Archer T3U adapter 的 Realtek 8822bu 晶片組提供了內核模塊。

確保安裝了 DKMS 和內核頭文件。

#### rtl8xxxu

這篇文章的某些內容需要擴充。

原因：應說明有關主線模塊和內核版本的具體問題。 (在 Talk:網絡配置/無線網絡配置 中討論)

可以通過安裝 linux-firmware包 來獲得 `rtl8xxxu` 的固件。

`rtl8xxxu` 驅動程序已在主線內核中。但是 linux-libre 內核不包含。

`rtl8xxxu` 主線內核模塊的問題可通過編譯特定晶片組的第三方模塊來解決。原始碼可在 GitHub 存儲庫中找到。 某些驅動程序可能已存在於在 AUR 中，例如 rtl8723bu-dkms-gitAUR。

提示：如果您的 USB 無線適配器基於 `RTL8188GU` 或 `RTL8192FU` 晶片，您可能需要安裝 usb_modeswitch包 以將其切換至 Wifi 模式。

#### RTW88

一份 RTW88 內核模塊補丁集最近被發到內核郵件列表中，有望被添加進內核主線。

如果正確配置和編譯的話，上游內核以及帶有補丁集的內核將會支持大部分 RTW88 晶片設備。linux-zen包 和 linux-zen-gitAUR 均包含了這些補丁，其中已打包的版本已經內置了該模塊。

驅動支持型號有：882BE、8822BU、8822CE、8822CU、8723DE、8723DU、8821CE 與 8821CU。

### Atheros

MadWifi 開發團隊維護了三個模塊：

- `madwifi` 是最老的驅動，Arch 內核 從 2.6.39.1 開始已經不再包含。
- `ath5k` 將逐步替代 `ath_pci`，有些晶片組使用效果很好，但有些還不能很好工作(後面有說明)
- `ath9k` 是新的官方驅動，適用於新 Atheros 硬體。

還有一些驅動適用於其他的 Atheros 設備. 詳見 Linux Wireless 文檔。

#### ath5k

參考:

- https://wireless.wiki.kernel.org/en/users/drivers/ath5k
- http://wiki.debian.org/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

外部文檔資源:

- https://wireless.wiki.kernel.org/en/users/drivers/ath9k
- https://wiki.debian.org/ath9k

截至 Linux 3.15.1，一些用戶可能會遇到網絡帶寬下降的問題，這種情況可以為 `ath9k` 模塊設置 `nohwcrypt=1` 的內核選項。 詳見內核模塊#配置模塊參數.

注意：使用命令 `lsmod` 查看正在使用的模塊，如果名稱不同（例如 `ath9k_htc`），請更改 `ath9k`。

##### 節能/省電模式

雖然 Linux 無線工具表明對於比 AR9280 更新的 Atheros ath9k 單晶片設備已經啟用了動態電源節能功能，雖然 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 會自動加載驅動，否則要手動加載 `iwl3945` 或 `iwl4965`。詳見內核模塊。

如果連不上網或者連接很弱，嘗試啟用 802.11n：

    /etc/modprobe.d/iwl4965.conf

    options iwl4965 11n_disable=1

若啟動過程中一直失敗，且你正在使用 Nouveau 驅動, 嘗試啟用早期 KMS 避免衝突 [9]。

#### iwlwifi

iwlwifi 是適用於 Intel 當前網卡的無線驅動，例如 5100AGN、5300AGN、和 5350AGN。查看所有受支持的文件列表。該固件已包含在 linux-firmware包 裡。linux-firmware-iwlwifi-gitAUR 可能包含更新的驅動。

若聯網存在問題或連接很弱，嘗試啟用 802.11n，也可能需要啟用軟體加密：

    /etc/modprobe.d/iwlwifi.conf

    options iwlwifi 11n_disable=1 swcrypto=1

在 802.11n 模式下網絡上行速度很慢，比如只有 20Mbps，嘗試啟用 TX AMPDU：

    /etc/modprobe.d/iwlwifi.conf

    options iwlwifi 11n_disable=8

若上行速度很慢，可以禁用無線網卡的省電模式。

如果你有 802.11ax (WiFi 6) 接入點並且也有連接不穩定等問題，可參閱 Intel Article 54799。

注意：用 `11n_disable=0` 參數將會阻止 802.11ac，只能使用較慢的協議，（5GHz 頻段用 802.11a，2.4 GHz 頻段用802.11b/g）。

##### 藍牙共存

若無法連接藍牙耳機或無法保持良好的數據接受速度，請禁用藍牙共存，參考 [10]：

    /etc/modprobe.d/iwlwifi.conf

    options iwlwifi bt_coex_active=0

注意：從內核版本 5.8 起, 對於由 `iwlmvm` 內核模塊處理的硬體， `bt_coex_active` 和 `sw_crypto` 模塊選項已被禁用，但對於由 `iwldvm` 模塊處理的老硬體，這些選項依舊起作用。

##### 固件問題

你可能會遇到驅動程序輸出堆棧跟蹤與報錯，這會導致有點卡頓。

    # dmesg

    Microcode SW error detected.  Restarting 0x2000000.

你也可能遇到其他各種各樣的問題（例如連接 5GHz 頻段時的問題，隨時斷連，恢復後無法連接）。

要想確認是否是固件的原因，請降級 linux-firmware包 包。

如果確定是固件的問題, 移除有 bug 的固件文件以確保可以加載舊版本固件 (要更新 linux-firmware包 包，因為它不僅僅提供 Intel 無線網卡的固件更新):

    # 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` 數組搭配通配符以此禁止它們的安裝。詳見 pacman#在安裝時跳過文件。

##### 從 Windows 重啟後無法檢測到 WiFi 適配器

如果從 Windows 重啟到 Linux 後，檢測不到 WiFi 適配器，可能是由於 Windows 默認啟用的快速啟動功能。嘗試禁用快速啟動。iwlwifi 內核驅動維基頁面有關於此問題的條目。

##### 禁用 LED 閃爍

注意：適用於 `iwlegacy` 和 `iwlwifi` 驅動

默認設置中 LED 閃爍是開啟的，有些人不喜歡，可以用 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"` 模塊參數。它應當同時適用於 `iwlwifi` 和 `iwlegacy` 驅動。

    # cat /sys/class/leds/phy0-led/trigger

### Broadcom

參見博通無線網卡。

### 其他驅動/設備

#### Tenda w322u

該型號 Tenda 卡 可被視為 `rt2870sta` 設備。參閱 #rt2x00。

#### orinoco

這應當是內核的一部分，是已經被安裝的。

部分 Orinoco 晶片組屬於 Hermes 二代系列。應使用 `wlags49_h2_cs` 驅動而非 `orinoco_cs` 以獲得WPA 支持。 使用此驅動前需先把 `orinoco_cs` 加入黑名單。

#### prism54

`p54` 已經包含在內核中，不過必須從此網站下載適合你網卡的驅動並且把它安裝進`/usr/lib/firmware` 目錄。

過時的 `prism54` 和新內核模塊 `p54pci` 或 `p54usb` 同時裝入造成衝突，使用 `lsmod | grep prism54` 查看是否裝入了過時模塊，如果是，那麼就屏蔽 `prism54` 並根據上面方法修改固件名稱。

#### zd1211rw

zd1211rw 是 ZyDAS ZD1211 802.11b/g USB WLAN 晶片的驅動，最近的版本的內核已經包括了。有被支持的設備列表。需要安裝固件zd1211-firmwareAUR。

#### hostap_cs

Host AP 是一個 Linux 驅動程序，對於基於 Intersil 的 Prism2/2.5/3 晶片組的無線區域網卡。該驅動程序包含在 Linux 內核中。

注意：確保把 `orinico_cs` 驅動程序加入黑名單。

#### ACX100/111

警告：適用於這些設備的驅動 已損壞且並不適用於更新的內核版本。

軟體包: `tiacx`、`tiacx-firmware` (已被官方倉庫 和 AUR 移除)。

詳見官方維基。

### ndiswrapper

Ndiswrapper並不是一個真正的驅動,但是如果你無法找到適合你的無線網卡驅動, 它就派上用場了.有的時候, 它是非常有用的.為了使用Ndiswrapper, 你需要 Windows 驅動中的 *.inf 文件(*.sys 文件應該和 *.info 在同一個目錄中)。如果你需要從 `*.exe` 文件解壓縮，你可以使用 cabextract包。

警告：確保使用合適架構(也就是 32/64 位)的驅動。

下面是安裝 ndiswrapper 的幾個步驟:

1. 安裝 ndiswrapper-dkms包 2. 安裝驅動到 `/etc/ndiswrapper/*`

    ndiswrapper -i filename.inf

3. 列出所有的安裝的驅動

    ndiswrapper -l

4. 配置文件寫到 `/etc/modprobe.d/ndiswrapper.conf`

    ndiswrapper -m
    depmod -a

然後依照內核模塊一文設置啟動時加載這個模塊。

    modprobe ndiswrapper
    iwconfig

如果正常的話, 你應該可以看到wlan0接口了。如果有問題的話, 你可以閱讀： Ndiswrapper installation wiki[失效連結 2020-08-04 ⓘ]. ndiswrapper howto 和 ndiswrapper FAQ.

## 參見

- Linux Wireless 項目
- Aircrack-ng 驅動程序安裝指南
- Wireless Device Database Wiki (由於原維基站點已關閉，該分叉站點由 wi-cat.ru 託管。目前有兩個不太完整的版本： TechInfoDepot、deviwiki)

分類：​

- 調用重複模板參數的頁面
- 無線網絡
- 包含損壞的軟體包連結的頁面
- 使用「模板:過時」標記的頁面或章節
- 包含失效連結的頁面

隱藏分類：​

- 使用「模板:準確性」標記的頁面或章節

網絡配置/無線網絡配置
新增話題