Kvm-Virtualization

如何為 KVM dnsmasq 實例設置 -h、–no-hosts

  • May 18, 2020

我的筆記型電腦上執行了基於 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=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>

引用自:https://serverfault.com/questions/912527