標籤:rfkill linxu 軟ap hostapd centos7
最近想搞個無線路由,linux下的無線路由/無線AP的實現就是 hostapd 這個軟體了。
網上有很多關於 hostapd 的介紹,百度一下就能得到很多相關的資訊,這裡只是整理我自己配置hostapd的一步驟,過程中也遇到大大小小的坑,方便以後查詢避免。
硬體部分
AP的工作模式我們只需要一塊無線網卡和一塊有線網卡。無線網卡PCI介面或者USB介面的都可以,有線網卡通常整合在主板上或插在主板上百兆/千兆的速率,市面上也很常見。
一般linux系統核心預設就已經支援絕大多數的硬體型號並且工作良好,如果遇到核心無法識別的網卡型號,就需要自己手動安裝驅動模組或者手動編譯。搞定驅動的方法及相關步驟並不在本文的討論範圍之內。
要使用AP模式無線網卡首先要支援AP模式才行。如何檢測無線網卡是否支援AP模式,可以通過下面命令查看:
iw list
[[email protected] ~]# iw listWiphy phy0……省略…… Supported interface modes: * IBSS * managed * AP #說明無線網卡支援AP模式 * AP/VLAN * monitor……省略……
我的Intel Corporation Centrino Wireless-N 105 無線網卡支援5種,AP模式也在受支援的範圍。
軟體部分
我用的是 CentOS 7 的系統,目前已經更新至 CentOS 7.1, 官方實際上並沒有提供hostapd的軟體包,要使用hostapd這個軟體的第一步就是要啟用EPEL的源。
關於EPEL源的介紹請自行百度或看看《CentOS 7 安裝EPEL源》。
1、安裝 EPEL 源
yum update #先更新系統
yum install epel-release #安裝EPEL源
2、安裝 hostapd 軟體
我們可能不知道系統提供哪些有關hostapd的軟體包,可以先搜尋一下有哪些包含hostapd的軟體包。
當然如果沒有安裝並啟用EPEL源的話將無法通過 yum search <軟體包名字串> 命令搜尋到任何結果。安裝並啟用EPEL源後使用下面命令搜尋。
yum search hostapd
[[email protected] ~]# yum search hostapd已載入外掛程式:fastestmirror, remove-with-leavesLoading mirror speeds from cached hostfile============================ N/S matched: hostapd ============================hostapd-logwatch.x86_64 : Logwatch scripts for hostapdhostapd.x86_64 : IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
從上面可以看到hostapd.x86_64就是我們想要的軟體包,使用 yum 進行安裝。
yum install hostapd
那麼接下來配置使用 hostapd 就是從他的軟體包中的檔案入手。因此要先查看hostapd軟體包所提供檔案清單,使用 rpm -ql <軟體包名>進行查詢。
rpm -ql hostapd
[[email protected] ~]# rpm -ql hostapd/etc/hostapd/etc/hostapd/hostapd.conf #最主要的設定檔/etc/sysconfig/hostapd /usr/lib/systemd/system/hostapd.service #服務指令碼/usr/sbin/hostapd #主要的命令/usr/sbin/hostapd_cli……省略……/usr/share/doc/hostapd-2.4/hostapd.conf #該檔案夾下包含相關配置樣本一定要看……省略……/usr/share/man/man1/hostapd_cli.1.gz #man手冊/usr/share/man/man8/hostapd.8.gz
3、啟動或停止 hostapd 操作
如果需要開機自動啟動 hostapd 服務
systemctl enable hostapd.service
手動啟動
systemctl start hostapd.service
重啟
systemctl restart hostapd.service
停止
systemctl stop hostapd.service
禁止開機自動啟動
systemctl disable hostapd.service
4、hostapd AP模式配置
首先要說明的是:預設安裝的 hostapd 是沒有配置的並且無法啟動。
通過上面 rpm -ql hostapd 命令可以看到,hostapd 軟體包已經提供了 hostapd.conf 的最全最詳細的說明,也就是上面軟體包檔案清單中的 /usr/share/doc/hostapd-<版本號碼>/hostapd.conf 這個檔案,只不過裡面全是英文的。有關 hostapd.conf 的中文說明可以看看《CentOS 7 之 hostapd.conf 配置說明》。
按照我們要求 hostapd 正常啟動並工作且滿足下面幾點:
工作在AP模式
串連時要求輸入密碼
工作在AP模式就需要有線網卡和無線網卡進行橋接,這就要求我們首先要建立一個橋接介面。
使用 nmcli 命令來配置:
首先使用 ip link 命令就可以看到哪些本機已經識別是網卡名稱:
ip link
[[email protected] ~]# ip link1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: p2p1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 link/ether 00:14:78:66:2e:a7 brd ff:ff:ff:ff:ff:ff3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000 link/ether 90:94:e4:78:49:b5 brd ff:ff:ff:ff:ff:ff
使用 nmcli 建立一個橋接介面 br0 並設定開機自動連接,“br0”可以自由設定,只要保證上下配置一致就可以。為了方便通用,一般橋接介面都是用這種方式命名。
nmcli connection add type bridge autoconnect yes save yes ifname br0
將有線介面 p2p1 加入到橋接介面 br0 中,CentOS 7 中的網路介面預設不再像以前 eth0 eth1 等這種方式命名,而是會加上匯流排順序等來進行命名,我這裡是的PCI 千兆網卡為 p2p1 有些主板上會類似 enp2s0 這種。
nmcli connection add type bridge-slave autoconnect yes save yes ifname p2p1 master br0
查看介面
[[email protected] ~]# nmcli connection show NAME UUID TYPE DEVICEbridge-br0 bc7e63a4-7fee-4419-8f09-e316a78f42e7 bridge br0bridge-slave-p2p1 59fc1f91-4e60-4388-ad41-1a4937c8ff25 802-3-ethernet p2p1
坑提示:實際上到這一步就可以了,這裡我們只建立了一個只有一個有線介面的橋,並沒有包含無線介面。而事實上 nmcli 命令也並不支援將將無線介面加入橋接器介面 br0 無線介面加入橋接器就只能通過 hostapd.conf 來進行。
雖然將無線網卡介面加入橋接器的命令可以正常執行。
nmcli connection add type bridge-slave autoconnect yes save yes ifname wlp2s0 master br0
但顯示網路連接時注意 DEVICE 欄位,新添加的無線網卡的橋接的 DEVICE 欄位為“--”空。
nmcli connection show
[[email protected] ~]# nmcli connection show NAME UUID TYPE DEVICEbridge-br0 bc7e63a4-7fee-4419-8f09-e316a78f42e7 bridge br0bridge-slave-p2p1 59fc1f91-4e60-4388-ad41-1a4937c8ff25 802-3-ethernet p2p1bridge-slave-wlp2s0 18880002-44c1-4a84-968a-66670c00322f 802-3-ethernet --
當啟用串連時會提示未找到裝置。
nmcli connection up bridge-slave-wlp2s0
[[email protected] ~]# nmcli connection up bridge-slave-wlp2s0 Error: no device found for connection ‘bridge-slave-wlp2s0‘.
好吧……刪掉沒有用的無線橋接串連。
nmcli connection delete bridge-slave-wlp2s0
下面繼續:
之前有提到過有關 hostapd.conf 的中文說明可以看看《CentOS 7 之 hostapd.conf 配置說明》。
這裡只是一個最小化的配置:
# /etc/hostapd/hostapd.conf 最小化配置interface=wlp2s0bridge=br0 #無線網卡橋接到 br0 就是通過這個參數來完成driver=nl80211ssid=testhw_mode=gchannel=1auth_algs=3ignore_broadcast_ssid=0 # 是否廣播,0 廣播wpa=3wpa_passphrase=12345678 # 無線串連密碼
坑提示:我在上面的提示中提到過,之前我們只建立了一個只有一個有線介面的橋。請注意上面 bridge=br0 選項,這個非常重要,如果要運行AP模式就一定要指定要橋接的橋接器介面。bridge=br0 選項說明將無線網卡介面 wlp2s0 加入到橋接器 br0 ,無線網卡介面由第一行 interface=wlp2s0 選項指定。這樣 br0 才是一個包含有線介面 p2p1 和一個無線介面 wlp2s0 的橋接器。
其他命令方式進行配置:
雖然還有其他方式建立橋接器的命令,但是如果是在 CentOS 7 下面,最簡單的還是使用 nmcli 命令,因為 CentOS 7 預設提供 NeteorkManager 這個軟體,使用 nmcli 命令配置好串連後一直有效。但 nmcli 也並不是萬能的,前面有提到過,我目前遇到了兩個問題:1. nmcli 不支援將無線網卡加入到橋接器;2. 到目前為止 nmcli 不支援設定無線網卡靜態IP地址(這個在 hostapd 配置路由模式會遇到)。
關於 CentOS 7 橋接網路設定可以看看《<<<<<<這篇文章>>>>>>>》。
啟動 hostapd 服務
到此我們已經配置了橋接器,橋接器將自動從路由器擷取IP地址、網關及DNS等設定,也就是本機將自動就能上網。hostapd 也配置好了,SSID為test,密碼12345678。因為是橋接介面,所以當無線用戶端串連成功後也將自動從路由器那擷取IP地址、網關及DNS等設定。
現在是時候啟動 hostapd 服務了。
systemctl start hostapd.service
而結果確實啟動失敗,查看服務狀態:
systemctl status hostapd.service
[[email protected] ~]# systemctl status hostapd ● hostapd.service - Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator Loaded: loaded (/etc/systemd/system/hostapd.service; enabled) Active: failed (Result: exit-code) since 一 2015-09-21 20:19:49 CST; 3s ago Process: 6897 ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /run/hostapd.pid $OTHER_ARGS (code=exited, status=1/FAILURE) Main PID: 6897 (code=exited, status=1/FAILURE)9月 21 20:19:49 server hostapd[6897]: wlp2s0: interface state HT_SCAN->DISABLED9月 21 20:19:49 server hostapd[6897]: wlp2s0: AP-DISABLED9月 21 20:19:49 server hostapd[6897]: wlp2s0: Unable to setup interface.9月 21 20:19:49 server hostapd[6897]: wlp2s0: interface state DISABLED->DISABLED9月 21 20:19:49 server hostapd[6897]: wlp2s0: AP-DISABLED9月 21 20:19:49 server hostapd[6897]: hostapd_free_hapd_data: Interface wlp2s0 wasn‘t started9月 21 20:19:49 server hostapd[6897]: nl80211: deinit ifname=wlp2s0 disabled_11b_rates=09月 21 20:19:49 server systemd[1]: hostapd.service: main process exited, code=exited, status=1/FAILURE9月 21 20:19:49 server systemd[1]: Unit hostapd.service entered failed state.9月 21 20:19:49 server systemd[1]: hostapd.service failed.
上面實際上看不出任何問題的具體細節。
5、hostapd 調試
先看看 man hostapd 的手冊瞭解一下如何進行調試。
man hostapd
[[email protected] ~]# man hostapd……省略……hostapd [-hdBKtv] [-P <PID file>] <configuration file(s)> -h Show usage. -d Show more debug messages. #調試選項 -dd Show even more debug messages. #調試選項詳細輸出 -B Run daemon in the background. -P <PID file> Path to PID file. -K Include key data in debug messages. -t Include timestamps in some debug messages. -v Show hostapd version.……省略……
看樣子很簡單大致就是上面的內容。那接下來以偵錯模式運行。
/usr/sbin/hostapd /etc/hostapd/hostapd.conf -d
[[email protected] ~]# /usr/sbin/hostapd /etc/hostapd/hostapd.conf -d……省略……Could not set interface wlp2s0 flags (UP): Operation not possible due to RF-killnl80211: Failed to set interface up after switching mode……省略……
坑提示:“Operation not possible due to RF-kill”,那麼 RF-kill 又是什麼呢?關於 RF-kill 可以看看這篇《rfkill 無線裝置軟開關》。
好吧,先安裝 rfkill 軟體包。
yum install rfkill
看看無線網卡是否被關掉了
rfkill list
[[email protected] ~]# rfkill list0: phy0: Wireless LAN Soft blocked: yes Hard blocked: no
解鎖
rfkill unblock wlan
[[email protected] ~]# rfkill unblock wlan
再次運行偵錯模式
/usr/sbin/hostapd /etc/hostapd/hostapd.conf -d
OK一切正常,那麼就可以結束調試以正常模式啟動服務了
systemctl start hostapd.service
搞定。
6、配置小結
在 hostapd AP模式的配置中實際可能會遇到以及需要解決的問題就是橋接器的配置,而且有點奇葩。
本文出自 “老丁的linux” 部落格,請務必保留此出處http://laoding.blog.51cto.com/980622/1697017
CentOS 7 之 hostapd AP模式配置