軟件接入點
軟接入點(也稱為虛擬路由器或虛擬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 ...
單個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]
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#忽略特定設備。
hostapd.conf
文件中將driver=nl80211
替換為 driver=rtl871xdrv
。網絡配置[編輯 | 編輯原始碼]
有兩種基本的實現方法:
- 網橋: 在電腦上搭一個網橋,無線客戶端就可以像電腦一樣訪問同一個網絡接口和同一個子網。
- 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頁面。
RADIUS[編輯 | 編輯原始碼]
可以參閱這篇博客的說明來運行WPA2企業級加密的 FreeRADIUS 服務。
常見問題與解答[編輯 | 編輯原始碼]
無線局域網很慢[編輯 | 編輯原始碼]
一般情況下可以嘗試以下情況:
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 可以使用你的國家所允許的頻段。