在 Windows 上,我使用简单的 VPN 来访问在我的国家/地区被屏蔽的内容。当此 VPN 运行时,似乎所有互联网流量都经过它:Web 浏览器、邮件客户端、CURL、一切……除了 QEMU!
为什么 QEMU 的互联网流量表现不同?
我做了一些研究,发现这种行为是 QEMU 特有的用户组网方式。QEMU 上运行的 Linux 虚拟机确实可以访问互联网,可以下载和上传文件,但它的行为就像没有 VPN 一样。
注:(我对网络的了解非常有限)
- 在此模式下,QEMU 的 Windows 设置中没有虚拟适配器
- 虚拟网络为 10.0.2.0/24
- 我找不到任何方法来查看 Windows 上这个虚拟网络的配置(如果这一点有任何意义的话)
- 我认为应该有一个配置,指定所有来自 10.0.2.0/24 的流量都应路由到特定的网卡,进入我的 Wi-Fi 的流量也是如此,但我在 Windows 上找不到这些配置
QEMU 用户网络模式下如何管理互联网流量?
PS:这个问题不是关于如何配置桥接网络或如何使用 QEMU 的 VPN,而是真正从 Windows 主机的角度理解 QEMU 用户模式网络。
答案1
我找不到任何方法来查看 Windows 上这个虚拟网络的配置(如果这一点有任何意义的话)
“用户模式网络”的工作方式意味着主机操作系统不知道任何网络正在发生。QEMU 使用“SLiRP”TCP/IP 仿真器让客户机认为其数据包正在被转发,而实际上仿真器进程就像 TCP/UDP代理人,与模拟器进程代表虚拟机建立 TCP 连接。
在“用户模式”网络下,主机永远看不到来自 10.0.2.0/24 的原始数据包;主机认为 qemu.exe 本身(或辅助 .exe)正在建立所有 TCP 连接并发送 UDP 数据包。
(这也是“NAT 模式”在 VirtualBox 中的工作方式,它甚至使用完全相同的 SLiRP 模拟器。)
目前还不清楚为什么 SLiRP 能够绕过你的 VPN 的默认路由;它的行为应该像主机上运行的任何其他程序一样(主机发起数据包,而不是转发数据包)。
我认为应该有一个配置,指定所有来自 10.0.2.0/24 的流量都应路由到特定的网卡,进入我的 Wi-Fi 的流量也是如此,但我在 Windows 上找不到这些配置
如果我们谈论的是不同的网络模式,并且 Windows 实际上是从 10.0.2.0/24 转发真实数据包,那么您可能仍然找不到此配置,因为基本 IP 路由表仅匹配目标地址,而不匹配源地址。虽然某些系统支持匹配源地址(例如 Linux 具有 IPv6 的 SADR 以及 v4/v6 的 PBR“基于策略的路由”),但这种情况很少见。(不过,我相信 Windows 在某些情况下会尝试自动执行此操作。)