У меня есть виртуальные машины на базе KVM, работающие на моем ноутбуке, а имена виртуальных машин разрешаются через DNS-сервер KVM dnsmasq. Однако DNS-сервер dnsmasq KVM также разрешает имена в файле hosts / etc / hosts, что вызывает у меня некоторые проблемы. Поэтому я хочу изменить конфигурацию, согласно которой файл / etc / hosts KVM-сервера не используется для разрешения имен.
Согласно справке dnsmasq, это должно быть возможно с использованием параметра -h или --no-hosts, однако я не нашел способа правильно настроить dnsmask KVM. virsh net-edit позволяет мне редактировать конфигурационный XML, однако неясно, как установить там параметр -h или --no-hosts.
Самый простой способ решить эту проблему - установить acl на / etc / hosts, который запрещает пользователю dnsmasq доступ к файлу. В debian этот пользователь nobody
, в Ubuntu это libvirt-dnsmasq
.
Вы можете установить acl следующим образом:
setfacl -m user:nobody:--- /etc/hosts
Однако, если у вас очень новая версия libvirt (еще не доступная в debian buster), теперь для нее есть официальная поддержка:
Libvirt v5.6.0 (05.08.2019) добавлена поддержка передачи пользовательских параметров в dnsmasq
.
Из документация:
Для передачи параметров непосредственно в базовый файл конфигурации dnsmasq доступно специальное пространство имен XML. Использование пространств имен 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>