Debian 7.2 創建無線熱點的過程及方法
原創【51CTO專稿】隨著無線網絡的不斷普及,目前使用傳統計算機無線網卡將其通過軟件設置成為無線熱點這一應用已經成為了很多計算機用戶的日常網絡應用需求之一,比如360公司出品的隨身360WIFI設備就可以在Windows環境中非常方便的將接入網絡的計算機通過軟件方式變成一個AP訪問接入點來提供對移動設備的無線網絡接入支持。但筆者實際測試中發現該設備只能提供單一AP功能,在某些時候需要當無線網卡使用時又成為了一個弊端。而很多無線網卡實際上已經提供了雙向應用的硬件層面的支持。
不論是Windows以及Linux都可以通過該網卡來實現傳統意義的應用以及實現無線AP的應用,筆者就曾在自己的筆記本中使用Fedora 18中的Hostapd創建了無線AP作為非常方便的無線AP接入解決方案。因為筆者的辦公主機使用了Debian作為主機操作系統,盡管Debian中已經提供了Hostapd的軟件源,但因為版本為1.0,在創建完熱點后存在掉線、訪問視頻網站超時等諸多問題。筆者查閱了很多網站,發現國外有網友已經將Hostapd 1.0中存在的相關問題進行了詳細描述,原因是Hostapd 1.0及以前版本中存在BUG,導致創建的無線AP無法達到真正80211G/N的有效帶寬,導致網絡無線網絡擁塞,無法正常使用。該BUG在2.0中已經得到了修補和更新。
為此筆者在Debian 7.2中使用手工編譯Hostapd重新部署無線AP,通過手工編譯安裝最新版的Hostapd2.0,以上問題已經得到徹底解決,用筆記本連接創建的無線AP,實際網速可以達到72Mb/s。編譯及配置過程如下:
一、實驗環境:
- 操作系統:Debian 7.2
- 內核版本:3.2.51-1
- 無線網卡型號:騰達W311M
二、無線AP創建過程:
1、首先在終端下使用命令apt-get install hostapd及apt-get isntall dnsmasq安裝源提供的hostapd及dnsmasq軟件組件包。安裝hostapd組建包其實是為了下一步編譯最新的hostapd并使用/etc/init.d/hostapd來對其進行啟動管理。而dnsmasq將為無線AP接入客戶端提供動態IP地址分配,以方便客戶端IP地址管理。
2、下載hostapd軟件包,訪問http://hostap.epitest.fi/hostapd/找到hostpad-2.0.tar.gz并點擊進行下載,也可以在在終端模式下使用命令wget http://hostap.epitest.fi/releases/hostapd-2.0.tar.gz直接進行下載,之后進入下載目錄使用tar -zxvf hostapd-2.0.tar.gz進行解壓縮操作,之后系統會在當前目錄中生成hostapd-2.0目錄。
3、安裝編譯,進入hostapd-2.0/hostapd目錄中,首先使用cp defconfig .config創建編譯時需要的配置文件,使用vi .config編輯該文件并找到CONFIG_IEEE80211N=y 行,將前面的注釋"#"刪除,使hostpad支持80211N協議。使用make進行編譯,期間將報如下錯誤:
- ../src/drivers/driver_nl80211.c:19:31:fatalerror:netlink/genl/genl.h: 沒有那個文件或目錄
這時需要使用命令apt-get install libnl-dev來安裝需要的支持庫頭文件,之后再次執行make命令,系統將報如下錯誤:
../src/crypto/tls_openssl.c:17:25: fatal error: openssl/ssl.h: 沒有那個文件或目錄
這時需要使用命令apt-get install libssl-dev來安裝需要的openssl支持庫頭文件,之后再次執行make命令,系統將順利編譯hostapd。之后使用命令make install進行安裝,系統將會自動將最新版的hostapd安裝在目錄/usr/local/bin中。在終端中執行/usr/local/bin/hostapd -v,系統如果能返回如下信息:
- hostapd v2.0
- User space daemon for IEEE 802.11 AP management,
- IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
- Copyright (c) 2002-2012, Jouni Malinen <j@w1.fi> and contributors
說明hostapd2.0已經順利安裝成功。
4、配置及修改相關配置文件,在終端中使用命令vi /etc/init.d/hostapd打開hostapd程序 啟動管理腳本,找到DAEMON_SBIN=/usr/sbin/hostapd ,將其修改為:DAEMON_SBIN=/usr/local/bin/hostapd ,修改的目的在于系統腳本在啟動時原本是執行/usr/sbin下的hostapd程序(也就是源安裝之后默認的hostapd1.0版主程序);經過修改,系統腳本在啟動時會去執行我們手工編譯生成的/usr/local/bin/hostapd主程序(也就是我們手工編譯后安裝的hostapd2.0版主程序),這樣我們就不用每次啟動新安裝的Hostapd時去手工執行/usr/local/bin/hostapd -B /etc/hostapd/hostapd.conf命令了。可以方便無線AP的開啟和關閉。關于Dnsmasq的配置文件,其實網絡上已經有很多,有興趣的愛好者們也可以參考筆者之前的《Linux中使用hostapd創建無線AP及相關問題的處理過程》一文,有較為詳細的描述。之后可以使用命令vi /etc/hostapd/hostapd.conf對hostapd的配置文件進行配置,內容如下:
- # Basic configuration
- interface=wlan2
- ssid=CMCC
- channel=7
- #bridge=br0
- # Hardware configuration
- driver=nl80211
- ieee80211n=1
- ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40]
- hw_mode=g
- wpa=2
- wpa_passphrase=AKCWDDSS21152
- macaddr_acl=0
- auth_algs=1
- ignore_broadcast_ssid=0
- wpa_key_mgmt=WPA-PSK
- wpa_pairwise=TKIP
- rsn_pairwise=CCMP
其中需要特別說明的是ht_capab這行參數其實就是針對開啟80211N硬件控制的,以上參數我們可以通過在終端模式下使用iw list進行查找。
2.5、創建無線AP的啟動和停止腳本,為了我們以后方便的開啟和關閉無線AP,避免每次啟動和停止無線AP時需要敲擊相同的命令,我們可以在/etc/init.d/目錄中創建兩個新的腳本,為了記憶方便啟動腳本名為startAP,另一個腳本名為stopAP。
StartAP腳本內容如下:
- #! /bin/bash
- sed -i '/\[keyfile\]/a unmanaged-devices=mac:c8:3a:35:cc:8e:59' /etc/NetworkManager/NetworkManager.conf
- sleep 1
- ifconfig wlan2 192.168.11.1 netmask 255.255.255.0
- sleep 1
- echo "1" >/proc/sys/net/ipv4/ip_forward
- sleep 1
- iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
- sleep 1
- /etc/init.d/hostapd start
- sleep 1
- /etc/init.d/dnsmasq start
其中 unmanaged-devices=mac:c8:3a:35:cc:8e:59中的c8:3a:35:cc:8e:59為你的無線網卡的實際地址,這是為了解決啟動hostapd系統會報類似如下錯誤。
- nl80211: Failed to set interface wlan0 into AP mode
- nl80211 driver initialization failed.
導致LINUX系統無法創建無線AP必須要將該無線網卡在netmanager網絡管理工具中設置為未托管模式。
ifconfig wlan2 192.168.11.1 netmask 255.255.255.0命令將為作為無線AP的網卡設置IP地址。
echo "1" >/proc/sys/net/ipv4/ip_forward 命令將會打開Linux主機的IP轉發功能。
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE命令就是在防火墻中啟用NAT功能。經過以上幾步客戶端接入設備就可以順利工作了。
stopAP腳本內容如下:
- #! /bin/bash
- /etc/init.d/dnsmasq stop
- /etc/init.d/hostapd stop
- sleep 1
- iptables -t nat -D POSTROUTING -o ppp0 -j MASQUERADE
- sleep 1
- echo "0" >/proc/sys/net/ipv4/ip_forward
- sleep 1
- sed -i '/^unmanaged-devices=mac:c8:3a:35:cc:8e:59/d' /etc/NetworkManager/NetworkManager.conf
其作用將關閉無線模擬AP,并將無線網卡交由netmanager網絡管理工具進行托管,這樣我們就可以將其最為傳統的無線網卡進行使用來訪問網絡。
寫在最后:80211AC以及80211AD網絡規范已經發布了一段時間了,使用這兩個網絡規范的無線網絡設備,我們可以更容易的組成一個自主的無線通訊網絡,也許在不久的將來,我們的無線網絡都將是一種雙通道可進可出模式,既可以作為一個設備本身的網絡數據出口又可以成為網絡數據的入口。我們在有限范圍內也許可以徹底的甩掉必須需要使用一個無線AP才能使無線節點進行數據交換的模式。那樣的話無線網絡將會更酷。可喜的是筆者在編譯Hostapd時,其編譯的配置文件中已經包含了對80211AC的支持。