無圖形介面環境 (伺服器、最小安裝、容器、救援模式) 下連線 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

# 啟用介面
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 位址


sudo iw dev wlan0 connect "Free_WiFi"
# 十六進位金鑰
sudo iw dev wlan0 connect "WEP_Network" key 0:abcdef1234
# ASCII 金鑰
sudo iw dev wlan0 connect "WEP_Network" key s:password
# 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 表示認證成功
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"
}
# 方案一: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
# 檢查 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 等

# /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
# /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 denied | MAC 過濾 / AP 客戶端滿載 | 檢查 AP 設定、MAC 偽裝 |
| 連上但無 IP | DHCP 失敗 / 無 DHCP 服務 | 手動 dhclient -v wlan0、靜態 IP |
| 頻繁斷線 | 省電模式 / 驅動問題 | iw dev wlan0 set power_save off, 更新固件/核心 |
| WPA3 無法連線 | wpa_supplicant 版本過舊 / 驅動不支援 | 升級 wpa_supplicant ≥ 2.10, 核心 ≥ 5.10 |
| 工具 | 定位 | 優點 | 缺點 |
|---|---|---|---|
nmcli | NetworkManager CLI | 功能全、儲存配置、系统整合 | 需安裝 NM、依賴 D-Bus |
nmtui | 文字介面 | 互動式選單、易用 | 需 NM、無腳本化 |
iwctl | iwd (iNet wireless daemon) | 現代、輕量、內建 DHCP | 較新發行版才有 |
connmanctl | ConnMan | 嵌入式導向、極輕量 | 配置較特殊 |
| 本文方案 | 底層工具鏈 | 零依賴、全版本通用、腳本友善、學習價值高 | 步驟較多、手動管理 |
命令列連線 WiFi 核心三步驟:ip link set up → iw connect/wpa_supplicant → dhcpcd。掌握此標準流程,在任何 Linux 環境 (嵌入式、伺服器、容器、救援模式、安裝媒體) 都能獨立完成網路配置。建議進階學習 iwd (現代替代品) 與 systemd-networkd 整合,實現聲明式網路管理。