軟體接入點 - Arch Linux 中文维基

跳至內容

# 軟體接入點

出自 Arch Linux 中文维基
翻譯狀態：

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

相關文章

- Network configuration
- Wireless network configuration
- Ad-hoc networking
- Internet sharing

軟接入點（也稱為虛擬路由器或虛擬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配置文件中的內容。尤其是修改`ssid`和`wpa_passphrase`。如果你的網卡支持WiFi5和WiFi6的話，啟用`ieee80211ac`與`ieee80211ax`。`ht_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方式的接入點。它綜合使用hostapd包，dnsmasq和iptables使得接入點運作良好。該軟體可以通過命令行或圖形界面使用。創建一個簡單的NAT方式的接入點可以執行：

    # create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

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

    # create_ap --config /etc/create_ap.conf

或者使用圖形界面，運行：

    # wihotspot

Enable並start `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 可以使用你的國家所允許的頻段。

## 相關文章

- Router
- Hostapd : The Linux Way to create Virtual Wi-Fi Access Point
- tutorial and script for configuring a subnet with DHCP and DNS

分類：​

- 無線網絡

軟體接入點
新增話題