OpenWRT中使用无线网卡做中继器与AP热点
中繼器與AP的實(shí)現(xiàn)
這里我們假定中繼器完成下面這樣的一個(gè)功能:
Wired Network ---> Wireless Network ---> 上級(jí)無(wú)線路由器
即從外部插入一個(gè)網(wǎng)線,通過(guò)imx6UL上面的無(wú)線網(wǎng)卡將數(shù)據(jù)轉(zhuǎn)發(fā)到上級(jí)的路由器上面, 當(dāng)然也可以完成下面這樣的傳送:
Wireless Network(AP mode) --> Wireless Network(Client) --> 上級(jí)無(wú)線路由器
即設(shè)立一個(gè)AP熱點(diǎn),相當(dāng)于一個(gè)路由器,然后再將這個(gè)AP的數(shù)據(jù)通過(guò)另外一個(gè)無(wú)線網(wǎng)卡轉(zhuǎn)發(fā)到上一級(jí)的路由器或者WLAN上面。
用圖片來(lái)表示如下:
要完成這些功能, 我們需要:
- 1. 驅(qū)動(dòng)無(wú)線網(wǎng)卡
- 2. 建立AP熱點(diǎn)
- 3. 其中一個(gè)wired或者wireless介入到上一級(jí)路由器或者WLAN中
- 4. 使用IPTables來(lái)對(duì)數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)
對(duì)于1,我們?cè)谇懊嬉呀?jīng)完成,對(duì)于Wired Network訪問(wèn)WLAN我們也已經(jīng)在前面完成。所以這篇我們將完成2與3, 以及4。
AP熱點(diǎn)的建立
建立AP熱點(diǎn),我們使用經(jīng)典的Hostapd工具來(lái)完成, 這個(gè)在OpenWRT中已經(jīng)存在, 直接選上,然后build即可。
Hostapd的使用
然后我們可以查看對(duì)應(yīng)的使用幫助
root@(none):/# hostapd --help hostapd: invalid option -- '-' hostapd v2.5 User space daemon for IEEE 802.11 AP management, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator Copyright (c) 2002-2015, Jouni Malinen <j@w1.fi> and contributorsusage: hostapd [-hdBKtv] [-P <PID file>] [-e <entropy file>] \[-g <global ctrl_iface>] [-G <group>] \<configuration file(s)>options:-h show this usage-d show more debug messages (-dd for even more)-B run daemon in the background-e entropy file-g global control interface path-G group for control interfaces-P PID file-K include key data in debug messages-t include timestamps in some debug messages-v show hostapd version
因此可以確定需要一個(gè)config文件, 這個(gè)configuration file我們?nèi)缦绿顚?#xff1a;
root@(none):/# cat /etc/hostapd_ori.conf interface=wlan1 ssid=TonyOpenWRT channel=9 hw_mode=g ignore_broadcast_ssid=0 auth_algs=1 wpa=3 wpa_passphrase=TonyHo123456 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP即我們創(chuàng)建一個(gè)SSID為TonyOpenWRT的熱點(diǎn), wpa_passphrase為密碼, 后面的為加密方式, 然后還選擇了channel, 這個(gè)channel可以通過(guò)前面的iw list來(lái)查看, 例如其中一個(gè)為:
Frequencies:* 2412 MHz [1] (20.0 dBm)* 2417 MHz [2] (20.0 dBm)* 2422 MHz [3] (20.0 dBm)* 2427 MHz [4] (20.0 dBm)* 2432 MHz [5] (20.0 dBm)* 2437 MHz [6] (20.0 dBm)* 2442 MHz [7] (20.0 dBm)* 2447 MHz [8] (20.0 dBm)* 2452 MHz [9] (20.0 dBm)* 2457 MHz [10] (20.0 dBm)* 2462 MHz [11] (20.0 dBm)* 2467 MHz [12] (disabled)* 2472 MHz [13] (disabled)* 2484 MHz [14] (disabled)
后面的【】中的就是channel了。
建立AP
然后我們使用后臺(tái)運(yùn)行的方式啟動(dòng)hostapd,并且打開debug信息,便于我們查看:
root@(none):/# hostapd -B -d /etc/hostapd_ori.conf random: Trying to read entropy from /dev/random Configuration file: /etc/hostapd_ori.conf rfkill: Cannot open RFKILL control device nl80211: RFKILL status not available nl80211: TDLS supported nl80211: TDLS external setup nl80211: Supported cipher 00-0f-ac:1 nl80211: Supported cipher 00-0f-ac:5 nl80211: Supported cipher 00-0f-ac:2 nl80211: Supported cipher 00-0f-ac:4 nl80211: Supported cipher 00-0f-ac:6 nl80211: Using driver-based off-channel TX nl80211: Use separate P2P group interface (driver advertised support) nl80211: interface wlan1 in phy phy1 nl80211: Set mode ifindex 9 iftype 3 (AP) nl80211: Setup AP(wlan1) - device_ap_sme=0 use_monitor=0 nl80211: Subscribe to mgmt frames with AP handle 0xcfd5d8 nl80211: Register frame type=0xb0 (WLAN_FC_STYPE_AUTH) nl_handle=0xcfd5d8 match= nl80211: Register frame type=0x0 (WLAN_FC_STYPE_ASSOC_REQ) nl_handle=0xcfd5d8 match= nl80211: Register frame type=0x20 (WLAN_FC_STYPE_REASSOC_REQ) nl_handle=0xcfd5d8 match= nl80211: Register frame type=0xa0 (WLAN_FC_STYPE_DISASSOC) nl_handle=0xcfd5d8 match= nl80211: Register frame type=0xc0 (WLAN_FC_STYPE_DEAUTH) nl_handle=0xcfd5d8 match= nl80211: Register frame type=0xd0 (WLAN_FC_STYPE_ACTION) nl_handle=0xcfd5d8 match= nl80211: Register frame type=0x40 (WLAN_FC_STYPE_PROBE_REQ) nl_handle=0xcfd5d8 match= [ 495.443813] IPv6: ADDRCONF(NETDEV_UP): wlan1: link is not ready nl80211: Add own interface ifindex 9 nl80211: if_indices[16]: 9 phy: phy1 BSS count 1, BSSID mask 00:00:00:00:00:00 (0 bits) nl80211: Regulatory information - country=00 nl80211: 2402-2472 @ 40 MHz 20 mBm nl80211: 2457-2482 @ 40 MHz 20 mBm (no IR) nl80211: 2474-2494 @ 20 MHz 20 mBm (no OFDM) (no IR) nl80211: 5170-5250 @ 160 MHz 20 mBm (no IR) nl80211: 5250-5330 @ 160 MHz 20 mBm (DFS) (no IR) nl80211: 5490-5730 @ 160 MHz 20 mBm (DFS) (no IR) nl80211: Added 802.11b mode based on 802.11g information Completing interface initialization Mode: IEEE 802.11g Channel: 9 Frequency: 2452 MHz DFS 0 channels required radar detection nl80211: Set freq 2452 (ht_enabled=0, vht_enabled=0, bandwidth=20 MHz, cf1=2452 MHz, cf2=0 MHz)* freq=2452* vht_enabled=0* ht_enabled=0 RATE[0] rate=10 flags=0x1 RATE[1] rate=20 flags=0x1 RATE[2] rate=55 flags=0x1 RATE[3] rate=110 flags=0x1 RATE[4] rate=60 flags=0x0 RATE[5] rate=90 flags=0x0 RATE[6] rate=120 flags=0x0 RATE[7] rate=180 flags=0x0 RATE[8] rate=240 flags=0x0 RATE[9] rate=360 flags=0x0 RATE[10] rate=480 flags=0x0 RATE[11] rate=540 flags=0x0 hostapd_setup_bss(hapd=0xcfcf50 (wlan1), first=1) wlan1: Flushing old station entries nl80211: flush -> DEL_STATION wlan1 (all) wlan1: Deauthenticate all stations nl80211: send_mlme - da= ff:ff:ff:ff:ff:ff noack=0 freq=0 no_cck=0 offchanok=0 wait_time=0 fc=0xc0 (WLAN_FC_STYPE_DEAUTH) nlmode=3 nl80211: send_mlme -> send_frame nl80211: send_frame - Use bss->freq=2452 nl80211: send_frame -> send_frame_cmd nl80211: Frame command failed: ret=-16 (Device or resource busy) (freq=2452 wait=0) wpa_driver_nl80211_set_key: ifindex=9 (wlan1) alg=0 addr=(nil) key_idx=0 set_tx=0 seq_len=0 key_len=0 wpa_driver_nl80211_set_key: ifindex=9 (wlan1) alg=0 addr=(nil) key_idx=1 set_tx=0 seq_len=0 key_len=0 wpa_driver_nl80211_set_key: ifindex=9 (wlan1) alg=0 addr=(nil) key_idx=2 set_tx=0 seq_len=0 key_len=0 wpa_driver_nl80211_set_key: ifindex=9 (wlan1) alg=0 addr=(nil) key_idx=3 set_tx=0 seq_len=0 key_len=0 Using interface wlan1 with hwaddr 94:0c:6d:7c:12:f6 and ssid "TonyOpenWRT" Deriving WPA PSK based on passphrase SSID - hexdump_ascii(len=11):54 6f 6e 79 4f 70 65 6e 57 52 54 TonyOpenWRT PSK (ASCII passphrase) - hexdump_ascii(len=12): [REMOVED] PSK (from passphrase) - hexdump(len=32): [REMOVED] random: Got 15/20 bytes from /dev/random random: Only 15/20 bytes of strong random data available from /dev/random random: Not enough entropy pool available for secure operations WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects GMK - hexdump(len=32): [REMOVED] Key Counter - hexdump(len=32): [REMOVED] WPA: Delay group state machine start until Beacon frames have been configured nl80211: Set beacon (beacon_set=0) nl80211: Beacon head - hexdump(len=62): 80 00 00 00 ff ff ff ff ff ff 94 0c 6d 7c 12 f6 94 0c 6d 7c 12 f6 00 00 00 00 00 00 00 00 00 00 64 00 11 04 00 0b 54 6f 6e 79 4f 70 65 6e 57 52 54 01 08 82 84 8b 96 0c 12 1y01 09 nl80211: Beacon tail - hexdump(len=65): 2a 01 04 32 04 30 48 60 6c 30 14 01 00 00 0f ac 02 01 00 00 0f ac 04 01 00 00 0f ac 02 00 00 dd 16 00 50 f2 01 01 00 00 50 f2 02 01 00 00 50 f2 02 01 00 00 50 f2 02 7f 08 00 nl80211: ifindex=9 nl80211: beacon_int=100 nl80211: dtim_period=2 nl80211: ssid - hexdump_ascii(len=11):54 6f 6e 79 4f 70 65 6e 57 52 54 TonyOpenWRT * beacon_int=100 nl80211: hidden SSID not in use nl80211: privacy=1 nl80211: auth_algs=0x1 nl80211: wpa_version=0x3 nl80211: key_mgmt_suites=0x2 nl80211: pairwise_ciphers=0x18 nl80211: group_cipher=0x8 nl80211: SMPS mode - off nl80211: beacon_ies - hexdump(len=10): 7f 08 00 00 00 00 00 00 00 40 nl80211: proberesp_ies - hexdump(len=10): 7f 08 00 00 00 00 00 00 00 40 nl80211: assocresp_ies - hexdump(len=10): 7f 08 00 00 00 00 00 00 00 40 WPA: Start group state machine to set initial keys WPA: group state machine entering state GTK_INIT (VLAN-ID 0) GTK - hexdump(len=32): [REMOVED] WPA: group state machine entering state SETKEYSDONE (VLAN-ID 0) wpa_driver_nl80211_set_key: ifindex=9 (wlan1) alg=2 addr=0x8dc74 key_idx=1 set_tx=1 seq_len=0 key_len=32 nl80211: KEY_DATA - hexdump(len=32): [REMOVED]broadcast key nl80211: Set wlan1 operstate 0->1 (UP) netlink: Operstate: ifindex=9 linkmode=-1 (no change), operstate=6 (IF_OPER_UP) wlan1: interface state UNINITIALIZED->ENABLED wlan1: AP-ENABLED wlan1: Setup of interface done. ctrl_iface not configured!
其中里面用到了加密時(shí)候需要的隨機(jī)數(shù),這個(gè)是使用內(nèi)核中的random節(jié)點(diǎn)來(lái)生成的,所以我們?cè)趦?nèi)核這兩個(gè)還需要添加random驅(qū)動(dòng)。
驗(yàn)證AP
在驗(yàn)證之前,我們需要給我們的這個(gè)網(wǎng)卡自己一個(gè)IP地址, 因此直接:
root@(none):/# ifconfig wlan1 192.168.2.1 root@(none):/# ifconfig wlan1 wlan1 Link encap:Ethernet HWaddr 94:0c:6d:7c:12:f6 inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0inet6 addr: fe80::960c:6dff:fe7c:12f6/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:131 errors:0 dropped:0 overruns:0 frame:0TX packets:106 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:20162 (19.6 KiB) TX bytes:20954 (20.4 KiB)
然后我們打開手機(jī)查看是否可以看到我們的熱點(diǎn):
然后我們使用手動(dòng)配置IP方式連接熱點(diǎn)
連接完成后, 我們可以看到已經(jīng)連接的狀態(tài):
然后在手機(jī)上面可以Ping一把確定是否連通:
然后在iMX6UL上面也來(lái)ping一把這個(gè)手機(jī):
root@(none):/# ping 192.168.2.111 PING 192.168.2.111 (192.168.2.111): 56 data bytes 64 bytes from 192.168.2.111: seq=0 ttl=64 time=90.952 ms 64 bytes from 192.168.2.111: seq=1 ttl=64 time=143.093 ms 64 bytes from 192.168.2.111: seq=2 ttl=64 time=4.508 ms 64 bytes from 192.168.2.111: seq=3 ttl=64 time=46.859 ms 64 bytes from 192.168.2.111: seq=4 ttl=64 time=2.539 ms 64 bytes from 192.168.2.111: seq=5 ttl=64 time=2.697 ms ^C --- 192.168.2.111 ping statistics --- 6 packets transmitted, 6 packets received, 0% packet loss round-trip min/avg/max = 2.539/48.441/143.093 ms
至此,基本的連接就好了, 如果想要自動(dòng)獲取IP地址,那么我們還需要配置DHCPD。
wpa_supplicant的配置
前面我們使用其中一個(gè)網(wǎng)卡,配置好了AP, 接下來(lái)我們使用另外一個(gè)Wireless作為上一級(jí)router的接入設(shè)備。 這個(gè)可以參考我以前寫的文章: Yocto i.MX6 (TQIMX6) (03) : wifi網(wǎng)卡的相關(guān)工具wpa_supplicant與dhcp
但是wpa_supplicant的版本升級(jí)后, 和hostapd的使用基本一致起來(lái), 因此以前的使用方法稍微有些不同了。
配置
創(chuàng)建一個(gè)配置文件,寫明需要接入的SSID,密碼等信息:
root@(none):/# cat /etc/wpa.conf ctrl_interface=/var/run/wpa_supplicant network={ssid="XXX"proto=WPAkey_mgmt=WPA-PSKpairwise=TKIPgroup=TKIPpsk="PASSWORD" }
其中XXX是路由器的熱點(diǎn)名字, psk填寫Password, 加密方式TKIP需要根據(jù)實(shí)際情況填寫,不明白可以看我以前的文章,或者直接man。
運(yùn)行
先創(chuàng)建一個(gè)runtime目錄:
root@(none):/# mkdir /var/run/wpa_supplicant
然后直接在后臺(tái)運(yùn)行:
root@(none):/# wpa_supplicant -B -iwlan0 -c /etc/wpa.conf Successfully initialized wpa_supplicant rfkill: Cannot open RFKILL contro[ 172.506937] ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin' l device [ 172.527112] ieee80211 phy0: rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29 [ 173.083412] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready root@(none):/# [ 174.937567] wlan0: authenticate with bc:d1:77:a0:4f:3c [ 175.073446] wlan0: send auth to bc:d1:77:a0:4f:3c (try 1/3) [ 175.082318] wlan0: authenticated [ 175.087051] rt2800usb 1-1.2.1:1.0 wlan0: disabling HT/VHT due to WEP/TKIP use [ 175.098735] wlan0: associate with bc:d1:77:a0:4f:3c (try 1/3) [ 175.108018] wlan0: RX AssocResp from bc:d1:77:a0:4f:3c (capab=0x411 status=0 aid=5) [ 175.129960] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready [ 175.136678] wlan0: associated [ 176.069997] IPv6: wlan0: IPv6 duplicate address fe80::7edd:90ff:feb2:73b1 detected!
驗(yàn)證
使用wpa_cli看查看連接的狀態(tài)
root@(none):/# wpa_cli status Selected interface 'wlan0' bssid=bc:d1:77:a0:4f:3c freq=2412 ssid=XXX id=0 mode=station pairwise_cipher=TKIP group_cipher=TKIP key_mgmt=WPA-PSK wpa_state=COMPLETED address=7c:dd:90:b2:73:b1 uuid=1e82e362-f927-544e-aa4d-1a229533944cstatus為COMPLETED那么表示連接上了, 然后我們獲取IP地址, 并嘗試ping國(guó)內(nèi)的某個(gè)網(wǎng)站:
root@(none):/# udhcpc -i wlan0 udhcpc (v1.24.1) started Sending discover... Sending select for 192.168.1.112... Lease of 192.168.1.112 obtained, lease time 86400 /etc/udhcpc.d/50default: Adding DNS 192.168.1.1 /etc/udhcpc.d/50default: Adding DNS 0.0.0.0root@(none):/# ping meitu.com PING meitu.com (42.62.69.156): 56 data bytes 64 bytes from 42.62.69.156: seq=0 ttl=42 time=44.499 ms 64 bytes from 42.62.69.156: seq=1 ttl=42 time=44.956 ms 64 bytes from 42.62.69.156: seq=2 ttl=42 time=43.122 ms 64 bytes from 42.62.69.156: seq=3 ttl=42 time=43.387 ms 64 bytes from 42.62.69.156: seq=4 ttl=42 time=46.467 ms 64 bytes from 42.62.69.156: seq=5 ttl=42 time=46.267 ms 64 bytes from 42.62.69.156: seq=6 ttl=42 time=43.843 ms ^C --- meitu.com ping statistics --- 7 packets transmitted, 7 packets received, 0% packet loss round-trip min/avg/max = 43.122/44.648/46.467 ms 至此, 我們就完成了基本的配置工作。
總結(jié)
以上是生活随笔為你收集整理的OpenWRT中使用无线网卡做中继器与AP热点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言程序设计期末作业——航班
- 下一篇: 聊一聊团队管理:如何搭建自己的管理体系!