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

背景

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

 $ sudo brctl addbr br0
 $ sudo brctl addif br0 wlan0
 can't add wlan0 to bridge br0: Operation not supported

发现

wifi Station模式的限制

wifi 标准限定 Station 模式下的接口不能与其他接口直接桥接;
参考:https://superuser.com/questions/597834/bridging-wifi-to-ethernet-on-ubuntu-not-working/658143#658143

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…

其他方案

VirtualBox

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

root@XXXXX:~/ # dmesg | grep VBoxNetFlt
[42706.661956] VBoxNetFlt: attached to 'wlo1' / e4:f8:9c:00:00:00
 
root@XXXXX:~/ # modinfo vboxnetflt 
filename:       /lib/modules/4.9.0-8-amd64/misc/vboxnetflt.ko
version:        5.2.6 r120293 ((0xA2CDe001U))
license:        GPL
description:    Oracle VM VirtualBox Network Filter Driver
author:         Oracle Corporation
srcversion:     BB20500B0B118D3871FEA6B
depends:        vboxdrv
retpoline:      Y
vermagic:       4.9.0-8-amd64 SMP mod_unload modversions
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 下的其他设备

使用 ARP Proxy 方案

参考:Bridging Network Connections with Proxy ARP

libpcap

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

参考链接

  1. http://madwifi-project.org/wiki/AboutWDS#WhatisneededforWDS
  2. https://wireless.wiki.kernel.org/en/users/documentation/iw#using_4-address_for_ap_and_client_mode
  3. http://80211notes.blogspot.com/2013/09/understanding-address-fields-in-80211.html
  4. https://askubuntu.com/questions/155041/bridging-loosing-wlan-network-connection-with-4addr-on-option-why
  5. https://wiki.debian.org/BridgeNetworkConnectionsProxyArp
  6. https://superuser.com/questions/597834/bridging-wifi-to-ethernet-on-ubuntu-not-working/658143#658143
  7. http://lists.infradead.org/pipermail/hostap/2016-May/035670.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值