我的笔记本电脑上运行着基于 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=bar
并cname=*.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>