萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 命令列連線 WiFi 完整實戰:iw、wpa_supplicant、dhcpcd 三步走

無圖形介面環境 (伺服器、最小安裝、容器、救援模式) 下連線 WiFi 是核心生存技能。本文採用標準工具鏈 (iw/ip + wpa_supplicant + dhcpcd/dhclient),無需 NetworkManager、wicd、nmcli 等高層封裝,通用於所有 Linux 發行版。

前置條件確認


# 1. 確認無線網卡被識別
lspci -nn | grep -i network
lsusb | grep -i wireless
dmesg | grep -i firmware

# 2. 確認驅動已載入
lsmod | grep -E 'iwl|rtl|ath|mt76|brcm|rtw'

# 3. 查看無線介面名稱
iw dev
# 輸出範例:
# phy#0
#     Interface wlan0
#         ifindex 3
#         wdev 0x1
#         addr 00:11:22:33:44:55
#         type managed

無線網卡識別

步驟 1:啟用介面與掃描熱點


# 啟用介面
sudo ip link set wlan0 up

# 掃描可用網路 (需 root)
sudo iw dev wlan0 scan | less
# 關鍵資訊:
# SSID: 網路名稱
# signal: 訊號強度 (dBm, 越接近 0 越強)
# RSN/WPA: 加密協議 (WPA2-PSK, WPA3-SAE, WEP, Open)
# BSSID: AP MAC 位址

iw scan 輸出

掃描結果詳情

步驟 2:根據加密類型連線

情況 A:開放網路 (無加密)


sudo iw dev wlan0 connect "Free_WiFi"

情況 B:WEP 加密 (已淘汰,極不安全)


# 十六進位金鑰
sudo iw dev wlan0 connect "WEP_Network" key 0:abcdef1234

# ASCII 金鑰
sudo iw dev wlan0 connect "WEP_Network" key s:password

情況 C:WPA/WPA2/WPA3-Personal (最常見,需 wpa_supplicant)


# 1. 建立配置檔
sudo tee /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null <<'EOF'
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=TW

network={
    ssid="Your_SSID"
    psk="Your_Password"
    priority=1
    # WPA3-SAE 會自動協商,無需額外設定
}
EOF

# 2. 後台啟動 wpa_supplicant
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
# -B 背景執行, -i 介面, -c 配置檔

# 3. 驗證連線狀態
wpa_cli -i wlan0 status
# wpa_state=COMPLETED 表示認證成功

情況 D:企業級 WPA2/WPA3-Enterprise (802.1X/EAP)


network={
    ssid="Corporate_WiFi"
    key_mgmt=WPA-EAP
    eap=PEAP          # 或 TTLS, TLS, PWD
    identity="username"
    password="password"
    ca_cert="/etc/certs/ca.pem"      # 可選,驗證伺服器憑證
    phase2="auth=MSCHAPV2"           # PEAP 內層認證
    anonymous_identity="anonymous@domain"
}

步驟 3:取得 IP 位址 (DHCP)


# 方案一:dhcpcd (現代、輕量、預設許多發行版)
sudo dhcpcd wlan0

# 方案二:dhclient (傳統、廣泛相容)
sudo dhclient wlan0

# 方案三:systemd-networkd (systemd 整合)
# /etc/systemd/network/25-wireless.network
[Match]
Name=wlan0
[Network]
DHCP=yes
# systemctl restart systemd-networkd

步驟 4:驗證連線


# 檢查 IP
ip addr show wlan0
ip route show

# 測試連通性
ping -c 3 8.8.8.8
ping -c 3 google.com

# 顯示連線品質
iw dev wlan0 link
# 輸出:SSID, BSSID, signal, tx bitrate, rx bitrate 等

連線成功驗證

進階:持久化與自動連線

systemd 服務化 (推薦)


# /etc/systemd/system/wifi-connect@.service
[Unit]
Description=WiFi connection for %i
After=network.target
Wants=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/usr/sbin/ip link set %i up
ExecStart=/usr/sbin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant/wpa_supplicant.conf
ExecStartPost=/usr/sbin/dhcpcd %i
ExecStop=/usr/sbin/wpa_cli -i %i terminate
ExecStopPost=/usr/sbin/ip link set %i down

[Install]
WantedBy=multi-user.target

# 啟用
sudo systemctl enable wifi-connect@wlan0 --now

systemd-networkd + wpa_supplicant 整合


# /etc/systemd/network/20-wireless.network
[Match]
Name=wlan0
[Network]
DHCP=yes

# /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
# (同前配置)

# systemctl enable wpa_supplicant@wlan0 systemd-networkd --now

連線多組熱點 (優先權管理)


# wpa_supplicant.conf 多 network 區塊,priority 越高優先
network={ ssid="Home_5G" psk="..." priority=10 }
network={ ssid="Home_2.4G" psk="..." priority=5 }
network={ ssid="Phone_Hotspot" psk="..." priority=1 }

故障排查速查表

現象檢查項目解決方向
iw dev wlan0 scan 無輸出射頻被封鎖 / 驅動未載入rfkill list, rfkill unblock wifi, modprobe 驅動模組
Authentication timeout密碼錯誤 / 加密協議不匹配確認 PSK、嘗試 key_mgmt=WPA-PSK WPA-PSK-SHA256
Association deniedMAC 過濾 / AP 客戶端滿載檢查 AP 設定、MAC 偽裝
連上但無 IPDHCP 失敗 / 無 DHCP 服務手動 dhclient -v wlan0、靜態 IP
頻繁斷線省電模式 / 驅動問題iw dev wlan0 set power_save off, 更新固件/核心
WPA3 無法連線wpa_supplicant 版本過舊 / 驅動不支援升級 wpa_supplicant ≥ 2.10, 核心 ≥ 5.10

替代工具快速參考

工具定位優點缺點
nmcliNetworkManager CLI功能全、儲存配置、系统整合需安裝 NM、依賴 D-Bus
nmtui文字介面互動式選單、易用需 NM、無腳本化
iwctliwd (iNet wireless daemon)現代、輕量、內建 DHCP較新發行版才有
connmanctlConnMan嵌入式導向、極輕量配置較特殊
本文方案底層工具鏈零依賴、全版本通用、腳本友善、學習價值高步驟較多、手動管理

小結

命令列連線 WiFi 核心三步驟:ip link set up → iw connect/wpa_supplicant → dhcpcd。掌握此標準流程,在任何 Linux 環境 (嵌入式、伺服器、容器、救援模式、安裝媒體) 都能獨立完成網路配置。建議進階學習 iwd (現代替代品) 與 systemd-networkd 整合,實現聲明式網路管理。

copyright © 萬盛學電腦網 all rights reserved