Linux机器可以使用单个物理WLAN接口同时充当无线客户端和接入点吗?


12

如果我只有1个物理WLAN接口,是否可以做一些黑客操作,使其既可以成为现有接入点的客户端,又可以充当其他客户端的接入点?

我有一个现有的802.11g ADSL路由器,并且我将要构建一个具有802.11n的HTPC。我的笔记本电脑也具有802.11n,但目前只能以54Mbps的速度连接,因为那是AP所支持的。我希望能够使HTPC成为我的ADSL路由器的客户端,但是让我的笔记本电脑成为HTPC的客户端,因此将文件复制到它的速度更快。

可能?

编辑:很明显,我可以使用以太网将HTPC连接到ADSL路由器,并禁用路由器上的wifi,但是让我们忽略该选项。:-)

Answers:


9

我以前没有亲自做过,但是这里有一些信息可以帮助您朝正确的方向前进。

从协议的角度来看,绝对有可能让单个无线电同时充当AP和客户端STA。如果您要创建的AP和您作为客户端加入的AP在同一频道上,则效果最佳(或几乎是强制性的)。让无线电卡必须保持将频道切换到服务请求,这是丢帧和糟糕性能的秘诀。

从软件角度来看,这已成为可能。Linux上的多个802.11卡驱动程序支持VAP(虚拟AP)的概念,该概念允许单个卡同时充当多个AP(多个SSID,甚至BSSID)。与直觉相反,术语VAP表示同一802.11卡上的任何类型的虚拟接口,无论该虚拟接口是否处于AP模式。因此,在这些卡/驱动程序组合上,您可以创建两个VAP-STA模式VAP

用于基于Atheros的卡的MadWifi驱动程序是一种支持VAP的驱动程序。如果您的802.11卡使用Atheros芯片组,并且安装了正确版本的MadWifi驱动程序,则可以将卡配置为同时STA + AP模式,如下所示:

wlanconfig ath0 create wlandev wifi0 wlanmode sta
wlanconfig ath1 create wlandev wifi0 wlanmode ap

请注意,这些并不是有关设置所有内容的完整说明,而只是一种使您入门的尝试。

您可能需要向Google购买“ wifi vap ”之类的详细信息。我从这里复制了以上命令。

哦,还有一个神话破灭:Atheros卡在消费类计算机中并不罕见。它们是Broadcom,Marvell,Intel和Ralink等802.11芯片组的主要参与者。仅仅因为我使用了MadWifi / Atheros的示例,并不意味着没有其他主要竞争对手的芯片可以使用类似功能的Linux驱动程序。另外,802.11s中是不是需要这个。说您必须执行802.11s就像说您必须支持生成树协议一样,只是要将帧从一个接口转发到另一个接口。


看来我所获得的主板确实具有Atheros芯片组,所以我可能很幸运。我正在等待交付组件,然后可以进行构建和测试。
— ThatGraemeGuy 2010年

我还没有机会和MadWifi一起玩。我接受,因为答案是正确的,似乎没有其他芯片组/家族可以提供此功能。
— ThatGraemeGuy 2010年

Spiff,我正在使用Atheros芯片和madwifi,正在尝试在sta中建立一个VAP,在ap中建立一个VAP。我可以在ap模式下设置多个VAP,但是当我在sta中设置第一个VAP,然后尝试在ap中设置另一个VAP时,出现wlanconfig:ioctl:输入/输出错误。您对如何处理有任何想法吗?
— sachinr 2013年

1
@sachinr作为一个问题来提问,这样每个人都可以看到,而不仅仅是对一个已有三年历史的对他人问题的答案的评论。
— Spiff 2013年

嘿,我在这里添加了我的问题-superuser.com/questions/649742/…。你可以看看吗?谢谢:)
— sachinr

4

nl80211驱动程序具有一种称为“托管”接口模式的东西。您可以使用“ iw”实用程序对其进行配置,如下所示:

iw phy phy0接口添加托管的wlan1类型

有关更多信息,请访问https://wireless.wiki.kernel.org/en/users/documentation/iw。Phy0指的是您在/ sys / class / ieee80211 /中看到的内容。

我还看到rPI3做了类似的事情,但是具有更暗的“ __ap”界面模式。这样,用户可以创建仅在AP模式下运行的第二个接口,并将初始接口用作客户端模式。

无论您以何种方式实现它(驱动程序显然必须支持它),都将需要两个接口(来自同一物理设备)。一个接口可以简单地将wpa_supplicant作为客户端模式运行,另一个接口(AP模式)通常使用hostapd播放访问点。

[编辑:]

iw工具的源代码使有关__ap的阴暗模式更加清楚:

..
} else if (strcmp(tpstr, "__ap") == 0) {
    *type = NL80211_IFTYPE_AP;
    return 0;
} else if (strcmp(tpstr, "__ap_vlan") == 0) {
    *type = NL80211_IFTYPE_AP_VLAN;
    return 0;
} else if (strcmp(tpstr, "wds") == 0) {
    *type = NL80211_IFTYPE_WDS;
    return 0;
} else if (strcmp(tpstr, "managed") == 0 ||
       strcmp(tpstr, "mgd") == 0 ||
       strcmp(tpstr, "station") == 0) {
    *type = NL80211_IFTYPE_STATION;
    return 0;
} 
..

__ap模式转换为网络链接类型NL80211_IFTYPE_AP。我也对此进行了测试,并且效果很好。奇怪的是,内核文档维基没有提及它。


4

来源和更多信息:

https://wiki.archlinux.org/index.php/Software_access_point

简短答案

sudo iw dev wlan0 interface add wlan0_ap type managed
sudo create_ap wlan0_ap wlan0 createap mypassword

Wi-Fi设备必须支持AP模式

您需要兼容nl80211的无线设备,该设备支持AP操作模式。可以通过运行iw list命令来验证这一点,在“支持的接口模式”块下应列出AP:

...
    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * WDS
         * monitor
         * mesh point
...

带有单个Wi-Fi设备的无线客户端和软件AP

创建软件AP独立于您自己的网络连接(以太网,无线等)。许多无线设备甚至支持同时作为AP和作为无线“客户端”同时运行。使用该功能,您可以使用单个无线设备来创建充当现有网络的“无线转发器”的软件AP。iw list的输出的以下部分列出了该功能:

有效的接口组合:

$ iw list
...
valid interface combinations:
     * #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
       total <= 3, #channels <= 2
...

约束#channels <= 1表示您的软件AP必须在与Wi-Fi客户端连接相同的信道上运行;请参阅下面的hostapd.conf中的频道设置。

如果您想使用功能/特性,可能是因为以太网连接不可用,您需要创建两个单独的虚拟接口来使用它。可以如下创建物理设备wlan0的虚拟接口:为网络连接本身(wlan0_sta)和软件AP / hostapd“无线转发器”创建具有唯一MAC地址的虚拟接口:

# iw dev wlan0 interface add wlan0_sta type managed 
# iw dev wlan0 interface add wlan0_ap  type managed

组态

设置访问点包括两个主要部分:

  1. 设置Wi-Fi链路层,以便无线客户端可以关联到计算机的软件访问点并与其交换IP数据包。
  2. 在您的计算机上设置网络配置,以使其在其自己的Internet连接和无线客户端之间正确中继IP数据包。

工具类

create_ap

create_ap软件包提供了一个脚本,该脚本可以创建桥接或NATed访问点以进行Internet共享。它结合了hostapd,dnsmasq和iptables,以实现访问点的良好功能。创建NATed虚拟网络的基本语法如下:

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

好答案,谢谢!
— 伊曼·阿克巴里

我认为这是一个很好的答案,尤其是有关渠道约束的问题
— crazystick
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.