如何通过名称找到 virsh 主机?

如何通过名称找到 virsh 主机?

tl;dr:如何在我的计算机上获取 DNS 来查找我在 virsh 中创建的虚拟机?

我在 Ubuntu 18.04(仿生)上通过常规打包安装了 virsh。这会产生两个名称服务器 - 一个运行在 192.168.122.1 上的 dnsmasq 实例(用于 virsh 实例)和一个运行在 127.0.0.53 上的 /lib/systemd/systemd-resolved 实例。

后者不与前者交谈。我想解决这个问题,但我不太确定从哪里开始。

如果我使用 virsh 创建虚拟机,它会使用 DHCP 从该 dnsmasq 实例获取其 IP 地址。主机发送它的名称 (vippy),然后 dnsmasq 记录它。如果我输入host vippy 192.168.122.1有效,但 dnsmasq 未配置为采用域名。所以我想host vippy.hosts.virsh 192.168.122.1工作。

下一个问题是让 systemd-resolved 将所有对 .hosts.virsh 的请求路由到 192.168.122.1。

答案1

与大多数systemd重要服务(ntp、dns、cron 等)的替代品一样systemd-resolved,这是一种半途而废的实现,仅适用于恰好与 Lennart Poettering 的台式机非常相似的台式机。如果它能满足他系统上的需求,那么它对每个人来说都足够好了,所以别再抱怨了。 WONTFIX NOTABUG 用户错误。 systemd 和 init 一样都很好,但遗憾的是它无能地尝试做比它应该做的更多的事情。

因此,首先禁用systemd-resolved

systemctl stop systemd-resolved
systemctl disable systemd-resolved

然后安装一个真正的递归缓存名称服务器(dnsmasqunboundbind或其他)并将其配置为将您的hosts.virsh域的请求转发到 192.168.122.1

对于 dnsmasq,您可以使用类似--server=/hosts.virsh/192.168.122.1.

使用绑定,在您的中定义一个转发区域,named.conf如下所示:

zone "hosts.virsh" {
        type forward;
        forwarders { 192.168.1.122; };
};

对于 Unbound,类似这样:

forward-zone:
name: "hosts.virsh."
forward-addr: 192.168.1.122

如果此名称服务器配置为侦听所有 IP 地址(或者至少侦听 LAN 可访问的地址),它还可以充当网络上其他计算机的缓存解析器。国际海事组织每一个网络上应该有一个缓存解析器,缓存 DNS 解析的亚毫秒响应时间优于毫秒或数十甚至数百毫秒。

如果您已经dnsmasq在虚拟机上使用,则应该可以将其配置为同时适用于您的虚拟机和主机(以及网络上的其他计算机),而无需使用 Hosts.virsh 的转发器(该域已经是它的配置)。

我说“应该”是因为我没有尝试过,因为我不使用dnsmasq.相反,我使用 ISCdhdcpdbind9根据我的 中的 MAC 地址对固定 IP 地址进行硬编码dhdpd.conf,并手动将虚拟机条目添加到域的区域文件中。

相关内容