方法 1

方法 1

我的笔记本电脑上运行着基于 KVM 的虚拟机,虚拟机的名称通过 KVM 的 dnsmasq DNS 服务器解析。但是 KVM 的 dnsmasq DNS 服务器也会解析主机 /etc/hosts 文件中的名称,这给我带来了一些麻烦。因此,我想将配置更改为不使用 KVM 服务器的 /etc/hosts 文件进行名称解析。

根据 dnsmasq 的帮助,这应该可以使用 -h 或 --no-hosts 选项来实现,但是我还没有找到正确配置 KVMs dnsmask 的方法。virsh net-edit 允许我编辑配置 XML,但是不清楚如何在那里设置 -h 或 --no-hosts 选项。

答案1

方法 1

解决这个问题最简单的方法是在 /etc/hosts 上设置一个 acl,禁止 dnsmasq 用户访问该文件。在 debian 上,这个用户是nobody,在 ubuntu 上是libvirt-dnsmasq

您可以像这样设置 acl:

setfacl -m user:nobody:--- /etc/hosts

方法 2

但是,如果您有一个非常新的 libvirt 版本(debian buster 上尚不可用),现在有官方支持:

Libvirt v5.6.0(2019-08-05)增加了对传递自定义选项的支持dnsmasq

文档

可以使用特殊的 XML 命名空间将选项直接传递到底层 dnsmasq 配置文件。使用 XML 命名空间不提供任何支持保证,因此使用时请自担风险。

此示例 XML 将传递选项字符串foo=barcname=*.foo.example.com,master.example.com直接传递给底层 dnsmasq 实例。

<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'>
  ...
  <dnsmasq:options>
    <dnsmasq:option value="foo=bar"/>
    <dnsmasq:option value="cname=*.foo.example.com,master.example.com"/>
  </dnsmasq:options>
</network>

因此,我会尝试这个:

<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'>
  ...
  <dnsmasq:options>
    <dnsmasq:option value="no-hosts"/>
  </dnsmasq:options>
</network>

相关内容