Kvm-Virtualization
如何為 KVM dnsmasq 實例設置 -h、–no-hosts
我的筆記型電腦上執行了基於 KVM 的虛擬機,並且這些虛擬機通過 KVM 的 dnsmasq DNS 伺服器解析名稱。然而,KVM 的 dnsmasq DNS 伺服器也解析主機 /etc/hosts 文件中的名稱,這給我帶來了一些麻煩。因此,我想更改為不使用 KVM 伺服器的 /etc/hosts 文件進行名稱解析的配置。
根據 dnsmasq 的幫助,這應該可以使用 -h 或 –no-hosts 選項但是我還沒有找到正確配置 KVM dnsmask 的方法。virsh net-edit 允許我編輯配置 XML,但是不清楚如何在那裡設置 -h 或 –no-hosts 選項。
方法一
解決這個問題的最簡單方法是在 /etc/hosts 上設置一個 acl,它禁止 dnsmasq 使用者訪問該文件。在 debian 上是這個使用者
nobody
,在 ubuntu 上是libvirt-dnsmasq
。您可以像這樣設置acl:
setfacl -m user:nobody:--- /etc/hosts
方法二
但是,如果您有一個非常新的 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>