当主机漫游到特定网络时,为什么 DNS 在 QEMU“用户网络”下停止解析?

Rom*_*nko 9 networking virtual-machine qemu host-name-resolution gnome-boxes

我在笔记本电脑上使用 GNOME Boxes。每当笔记本电脑在网络(以太网、不同位置的 Wi-Fi 或作为 USB 调制解调器的手机)之间移动时,访客计算机会自动使用默认设置获得 Internet 连接。

\n

来宾计算机未与主机桥接,并且在主机的 LAN 上不可见,这意味着在将帧传递到主机的 LAN 之前,来宾计算机的 MAC 地址会被覆盖。

\n
\n

默认情况下,QEMU 将为\nguest\xe2\x80\xa6 创建\n SLiRP \n用户网络后端和适当的虚拟网络设备

\n

用户网络是使用“slirp”实现的,它在 QEMU 内提供完整的 TCP/IP 堆栈,并使用该堆栈来实现虚拟 NAT 网络。

\n
\n
\n

QEMU 最后也是最奇怪的网络选项也是它的默认选项。它的作用是将“用户模式网络堆栈”连接到 VLAN。该网络堆栈是 ip、tcp、udp、dhcp 和 tftp(等)协议的独立实现。它可以通过例如使用有效地址响应 dhcp 请求、使用主机文件系统中的文件响应 tftp 请求或创建可以转发数据包数据的 udp/tcp 套接字来处理来自 vlan 的帧。

\n

请注意,该网络堆栈在 qemu 进程本身内运行。例如,没有单独的 dhcp 或 tftp 进程来处理这些请求。此外,堆栈通过从 udp/tcp 数据包解压应用程序数据并通过连接 qemu 进程和目标进程的套接字转发它们,有效地充当代理。

\n
\n

请注意,在上面的上下文中,“vlan”代表“模拟”LAN,它并不意味着 IEEE 802.1Q VLAN ID

\n

默认情况下,来宾在 10.0.2.0/24 网络上拥有 10.0.2.15 IP 地址。网关是10.0.2.2。DNS服务器是10.0.2.3。访客可以通过连接 10.0.2.2 网关 IP 来访问主机。

\n

在此输入图像描述

\n

在特定的 Wi-Fi 网络中,所有访客计算机都无法访问互联网。我发现了另一个关于 QEMU 下访客缺乏互联网的问题,该问题发现 DNS 在某些设置下可能无法开箱即用。所以,我检查了我的。我可以通过访客的 IP 访问网站。此外,如果我手动配置 IPv4 连接,并且除了默认的 10.0.2.3 之外,添加另一个已知解析器(例如 8.8.8.8)作为备份,解析也会恢复。

\n

据本地管理员介绍,该 Wi-Fi 网络启用了 VLAN 标记,可将本地计算机与访客计算机分开。显然,如果 VLAN 是一个问题,它将导致互联网访问完全丧失,而不仅仅是解决问题。

\n

该网络的另一个特殊性是第一个 DNS 解析器被配置为拒绝大多数请求。提供了第二个解析器 8.8.8.8,但显然 QEMU 没有使用。

\n

该问题在不同设备上仍然存在。我尝试了两台完全不同的配备英特尔无线技术的笔记本电脑。至少自 10.4 起,Debian“Buster”、“Bullseye”和“Sid”中就发现了该问题。

\n

Rom*_*nko 12

在默认的“用户模式”网络中,QEMU 仅使用主机中的第一个 DNS 名称服务器。因此,如果该名称服务器无法正确解析,QEMU 将不会回退到可能在主机上配置为辅助名称服务器的任何其他名称服务器。这会导致访客明显失去互联网连接,而主机仍然可以使用其后备名称服务器“隐藏”问题。

这是已知的 QEMU 行为,预计不会在 QEMU 中修复。以下是2011 年 Debian Bug 报告日志 #625689中的引用:

不,该限制尚未记录在案,而且也很难修复,或者可能真的不值得麻烦。有两个原因。首先,用户模式网络不适合任何严肃的事情,您确实需要使用网桥进行分流网络,这大约快 100 倍并且实际上有效(例如 ICMP)。其次,实现相当简单 - 对于 DNS,它仅将数据包从来宾转发(如 NAT 盒)从主机 /resolv.conf 到名称服务器 - 只有一个名称服务器,因为您无法同时 NAT 到两个目的地。因此,为了解决这个问题,qemu 必须成为 DNS 的应用程序级代理,而不是简单的 NAT“设备”。

nameserver通过在/etc/resolv.conf主机上首先添加一些垃圾,可以很容易地重现该问题。客人立即停止解决。

对于 Debian 来宾计算机,要恢复网络,只需将另一个已知解析器(例如 8.8.8.8)添加到/etc/resolv.conf. 此类配置更改不会在重新启动来宾系统后继续存在。