linux软AP实现,hostapd+dhcpd+dnsmasq
http://blog.csdn.net/cupidove/article/details/38845049
隨著手機、筆記本等無線設備的增多,公司里的家用三個無線路由器已經不堪重負,老是有人說連不上。誰讓咱是運維呢,在很多人眼里運維 =網管 (深表委屈),沒辦法就再兼一個企業網管的職務吧 。給BOSS提出的解決方案有二:一、購買企業無線路由 ,價格從幾百到幾千不等,性能從支持30臺設備到100臺以也不等,最大速率從150M到1300M等也有很多檔次,還有一些其他參數和功能不再一一表述;二、購買無線網卡配合linux hostapd +dhcpd或dnsmasq ,功能方面可以根據需要自由擴展 ,成本一塊無線網卡100元以內,一臺退休的破臺機(而且可以兼做網關,ftp等用)。
一、網卡選擇
不同于windows上,大部分的網卡都支持軟AP ,linux下的網卡需要支持mode master的才可以做軟AP 。具體識別方法如下
1、iwconfig識別
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
[root@localhost ~]$ sudo iwconfig wlan0 mode master
Password:
Error for wireless request “Set Mode” (8B06) :
SET failed on device wlan0 ; Invalid argument.
2、iw識別
上面的操作失敗,證明不支持。再進行進一步的驗證,有些新的網卡用的是mac80211 framework,對于這些網卡的話,用iwconfig來測試它是否支持master模式是行不通的。
因為他們是使用新的 nl80211接口在用戶空間通信的。再使用iw命令進行測試:
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
[root@localhost ~]$ sudo iw list
……..略……………………
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
如果「Supported interface modes」中有「AP」的話,那么恭喜你,你的無線網卡可以架設虛擬AP 。如果沒有則不支持。
3、驅動識別
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
[root@localhost ~]$ sudo ethtool -i wlan0
driver: iwlagn
version: 3.0-ARCH
firmware-version: 8.83.5.1 build 33692
bus-info: 0000:03:00.0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
例如上面的示例中使用的驅動為iwlagn,通過http://wireless.kernel.org/en/users/Drivers AP模式支持的驅動列表里的查找AP項為yes的未發現iwlagn ,證明其不支持。
即然如此,如何在未購買網卡前選擇一款一定支持的網卡呢?wireless.kernel.org也給我們提供了一個方法 ,通過http://wireless.kernel.org/en/users/Devices 硬件列表 (該頁按pci、usb、pcmcia接口類型做了區分,點開相應的類型即可查看具體的硬件)。當然,這個表里列出的并不完全,也并不能保證是最適合做軟AP的硬件 。是否識合請參查看上面的三個方法。
二、hostapd+dnsmasq配置
選擇好網卡,接下來就是linux下的軟件配置。以linux mint為例(基于ubuntu ,以下的示例同樣適用于ubuntu)
1、安裝軟件
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
[root@localhost ~]$ sudo apt-get install hostapd dnsmasq
Dnsmasq是一個小巧且方便地用于配置DNS和DHCP的工具,適用于小型網絡 。如果網絡環境內的機器較多,建議換用dhcpd 。
2、hostapd配置
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
[root@localhost ~]$ sudo vim /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=My_wifi
channel=6
hw_mode=g
ignore_broadcast_ssid=0
auth_algs=1
wpa=3
wpa_passphrase=11111111
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
以上是一個示例配置,配置了一個AP名稱為My_wifi,密碼為8個1的wpa加密方式的軟AP 。配置完成后可以通過hostadp /etc/hostapd/hostapd.conf檢測文件配置 。配置文件正常的話可以通過/etc/init.d/hostapd start啟動,啟動前,請確認以下行是否增加,如果該行值為空的話,請按下面修改
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
sudo vim /etc/init.d/hostapd
將文件中 DAEMON_CONF 的值改成下面這樣:
DAEMON_CONF=/etc/hostapd/hostapd.conf
3、dnsmasq配置
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
sudo vim /etc/dnsmasq.conf
interface=wlan0
listen-address=192.168.100.1
no-dhcp-interface=
dhcp-range=192.168.100.50,192.168.100.150,12h
server=/google/8.8.8.8
上面配置了dnsmasq 監聽的接口,該接口的IP、dhcp地址的范圍、租期長短、dns等。如果想使用dhcpd也可以,這里省略dhcpd.conf的配置 。3、配置無線接入點IP
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
sudo ifconfig wlan0 192.168.100.1 netmask 255.255.255.0 up
4、開啟主機的路由轉發
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
echo 1 >/proc/sys/net/ipv4/ip_forward
以上配置為立即生效,但重啟系統后就會失效,可以使其重啟后有效的方法是修改/etc/sysct.conf文件,在其中增加如下一行:
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p 生效
5、共享上網
關于通過局域網eth0共享上網的方法有兩種:一種是橋接模式,一種是nat模式,這里以nat模式為例:
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
iptables -A FORWARD -i wlan0 -o eth0 -s 192.168.100.0/24 -m state –state NEW -j ACCEPT
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
通過以上步驟配置就可以完成無線AP上網了。
三、wifi-hostapd-ap工具
以上操作步驟也可以通過配置圖形化的工具去操作 ,該工具就是wifi-hostapd-ap 。該工具是由俄羅斯人開發,其圖形界面需要依賴qt 。該工具的安裝方式如下(還是以我筆記本的系統linux mint為例):
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
sudo apt-add-repository ppa:ekozincew/ppa
sudo apt-get update && sudo apt-get install wifi-hostapd-ap
其他linux版本可以通過 https://code.google.com/p/wifi-hostapd-ap/downloads/list 頁面下載安裝。
不過該工具默認為俄語界面,內置的有英語,可通過以下方法修改。如下圖:
hostapd-ap1
選擇好英語,點中間的鍵是保存,保存后退出wifi_hostapd_ap,然后再重新啟動。
hostapd-ap2
如下圖所示已經變成英文,其中editor部分是關于模板的部分,有興趣的可以試試。
hostapd-ap3
hostapd.conf配置相關部分
hostapd-ap4
下面是dnsmasq.conf部分的配置
hostapd-ap5
完成后點擊active激活所有的配置,客戶端連接上后,可以在list of clients上查看目前已連接的客戶端
hostapd-ap6
該部分參考臺灣yahoo部落格格
四、其他
1、關于網卡不能使用軟AP模式
如常見的RTL8187卡王,在windows下可以很方便的做soft AP,換到 hostapd 下就不支持。個人感覺不是網卡硬件不支持,而是由于驅動不支持導致的。想要解決某些在windows下支持的在linux下也支持可以通過修改驅動解決 ,當然這需要想當高的水平 --- 個人觀點 ,不知道是否正確 。
2、freebsd下檢測網卡是否支持soft AP
由于freebsd自身的移定性,很多像軟網關,軟AP都會選擇以freebsd為基礎進行更改,如大名鼎鼎的pfsense 。這里還是以卡王為例,因為手頭有這么一塊卡 。當時想在linux下不行,興許在freebsd下就會支持 。如何查看freebsd下無線網卡是否支持AP模式呢?
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
[root at thor ~]# ifconfig ndis0
ndis0: flags=8802
總結
以上是生活随笔為你收集整理的linux软AP实现,hostapd+dhcpd+dnsmasq的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Microsoft SQL Server
- 下一篇: 角度距离计算坐标公式