我正在尝试让 macvlan 网络在 Docker 上运行。它已正确部署,但我无法使其可访问。请参阅我关于 Server Fault 的相关帖子。
我尝试将其部署到我的笔记本电脑、台式机和 Oracle VM 上。我尝试在任何地方激活混杂模式,sudo ip link set promisc on
也尝试在我的 VM 设置中激活混杂模式。还尝试同时为主机、VM 和 docker 适配器启用它。
我在读取输出时注意到一个意外的行为docker network ls
是,除非我手动分配一个 mac 地址,否则容器不会获得 mac 地址。
什么都没起作用。另外,有时我检查网络时发现ip -d link
混杂模式旁边是“2”,而不是“1”。我不知道为什么会这样。
我尝试过查看我的笔记本电脑上的无线网卡是否能够使用混杂模式,但在网上找不到相关信息。有没有可靠的方法可以查明我的网卡是否能够使用混杂模式?
我还应该提一下,当我尝试通过有线连接时也会发生同样的情况。
答案1
也许路由器也应该配置为接受混杂模式?我还没有找到任何指示这样做的设置。
您正在寻找的实际设置有点不同,并且特定于 Wi-Fi。
路由器中没有“混杂模式”设置,因为混杂模式本质上是接收端的事情——它只告诉你的网络接口接受它想要的帧。已经接收(但具有错误的目标 MAC 地址);它不会与网络的其余部分沟通已启用的模式。
例如,在旧式“共享介质”以太网上,混杂模式允许您接收发往其他主机的数据包,因为这些数据包已经到达,并且仅根据目标 MAC 地址未知而在您的终端丢弃。另一方面,在交换式以太网上,相同模式几乎无效,因为交换机仅通过特定链路发送数据包 - 不是发给您的数据包永远不会到达您的接口。尽管 Wi-Fi 是一种“共享介质”网络,但整个无线端仍然位于桥接器(AP)后面,永远不会看到来自有线端的杂散数据包。
但混杂模式只接收错误地址的帧,而不是发送。Wi-Fi 的一个更大问题是,与以太网不同,Wi-Fi 连接不对称,只有接入点可以使用任何源 MAC 地址发送数据包;Wi-Fi 客户端设备无法做到这一点。您的设备“关联”的 MAC 地址是您可以从中发送数据包的唯一 MAC 地址。(这与以太网完全不同,以太网没有单独的“关联”,任何连接的设备都可以使用任何它想要的 MAC 地址。)
在后台,Wi-Fi 数据包有三个或四个 MAC 地址,而不是通常的两个;除了“源”和“目标”之外,还有“发送无线电”和“接收无线电”。通常只使用三个,因为对于客户端发送的数据包,“发送器”和“源”MAC 地址始终相同(反之亦然,对于从 AP 接收的数据包,“目标”与“接收器”相同)。这意味着您不可能发送带有 macvlan 接口的 MAC 地址的数据包;数据包中没有“源 MAC”字段(将其放在“发送器”字段中会导致 AP 将其拒绝为“来自未关联站点的数据包”)。
因此,为了让 Wi-Fi 客户端能够发送“欺骗”的 MAC 地址(即充当桥梁),需要将其切换到“4地址“模式,也称为“WDS 桥接”模式。这可以在 Linux 上使用命令完成iw
- 虽然并非所有 Wi-Fi 接口都正确支持它 - 并且必须将路由器(Wi-Fi 接入点)配置为接受来自设备的 4addr/WDS 数据包;如何执行此操作差异很大,通常甚至不受大多数接入点的支持。