如何将wifi配置成repeater模式

前段时间需要在嵌入式板子上实现wifi的repeater模式,同一个无线网卡即做AP又做client。下面介绍一下如何实现:

1.确认网卡是否支持AP模式

    iw list 命令将输出AP是否支持AP模式

    Supported interface modes:

                 IBSS

                 managed

                 AP

                 AP/VLAN

                 monitor

    如果输出的supported interface modes中有AP说明此网卡支持AP模式,如果没有,接下来的工作就不需要做了,网卡不支持AP

2.将无线网卡分成两个虚拟网卡

    如果一个系统有两个无线网卡,暂且命名为wlan0和wlan1.如果想让这个设备既可以做AP,又可以连接外网。做法应该是这样的,将wlan0作为client,连接一个路由器;将wlan1作AP,产生一个热点,其他设备来连接这个热点。然后再将wlan0和wlan1桥接或者NAT方式打通。这样连接在AP上的设备就可以上网了。

    同理如果一个网卡也可以这么做,通过iw命令可以实现:

    #!/usr/rootdirs/bin/bash

    ifconfig wlan0 down
    sleep 1
    iw dev wlan0 interface add wlan0_sta type managed addr 04:f0:21:35:d7:24
    sleep 1
    iw dev wlan0 interface add wlan0_ap type managed addr 12:34:56:78:ab:ce

3.用其中一个网卡连接外部路由

    通过 命令 wpa_supplicant -B -Dnl80211 -i  wlan0_sta -c  wpa_supplicant.conf

    wpa_supplicant.conf 文件是需要连接到路由的配置信息,如SSID,password等,这里就不贴出来了

    当上面的命令执行成功,即wlan0_sta连接到了外部路由器,需要将此时的channel获取到。为什么呢?因为用同一个无线网卡虚拟出来的两个无线网卡,如要实现repeater模式必须在同一个channel上,而且必须和外部路由处于同一个channel上。所以接下来的wlan0_ap的channel就要以现在获取的为准。如何获取通道,执行如下命令:

    iw dev wlan0_sta info | grep channel | awk '{print $2}'

4.用剩下的那个网卡启动AP模式

    根据步骤3的channel设置hostapd.conf文件,然后执行:

     hostapd -B hostapd.conf 

5.将wlan0_sta和wlan0_ap关联起来

iptables -t nat -A POSTROUTING -o wlan0_sta -j MASQUERADE
iptables -A FORWARD -i wlan0_sta -o wlan0_ap -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0_ap -o wlan0_sta -j ACCEPT

posted @ 2018-03-28 17:17  huafeihua  阅读(1914)  评论(0)    收藏  举报