軟件接入點
軟接入點(也稱為虛擬路由器或虛擬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配置文件中的內容。尤其是修改ssid
和wpa_passphrase
。詳情請參考 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设备请取消注释并修改以下部分 ## 启用802.11n支持 #ieee80211n=1 ## QoS 支持 #wmm_enabled=1 ## 请使用“iw list”查看设备信息并相应地修改 ht_capab #ht_capab=[HT40+][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40]
utf8_ssid=1
可以啟用這個功能。但是一些客戶端可能無法正確識別編碼(例如wpa_supplicant和windows 7)。啟動 hostapd 前,請確認無線網絡接口已經正確啟動(bring up),否則 hostapd 會啟動失敗,並顯示錯誤信息:「無法配置驅動程序模式」(英文提示為「could not configure driver mode」)。
如果需要自動啟動hostapd,Enable hostapd.service
.
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
擁擠或信號噪聲較強也會影響無線網絡質量,尤其是在人口稠密區域。嘗試切換到其他頻道或者使用其他頻率。
- 低熵值也會造成性能下降。考慮安裝 haveged 試試。
受到NetworkManager干擾[編輯 | 編輯原始碼]
如果網絡設備被NetworkManager管理,hostapd可能無法正常工作。 可通過MAC屏蔽設備:
/etc/NetworkManager/NetworkManager.conf
[keyfile] unmanaged-devices=mac:<hwaddr>
或通過接口名稱屏蔽:
/etc/NetworkManager/NetworkManager.conf
[keyfile] unmanaged-devices=interface-name:<ifname>
無法在 5Ghz 頻段啟用熱點模式[編輯 | 編輯原始碼]
對某些國家碼,例如 00
(全球),所有 5Ghz 中可使用的頻段都被設置了 no-ir
(no-initiating-radiation) 標記,hostapd 無法使用它們。需要安裝 wireless-regdb包,並設置國家碼,使 hostapd 可以使用你的國家所允許的頻段。