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

Tha*_*Guy 14 linux wireless-networking

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

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

可能的?

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

Spi*_*iff 10

我个人之前没有这样做过,但这里有一些信息可以帮助您朝着正确的方向前进。

从协议的角度来看,绝对有可能让单个无线电同时作为 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
Run Code Online (Sandbox Code Playgroud)

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

您可能想在 Google 上搜索“ wifi vap ”之类的内容以获取更多信息。我从这里复制了上述命令。

哦,还有一些神话破灭:Atheros 卡在消费机器中并不少见。他们是 802.11 芯片组的主要参与者,还有 Broadcom、Marvell、Intel 和 Ralink。并且仅仅因为我使用了 MadWifi/Atheros 的例子,并不意味着其他主要玩家的芯片没有 Linux 驱动程序可以做类似的事情。另外,802.11s中是不是需要这个。说你必须做 802.11s 才能做到这一点就像说你必须支持生成树协议才能将帧从一个接口转发到另一个接口。


mus*_*dan 6

来源和更多信息:

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
Run Code Online (Sandbox Code Playgroud)

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

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

...
    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * WDS
         * monitor
         * mesh point
...
Run Code Online (Sandbox Code Playgroud)

带有单个 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
...
Run Code Online (Sandbox Code Playgroud)

约束#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
Run Code Online (Sandbox Code Playgroud)

配置

设置接入点包括两个主要部分:

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

工具

创建_ap

create_ap 包提供了一个脚本,可以为互联网共享创建桥接或 NATed 接入点。它结合了 hostapd、dnsmasq 和 iptables 以实现接入点的良好运行。创建 NATed 虚拟网络的基本语法如下:

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
Run Code Online (Sandbox Code Playgroud)