The*_*unk 1 wifi dhcp bridge networkmanager tap
我正在尝试创建多个 Linux TAP 接口并允许它们通过单个 WIFI 适配器发送/接收数据包。出于所有意图和目的,我希望 TAP 接口充当成熟的网络适配器。它们应该能够请求自己的 DHCP 地址并像任何其他网络适配器一样在本地网络上进行交互。
我已经设法使用以太网适配器使其工作,但我听说 WiFi 是一种不同的野兽。我不记得确切的推理,但它与“每个无线电广播地址 1 个 IP 地址”有关。
是否有可能使用 TAP 接口通过 WiFi 连接进行桥接网络?我可以使用网络管理器进行任何配置吗?有人可以链接一两篇文章吗?我很难在这方面找到任何东西。
这个网络工程 SE 链接802.11 帧头中的四个第 2 层地址很好地解释了以太网和 Wifi 之间的区别。
Wifi 需要额外的 MAC 地址进行通信:除了与以太网的源 MAC 和目标 MAC 相同的发送器地址 (SA) 和目标地址 (DA) 之外,Wifi 还需要发送器地址 (TA) 和接收器地址 (RA) 才能工作:这总共有 4 个 MAC 地址。由于常见的情况是客户端(STA)发送时,TA=SA,接入点(AP)发送给STA时,DA=RA,通常只需要3个地址,AP就是这样配置的:使用4 个可能的地址中只有 3 个。
桥接模式的客户端意味着上面的TA != SA 或DA != RA 并且需要所有4 个地址,而AP 只配置了3 个。这就是为什么在常见配置中无法桥接 Wifi 的原因。必须在 AP 和 STA 上启用 4 地址模式才能使客户端桥接工作。这通常称为无线分发系统 (WDS),但可能存在多种不兼容的实现。AP 和所有 STA 必须使用兼容的实现。
所以:
如果系统桥接是 AP,那么您可以毫无问题地桥接 wifi:这就是所有 AP 所做的,使用默认的 3 地址模式。
如果尝试桥接的系统是简单客户端 (STA),则它将无法工作。最近的驱动程序甚至会阻止将无线接口设置为具有此类错误的桥接端口:
# ip link set wlan0 master bridge0
Error: Device does not allow enslaving to a bridge.
Run Code Online (Sandbox Code Playgroud)如果您可以配置两个例如AP和STA到兼容WDS,如果全部都用mac80211兼容的驱动程序运行Linux操作系统,这可以在与STA启用:
# iw dev wlan0 set 4addr on
Run Code Online (Sandbox Code Playgroud)然后它可以被奴役:
# ip link set wlan0 master bridge0
# ip link show wlan0
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue master bridge0 state DOWN mode DEFAULT group default qlen 1000
[...]
Run Code Online (Sandbox Code Playgroud)
可以在 linux wireless wiki 上找到有关使用 iw 命令的 4 地址模式的一些文档:Using 4-address for AP and client mode
配置 AP 超出了此处的范围。使用hostapd 时,需要启用特定设置:
Run Code Online (Sandbox Code Playgroud)# WDS (4-address frame) mode with per-station virtual interfaces # (only supported with driver=nl80211) # This mode allows associated stations to use 4-address frames to allow layer 2 # bridging to be used. #wds_sta=1
仍然有一种变通方法允许通过单个 Wifi 默认模式(3 地址模式)连接同时使用多个容器或虚拟机和单独的 IP,但仅使用一个MAC 地址(用作 STA 的地址):因此它通常与 DHCP 不兼容默认情况下,它依赖于 MAC 地址(除非 DHCP 服务器接受dhcp-client-identifier选项)。它被称为IPVLAN(通常用于容器),它的 TAP 对应物(通常用于虚拟机)称为IPVTAP。在 L2 模式下使用时,它看起来像一个标准的以太网接口。
对于(简单的ip netns网络)容器,在使用接口wlan0的主机上,已经在 IP LAN 192.0.2.0/24 与网关 192.0.2.1 建立 Wifi 连接后,可以像这样使用它:
# ip netns add testwifi
# ip link add link wlan0 name ipvl0 type ipvlan mode l2
# ip link set dev ipvl0 netns testwifi up
# ip -n testwifi address add 192.0.2.99/24 dev ipvl0
# ip -n testwifi route add default via 192.0.2.1
# ip netns exec testwifi ping -q -c1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.372/5.372/5.372/0.000 ms
Run Code Online (Sandbox Code Playgroud)
我严重怀疑 NetworkManager 是否有任何与 4 地址模式相关的选项。至于IPVLAN/IPVTAP,这必须得到容器/虚拟化应用程序的支持,例如LXC或 libvirt(它似乎本身并不支持 IPVTAP),而不是 NetworkManager。
归档时间: |
|
查看次数: |
1598 次 |
最近记录: |