一些有趣的事实:关于 Wlan 和 Bridge

1. 背景

尝试将笔记本电脑的 WiFi 网络在二层共享给qemu虚拟机,想当然地就执行了以下命令:


2. 一些发现

2.1 wifi 标准限定 Station 模式下的接口不能与其他接口直接桥接

参考:https://superuser.com/questions/597834/bridging-wifi-to-ethernet-on-ubuntu-not-working/658143#658143

2.2 4-address 模式

4-address 指的是802.11包头部里面的4个MAC地址字段,设计的目的在于支持 WDS 桥接,多余的两个MAC地址用来表示以太网帧的 Source 和 Destination,参考 What is needed for WDS

- sender of the ethernet frame
- receiver of the ethernet frame
- sender of the WLAN frame
- receiver of the WLAN frame

使用 iw dev wlan0 set 4addr on 会开启4addr模式,然后可以通过 brctl 将其添加到桥接接口中;
但是此时网卡是无法作为 Station 正常工作的,因为AP并没有启用这种模式,也就会忽略来自 Staion 的 4-addr 模式的包;参考:Bridging: Loosing WLAN network connection with 4addr on option - Why

另外,使用这种 WDS 很大概率会和其他厂家的WDS方案不兼容;

总结: 4-addr 确实是无线网络桥接(Wlan to Ether)的解决方案,但是要求该 AP 下的所有 Station 同时使用这一模式,具体实施较不方便。
(有一个繁琐的解决措施, AP 或者 Station 建立两个虚拟的无线网络接口,4-addr 模式分别为 on 和 off.....

2.3 其他方案

  • 2.3.1 VirtualBox
    实际上 VirtualBox 是能够直接桥接到宿主机的wifi接口上的,可以发现其使用了一个内核模块,这里猜测也就是所谓的 “spoof MAC”,因为在AP侧看到宿主机、虚拟机IP所对应的MAC地址相同;
    Ps: 如果 AP 做了一些安全加固,可能不允许一个 associated 设备出现多个MAC或IP地址;
    Pss: 具体 VirtualBox 的代码实现并没有查阅, 以上为个人猜测;

  • 2.3.2 TP-Link 等路由厂家的WDS方案
    实际上在多年以前,笔者就通过 TP-Link 路由器的WDS桥接功能,将其作为“ WLAN to Ether ”这样一个特殊的设备在用;因为两个路由器桥接之后,二层打通了,因此通过网线连接电脑也是同处一个二层网络的(ARP正常工作,未共享MAC地址?)。
    实际上这两个路由器之间有没有悄悄地使用 4-address 的方式建立桥接,或者是其他办法实现的 WDS 协议,暂时还没有作更深入研究。
    备注:
    TP-Link (VxWorks) 桥接 TP-Link (VxWorkd) ==> 成功
    TP-Link (VxWorks) 桥接 OpenWRT(hostapd 未配置 wds_sta=1) ==> 成功
    TP-Link (VxWorks) 桥接 Padavan ==> 失败 => TP-Link 和 Padavan 互通,但是 TP-Link 下的 Wifi 客户端仅能和 TP 联通,无法到达 padavan 以及 padavan 下的其他设备

  • 2.3.3 使用 ARP Proxy 方案
    参考:Bridging Network Connections with Proxy ARP

  • 2.3.4 libpcap
    一些奇奇怪怪的模拟器,使用 libpcap 的方案,实现一个虚拟的“网卡”,对所有数据包进行监听处理,响应ARP请求等,对外部表现为一个正常的具有独立MAC、IP 的设备。

3. 参考链接

《一些有趣的事实:关于 Wlan 和 Bridge》有2个想法

    1. 这么刺激的吗? 估计是缓存插件导致的吧,我看下
      感谢反馈:)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注


The reCAPTCHA verification period has expired. Please reload the page.