Linux中使用hostapd創(chuàng)建無(wú)線AP及相關(guān)問(wèn)題的處理方法
原創(chuàng)【51CTO專(zhuān)稿】無(wú)線AP可以為傳統(tǒng)的有線局域網(wǎng)提供無(wú)線擴(kuò)展接入,而一般的無(wú)線網(wǎng)卡只能作為客戶端連接到無(wú)線AP。目前市面上很多無(wú)線網(wǎng)卡都具有模擬AP功能,不單可以作為無(wú)線客戶端連接上無(wú)線網(wǎng)絡(luò),也可以切換為模擬AP,供其他無(wú)線客戶端連接。而筆記本上的模擬AP其典型應(yīng)用場(chǎng)景如下:在沒(méi)有無(wú)線路由器的情況下,電腦通過(guò)有線連接到寬帶線路已經(jīng)可以上網(wǎng)。電腦上安裝具有模擬AP功能的無(wú)線網(wǎng)卡,并設(shè)置共享可以訪問(wèn)有線網(wǎng)絡(luò)的網(wǎng)絡(luò)連接,模擬AP與可以訪問(wèn)有線網(wǎng)絡(luò)的網(wǎng)絡(luò)連接就虛擬出一個(gè)"無(wú)線路由器"。
隨著個(gè)人越來(lái)越多的其他的無(wú)線設(shè)備如手機(jī)、PAD以及很多類(lèi)似平板設(shè)備的普及,我們發(fā)現(xiàn)很多時(shí)候我們的外出等特殊情況下讓我們的其他設(shè)備接入有線網(wǎng)絡(luò)已經(jīng)成為了一個(gè)現(xiàn)實(shí)問(wèn)題,那么我們可以充分發(fā)揮我們的隨身筆記本的功能,將其通過(guò)軟件設(shè)置成為模擬AP,這樣就可以解決很多特殊情況下其他設(shè)備上網(wǎng)的問(wèn)題了,如果您是一位WINDONS的用戶,那么在win7下面用"承載網(wǎng)絡(luò)"這一功能來(lái)模擬AP。當(dāng)然,在LINUX系統(tǒng)下我們也可以通過(guò)軟件配置來(lái)實(shí)現(xiàn)這樣的功能。下面筆者將以FEDORA18下使用無(wú)線AP功能為例,講述在LINUX系統(tǒng)下實(shí)現(xiàn)自定義無(wú)線AP的過(guò)程及升級(jí)帶來(lái)的問(wèn)題及解決辦法。
一、實(shí)驗(yàn)環(huán)境:
- 操作系統(tǒng):FEDORA18
- 內(nèi)核版本:3.11.4-101.fc18.i686.PAE
- 無(wú)線網(wǎng)卡型號(hào):tp-link TL-WN310G
二、無(wú)線AP創(chuàng)建過(guò)程:
1、在終端下分別使用命令yum install hostapd、yum install dnsmasq安裝hostapd及dnsmasq軟件組件包。其中hostapd 是 Host Access Point 守護(hù)進(jìn)程,提供對(duì)基于 Linux 的無(wú)線接入點(diǎn)的強(qiáng) WPA2 加密和身份驗(yàn)證。配置 hostapd 非常簡(jiǎn)單,它支持 WPA2-Personal 和 Enterprise,提供了對(duì) WPA2-Personal 的獨(dú)特修改,可讓管理它變得更復(fù)雜或更簡(jiǎn)單,隨后我們可以通過(guò)/etc/hostapd/hostapd.conf配置文件詳細(xì)的配置hostapd的各種參數(shù),讓其將無(wú)線網(wǎng)卡模擬成為無(wú)線AP。而Dnsmasq 提供 DNS 緩存和 DHCP 服務(wù)功能。作為域名解析服務(wù)器(DNS),dnsmasq可以通過(guò)緩存 DNS 請(qǐng)求來(lái)提高對(duì)訪問(wèn)過(guò)的網(wǎng)址的連接速度。作為DHCP 服務(wù)器,dnsmasq 可以為局域網(wǎng)電腦提供內(nèi)網(wǎng)ip地址和路由。DNS和DHCP兩個(gè)功能可以同時(shí)或分別單獨(dú)實(shí)現(xiàn)。dnsmasq輕量且易配置,適用于個(gè)人用戶或少于50臺(tái)主機(jī)的網(wǎng)絡(luò),我們將通過(guò)它來(lái)為我們接入后的客戶端設(shè)備提供DHCP以及DNS服務(wù)。這樣客戶端就可以通過(guò)無(wú)線模擬AP順利訪問(wèn)網(wǎng)絡(luò)。
2、在系統(tǒng)中使用vi命令編輯hostapd配置文件/etc/hostapd/hostapd.conf(該在安裝hostapd軟件組件包時(shí)自動(dòng)創(chuàng)建完成),內(nèi)容如下:
- ctrl_interface=/var/run/hostapd
- ctrl_interface_group=wheel
- # Some usable default settings...
- macaddr_acl=0
- auth_algs=1
- ignore_broadcast_ssid=0
- # Uncomment these for base WPA & WPA2 support with a pre-shared key
- wpa=2
- wpa_key_mgmt=WPA-PSK
- wpa_pairwise=TKIP
- rsn_pairwise=CCMP
- # DO NOT FORGET TO SET A WPA PASSPHRASE!!
- wpa_passphrase=******
- # Most modern wireless drivers in the kernel need driver=nl80211
- #ieee80211n=1
- # Customize these for your local configuration...
- interface=wlan0
- hw_mode=g
- channel=7
- ssid=HOSTAP
- logger_stdout=-1
- logger_stdout_level=2
- max_num_sta=5
在該配置文件中SSID其實(shí)指的就是無(wú)線AP的訪問(wèn)名,用戶可以隨意定義自己喜歡的名字。而wpa_passphrase等號(hào)后的字符其實(shí)就是無(wú)線AP的連接密碼,用戶同樣需要根據(jù)自己的需求進(jìn)行修改。
3、在系統(tǒng)中使用vi命令編輯dnsmasq配置文件/etc/dnsmasq.conf,對(duì)如下行進(jìn)行修改,內(nèi)容如下:
- interface=wlan0
- listen-address=192.168.0.1
- #no-dhcp-interface=
- dhcp-range=192.168.0.50,192.168.0.150,12h
- dhcp-option=3,192.168.0.1
- dhcp-option=6,8.8.8.8
其中dhcp=ranage參數(shù)為dhcp地址范圍,即租借時(shí)間12小時(shí),dhcp-option=3,192.168.0.1為客戶端配置網(wǎng)關(guān),該地址其實(shí)就是模擬為無(wú)線AP無(wú)線網(wǎng)卡的IP地址。
dhcp-option=6,8.8.8.8為客戶端配置dns,用戶應(yīng)該自己修改為外網(wǎng)的dns地址。
4、修改網(wǎng)絡(luò)設(shè)置,打開(kāi)Linux主機(jī)網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)發(fā)功能,命令模式如下:
- echo 1 >/proc/sys/net/ipv4/ip_forward
5、設(shè)置無(wú)線接入點(diǎn)IP地址,命令模式如下:
- ifconfig wlan0 192.168.0.1 netmask 255.255.255.0
6、使用命令systemctl啟動(dòng)hostapd及dnsmasq網(wǎng)絡(luò)服務(wù),命令模式如下:
- systemctl start hostapd.service
- systemctl start dnsmasq.service
7、如果該linux系統(tǒng)開(kāi)啟了防火墻需要使用iptables開(kāi)啟數(shù)據(jù)轉(zhuǎn)發(fā)功能,命令模式如下:
- iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o em1 -j MASQUERADE
- iptables -A FORWARD -s 192.168.0.0/24 -o em1 -j ACCEPT
- iptables -A FORWARD -d 192.168.0.0/24 -m conntrack --ctstate ESTABLISHED, RELATED -i em1 -j ACCEPT
通過(guò)以上配置,在FEDORA18初次安裝后作為無(wú)線AP使用是沒(méi)有問(wèn)題的。
三、問(wèn)題及解決辦法
FEDORA18內(nèi)核升級(jí)到3.11.4-101.fc18.i686.PAE后,啟動(dòng)hostapd系統(tǒng)會(huì)報(bào)類(lèi)似如下錯(cuò)誤:
- nl80211: Failed to set interface wlan0 into AP mode
- nl80211 driver initialization failed.
導(dǎo)致LINUX系統(tǒng)無(wú)法創(chuàng)建模擬無(wú)線AP,終于用GOOGLE在:
- https://wiki.archlinux.org/index.php/Software_Access_Point#NetworkManager_is_interfering
帖子中找到了解決辦法。其實(shí)后來(lái)發(fā)現(xiàn)只需要將netmanager網(wǎng)絡(luò)管理器中無(wú)線網(wǎng)卡設(shè)置為"設(shè)備未托管"狀態(tài),之后hostapd就可以正常啟動(dòng)。
使用sed -i '/\[keyfile\]/a unmanaged-devices=mac:00:23:cd:10:3e:0b' /etc/NetworkManager/NetworkManager.conf;
在/etc/NetworkManager/NetworkManager.conf文件中的[keyfile]字段之后添加內(nèi)容為:
unmanaged-devices=mac:00:23:cd:10:3e:0b的一行,其中"00:23:cd:10:3e:0b"為無(wú)線網(wǎng)卡MAC地址。這樣該網(wǎng)卡就已經(jīng)不再受NetworkManager管理了,在NetworkManager管理器中無(wú)線網(wǎng)絡(luò)狀態(tài)將更改為“設(shè)備未托管”狀態(tài)。
使用sed -i '/^unmanaged-devices=mac:00:23:cd:10:3e:0b/d' /etc/NetworkManager/NetworkManager.conf命令,在文件中刪除 unmanaged-devices=mac:00:23:cd:10:3e:0b這一行內(nèi)容,可將無(wú)線網(wǎng)絡(luò)重新托管在NetworkManager管理器中。
客戶端使用HOSTAPD無(wú)線AP時(shí),網(wǎng)速不穩(wěn)定,導(dǎo)致某些時(shí)刻無(wú)法打開(kāi)網(wǎng)頁(yè)或者其它因?yàn)榫W(wǎng)絡(luò)超時(shí)導(dǎo)致的網(wǎng)絡(luò)不可訪問(wèn)故障。
該問(wèn)題主要是因?yàn)闊o(wú)線數(shù)據(jù)傳輸校驗(yàn)中隨機(jī)種子數(shù)較少導(dǎo)致的無(wú)線網(wǎng)絡(luò)數(shù)據(jù)傳輸時(shí)延過(guò)大導(dǎo)致的,用戶可以通過(guò)命令cat /proc/sys/kernel/random/entropy_avail來(lái)查看具體數(shù)值,該值一般小于1000,用戶需要通過(guò)在終端中執(zhí)行yum install haveged命令安裝隨機(jī)數(shù)生成器(haveged),并使用systemctl enable haveged.servce命令來(lái)啟動(dòng)隨機(jī)數(shù)生成器(haveged)已提高entropy_avail數(shù)值。這樣無(wú)線網(wǎng)絡(luò)時(shí)延將恢復(fù)到正常狀態(tài)。網(wǎng)絡(luò)不在出現(xiàn)以上描述的問(wèn)題。