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
然后安装一个真正的递归缓存名称服务器(dnsmasq
、unbound
、bind
或其他)并将其配置为将您的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
.相反,我使用 ISCdhdcpd
并bind9
根据我的 中的 MAC 地址对固定 IP 地址进行硬编码dhdpd.conf
,并手动将虚拟机条目添加到域的区域文件中。