我的笔记本电脑有一张 atheros WiFi 卡,我在其上创建了 2 个虚拟接口,使用以下命令:
- iw dev wlan0 接口添加 vlan0 类型站
- iw dev wlan0 接口添加 vlan1 类型站
我修改了它们的 MAC 地址,如下:
- macchanger -e vlan0
- machhanger-e vlan1
然后我打开它们:
- ifconfig vlan0 up
- ifconfig vlan1 up
我想将这两个接口连接到 2 个不同的网络。假设我有 2 个不同的 AP 广播的 SSID1 和 SSID2。
我执行以下命令来执行此操作:
- iw dev vlan1 连接 SSID1
- iw dev vlan2 连接 SSID2
问题是,vlan1 可以连接,但 vlan2 不能。为了找到答案,我跟踪了空中的帧,我发现当要求 vlan2 连接时,它会发送探测请求并从 SSID2 获得探测响应,但它从不发送关联请求。
但是,如果我尝试将 vlan1 和 vlan2 都连接到一个 SSID - SSID1/2,则它们两个都能够连接和关联。
问题是,为什么 2 个不同的虚拟接口不能连接到 2 个不同的网络?
答案1
一般而言,单个 Wi-Fi 卡只有一个无线电,因此每次只能调至一个频道。从某种意义上说,支持 MIMO(2 个或更多空间流)的卡在技术上具有多个无线电,但它们是组合在一起的;它们仅设计为在同一频道上作为一个团队工作。
如果发布您感兴趣的两个 SSID 的最近的 AP 位于不同的信道上,那么您将无法同时连接到这两个信道,因为您的无线电无法同时调到两个信道。尝试在信道之间快速切换(称为“时分双工”或 TDD)并不是成功的秘诀;您最终会丢失两个网络上的大量数据包。即使您的卡明智地使用 802.11 省电模式要求 AP 在客户端位于另一个信道时对数据包进行排队,客户端仍可能会错过重要的多播/广播,包括 ARP 请求。
答案2
如果您只有一张 WIFI 卡,则无法从同一台电脑连接到两个网络。
即使您有两个虚拟机,并尝试将它们连接到两个网络 - 您要做的是让同一台 PC 上的程序使用相同的 WIFI 卡连接到不同的网络。
这是不可能的。
答案3
确实,一些 wifi 设备支持您的场景(我个人不能否认或确认 Spiff 关于使用不同渠道的评论,但是下面的 wiki 没有提到这个限制):
https://wireless.wiki.kernel.org/en/users/Documentation/iw/vif
至少一些 atheros 设备有这种功能,但是对于英特尔 8265 我没有运气。
答案4
虽然进入后期,但这确实是可能的。设置虚拟接口是第一步,但真正的问题是硬件和驱动程序通常无法支持这种事情。例如,硬件本身可能有一个内部状态机,它只支持一次“加入”一个网络。
幸运的是,在 Linux 中,有整个 802.11 mac 层的软件模拟,因此只要您有支持原始数据包的卡,就可以用软件弥补任何缺少的硬件功能。缺点是这样做需要更多 CPU。
Linux mac80211 文档: https://www.kernel.org/doc/html/v4.9/80211/mac80211.html