
如果我只有 1 个物理 WLAN 接口,是否可以通过一些技术使其成为现有接入点的客户端,同时又可以充当其他客户端的接入点?
我有一个现有的 802.11g ADSL 路由器,我准备构建一个具有 802.11n 的 HTPC。我的笔记本电脑也有 802.11n,但目前它只能以 54Mbps 的速度连接,因为这是 AP 支持的。我希望能够让 HTPC 成为我的 ADSL 路由器的客户端,但让我的笔记本电脑成为 HTPC 的客户端,这样将文件复制到它的速度会更快。
可能的?
编辑:显然我可以使用以太网将 HTPC 连接到 ADSL 路由器并禁用路由器上的 wifi,但我们忽略该选项。:-)
答案1
我个人以前没有这样做过,但这里有一些信息可以帮助你朝着正确的方向前进。
从协议角度来看,让单个无线电同时充当 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 上搜索类似“无线电子烟“获取更多信息。我从这里。
哦,还有一些神话破灭:Atheros 卡在消费类机器中并不罕见。他们是 802.11 芯片组的主要参与者,与 Broadcom、Marvell、Intel 和 Ralink 并列。仅仅因为我使用了 MadWifi/Atheros 的例子,并不意味着没有其他主要参与者的芯片的 Linux 驱动程序可以做类似的事情。此外,802.11s 是不是需要这样做。说您必须使用 802.11s 才能做到这一点,就像说您必须支持生成树协议才能将帧从一个接口转发到另一个接口一样。
答案2
来源及更多信息:
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
配置
设置接入点包括两个主要部分:
- 设置 Wi-Fi 链路层,以便无线客户端可以关联到您计算机的软件接入点并与其交换 IP 数据包。
- 在您的计算机上设置网络配置,以便它能够在其自己的互联网连接和无线客户端之间正确地中继 IP 数据包。
工具
创建_ap
create_ap 软件包提供了一个脚本,可以创建用于互联网共享的桥接或 NAT 接入点。它结合了 hostapd、dnsmasq 和 iptables,以确保接入点正常运行。创建 NAT 虚拟网络的基本语法如下:
# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
答案3
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。我也测试了这一点,效果很好。奇怪的是内核文档 wiki 没有提到它。