軟件接入點

出自 Arch Linux 中文维基

軟接入點(也稱為虛擬路由器或虛擬Wi-Fi)使計算機能夠將其無線接口轉換為Wi-Fi熱點,無需使用獨立無線路由器。

要求[編輯 | 編輯原始碼]

無線網卡必須支持AP模式[編輯 | 編輯原始碼]

無線設備必須兼容 nl80211標準,並且支持 AP 工作模式。可通過 iw list 命令來驗證, 該命令輸出信息的 Supported interface modes 段落中要有 AP 模式:

$ iw list
Wiphy phy1
...
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * WDS
		 * monitor
		 * mesh point
...
注意: 自 2019 年以來,大多數 Intel 無線網卡上不再能支持 5GHz 頻段的 AP 服務,原因是固件錯誤地將位置感知監管(LAR)功能保留為啟用狀態,即使在 AP 模式下也是如此,但根據 報告,可以通過一個特殊的 hostapd 補丁讓它工作。請同時參考 #無法在 5Ghz 頻段啟用熱點模式

單個Wi-Fi設備同時作為無線客戶端和AP[編輯 | 編輯原始碼]

軟熱點的創建和系統的網絡連接方式(以太網,無線網等) 是獨立的。許多無線設備甚至支持並存操作,即同時作為熱點和無線「客戶端「使用。通過這個功能可以為當前連接網絡創建一個熱點,就像「無線中繼器」一樣。iw list 命令的輸出中會顯示設備是否支持並行操作:

$ iw list
Wiphy phy1
...
        valid interface combinations:
                 * #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1,
                   total <= 2048, #channels <= 1, STA/AP BI must match
...

約束#channels <= 1說明創建的熱點必須和無線客戶端連接處於同一信道。參見下文 hostapd.conf 示例中 channel 的設置。

如果有線連接不可用, 使用這個功能時需要分別創建兩個「虛擬網絡接口(virtual interface)」。可以通過如下方式為wlan0 創建負責網絡連接的 wlan0_sta 和負責熱點的 wlan0_ap。兩個虛擬網卡具有不同的MAC地址。

# iw dev wlan0 interface add wlan0_sta type managed addr 12:34:56:78:ab:cd  
# iw dev wlan0 interface add wlan0_ap  type managed addr 12:34:56:78:ab:ce

可以用 macchanger 創建隨機 MAC 地址。

配置[編輯 | 編輯原始碼]

接入點的設置包含兩個主要部分:

  • 設置Wi-Fi鏈路層,這樣無線客戶端可以與電腦的「軟件接入點」建立連接,從而同電腦進行通信。
  • 配置電腦上的網絡, 使電腦可以在 Internet 和無線客戶端之間有效地轉發IP包。

無線鏈路層[編輯 | 編輯原始碼]

我們使用支持WPA2的hostapd建立Wi-Fi鏈路。

hostapd所自帶的默認配置文件中有很多選項列出,且均有相關描述,讀者可以參考該配置文件以對各個選項有個大致的了解。

按實際需要調整hostapd配置文件中的內容。尤其是修改ssidwpa_passphrase。如果你的網卡支持WiFi5和WiFi6的話,啟用ieee80211acieee80211axht_capab用於開啟若干AP功能,其中包括對傳輸速度影響顯著的頻道寬度。 詳情請參考 hostapd Linux 手冊.

/etc/hostapd/hostapd.conf
interface=wlan0_ap
bridge=br0

# 要在 IEEE 802.11 管理框架中使用的 SSID(即熱點名)
ssid=YourWiFiName
# 驅動接口類型(hostap/wired/none/nl80211/bsd)
driver=nl80211
# 國家或地區代碼(ISO/IEC 3166-1)
country_code=US

# 工作模式 (a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz)
hw_mode=g
# 使用信道
channel=7
# 允許最大連接數
max_num_sta=5

# Bit 字段:bit0 = WPA, bit1 = WPA2
wpa=2
# Bit 字段:1=wpa, 2=wep, 3=both
auth_algs=1

# 加密協議;禁用不安全的 TKIP
wpa_pairwise=CCMP
# 加密算法
wpa_key_mgmt=WPA-PSK
wpa_passphrase=Somepassphrase

# hostapd日誌設置
logger_stdout=-1
logger_stdout_level=2

## 啟用802.11n支持
#ieee80211n=1
## 啟用802.11ac支持
#ieee80211ac=1
## 啟用802.11ax支持
#ieee80211ax=1
## QoS 支持
#wmm_enabled=1
## 請使用「iw list」查看設備信息並相應地修改ht_capab和vht_capab
#ht_capab=[HT40+][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40]
#vht_capab=[RXLDPC][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1]
提示:雖然iwd也可以用來開啟無線AP,但相比之下更建議使用hostapd,因為hostapd有更多的選項可用,包括影響性能的選項。使用iwd可能會造成性能限制,比如AP可能會被限制在802.11n或頻寬被限制在20MHz。
提示:使用UTF-8字符的SSID可以正常顯示國際化的字符。配置文件中設置utf8_ssid=1可以啟用這個功能。但是一些客戶端可能無法正確識別編碼(例如wpa_supplicant和windows 7)。

如果想開機自啟hostapd啟用hostapd.service

如果開機時會自啟hostapd,請確認無線網絡接口已經率先啟動(bring up),否則 hostapd 會啟動失敗。為了確保無線接口已就緒,編輯單元配置文件,綁定(BindTo)你的網絡接口並在其後(After)啟動:

/etc/systemd/system/hostapd.service.d/override.conf
[Unit]
BindsTo=sys-subsystem-net-devices-wlan0.device
After=sys-subsystem-net-devices-wlan0.device

確保接口不會被其它網絡管理器控制。如果你用的是NetworkManager,查閱NetworkManager#忽略特定設備

警告: 不同地區允許作為接入點的無線信道是不同的。由於無線設備的固件設計,你應當設置正確的地區來使用合法的信道。 不要選擇非本地區域,這可能會非法擾亂網絡通訊, 在信號覆蓋範圍內影響你和他人設備的無線功能!區域信道參見Wireless network configuration#Respecting the regulatory domain.
注意: 如果你有一個基於RTL8192CU芯片組的網卡, 請從AUR中安裝hostapd-rtl871xdrvAUR並在hostapd.conf 文件中將driver=nl80211 替換為 driver=rtl871xdrv

網絡配置[編輯 | 編輯原始碼]

有兩種基本的實現方法:

  1. 網橋: 在電腦上搭一個網橋,無線客戶端就可以像電腦一樣訪問同一個網絡接口和同一個子網。
  2. NAT: 通過 IP 轉發/偽裝和 DHCP 服務,無線客戶端會專門使用一個子網, 數據進出這個子網是被網絡地址轉換的(NAT-ted) —— 就像是連接在你數字用戶迴路(DSL)或銅軸線(Cabel)調製解調器上的一個普通的無線路由器一樣。

使用網橋方式會更加簡單, 但它要求無線客戶端所需要的任何服務(例如 DHCP)在你電腦的外部接口上是可用的。因此如果你使用撥號連接(如,通過PPPoE或3G調製解調器)或你在使用銅軸線調製解調器,它會通過DHCP提供一個固定的IP地址, 在這種狀態下橋接將不能正常工作。

使用NAT方式會更加靈活, NAT把Wi-Fi客戶端和你的電腦清晰地分離開來並且對外界完全透明。 對於任何種類的網絡連接它都適用,而且(如果必要的話)你可以使用iptables的方式來控制進出策略。

當然,將兩者結合物也是可能的,比方說:某個擁有一個靜態IP的網橋既包含以太網設備又有無線設備,同時提供DHCP服務,又能夠配置NAT將數據轉發到另外一個連接了 WAN 的網絡設備。

網橋設置[編輯 | 編輯原始碼]

創建一個網橋並把網絡接口 (如 eth0) 加入其中 。不要將無線網絡接口(如wlan0)添加到網橋;hostapd 會自行添加無線設備。 詳情請參閱 Network bridge

提示:如果已經有網橋(例如,虛擬機使用的)則可以復用使用該網橋。

NAT設置[編輯 | 編輯原始碼]

詳細內容請參考Internet sharing,在其中連接 LAN 的設備是 net0。這裡我們通常指的是無線設備,比如說 wlan0

工具[編輯 | 編輯原始碼]

linux-wifi-hotspot[編輯 | 編輯原始碼]

linux-wifi-hotspotAUR軟件包中的腳本可以創建橋接或NAT方式的接入點。它綜合使用hostapddnsmasqiptables使得接入點運作良好。該軟件可以通過命令行或圖形界面使用。創建一個簡單的NAT方式的接入點可以執行:

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

或者可以根據需求修改/etc/create_ap.conf配置文件,並指定使用該配置。

# create_ap --config /etc/create_ap.conf

或者使用圖形界面,運行:

# wihotspot

Enablestart create_ap.service會使用/etc/create_ap.conf中指定的配置在啟動時運行腳本。 詳細信息,參見linux-wifi-hotspot的GitHub頁面

注意: 在橋接模式下,「create_ap」 可能在啟動時與當前網絡配置衝突。在這種情況下,請勿配置以太網接口的IP地址,也不要配置DHCP和statip IP,以便於綁定到網橋。

RADIUS[編輯 | 編輯原始碼]

可以參閱 這篇博客 的說明來運行WPA2企業級加密FreeRADIUS 服務。

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

原因: 似乎只用NetworkManager也可以輕易創建接入點。 (在 Talk:軟件接入點 中討論)

常見問題與解答[編輯 | 編輯原始碼]

無線局域網很慢[編輯 | 編輯原始碼]

一般情況下可以嘗試以下情況:

  • hw_mode中配置的工作模式不合理會限制路由性能。檢查並設置一個更合適的工作模式。
  • 設置的channel擁擠或信號噪聲較強也會影響無線網絡質量,尤其是在人口稠密區域。嘗試切換到其他頻道或者使用其他頻率。

受到NetworkManager干擾[編輯 | 編輯原始碼]

如果網絡設備被NetworkManager管理,hostapd可能無法正常工作。 可通過MAC屏蔽設備:

/etc/NetworkManager/conf.d/unmanaged.conf
[keyfile]
unmanaged-devices=mac:<hwaddr>

或通過接口名稱屏蔽:

/etc/NetworkManager/conf.d/unmanaged.conf
[keyfile]
unmanaged-devices=interface-name:<ifname>

無法在 5Ghz 頻段啟用熱點模式[編輯 | 編輯原始碼]

對某些國家碼,例如 00(全球),所有 5 Ghz 中可使用的頻段都被設置了 no-ir (no-initiating-radiation) 標記,hostapd 無法使用它們。需要安裝 wireless-regdb,並設置國家碼,使 hostapd 可以使用你的國家所允許的頻段。

相關文章[編輯 | 編輯原始碼]