Начиная с v5.6.0, libvirt
добавила пространство имен dnsmasq
с элементом
, что позволяет указывать параметры непосредственно на базовом сервере dnsmasq. Я хотел бы создать запись DNS с подстановочными знаками для своих приложений с этой опцией. Поэтому я использовал virsh net-edit
, изменил
на
и добавил следующие параметры:
<dnsmasq:options>
<dnsmasq:option value='cname=boards.cnx65-k8s.hobel.internal,cnx65-k8s.hobel.internal'/>
<dnsmasq:option value='cname=*.app.cnx65-k8s.hobel.internal,cnx65-k8s.hobel.internal'/>
</dnsmasq:options>
После этого была перезапущена сеть ( virsh net-destroy && virsh net-start
) и целевая виртуальная машина ( virsh destroy && virsh start
).
cname =boards.cnx65-k8s.hobel.internal
работает отлично:
$ dig +short boards.cnx65-k8s.hobel.internal @192.168.10.1
cnx65-k8s.hobel.internal.
192.168.10.136
Но dig + short x.app.cnx65-k8s.hobel.internal @ 192.168.10.1
не разрешается ни на один IP-адрес. Сгенерированный файл конфигурации /var/lib/libvirt/dnsmasq/hobel.internal.conf
содержит в конце обе записи cname:
strict-order
user=libvirt-dnsmasq
local=/hobel.internal/
domain=hobel.internal
expand-hosts
pid-file=/run/libvirt/network/hobel.internal.pid
except-interface=lo
bind-dynamic
interface=virbr1
dhcp-range=192.168.10.10,192.168.10.254,255.255.255.0
dhcp-no-override
dhcp-authoritative
dhcp-lease-max=245
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/hobel.internal.hostsfile
addn-hosts=/var/lib/libvirt/dnsmasq/hobel.internal.addnhosts
cname=boards.cnx65-k8s.hobel.internal,cnx65-k8s.hobel.internal
cname=*.app.cnx65-k8s.hobel.internal,cnx65-k8s.hobel.internal
Согласно этому ответу , я добавил auth- server
и имя-интерфейса
к параметрам:
<dnsmasq:options>
<dnsmasq:option value='cname=boards.cnx65-k8s.hobel.internal,cnx65-k8s.hobel.internal'/>
<dnsmasq:option value='cname=*.app.cnx65-k8s.hobel.internal,cnx65-k8s.hobel.internal'/>
<dnsmasq:option value='auth-server=cnx65-k8s.hobel.internal,virbr1'/>
<dnsmasq:option value='interface-name=cnx65-k8s.hobel.internal,virbr1'/>
</dnsmasq:options>
Но x.app.cnx65-k8s.hobel.internal
все еще не решен:
$ dig x.app.cnx65-k8s.hobel.internal @192.168.10.1
; <<>> DiG 9.16.1-Ubuntu <<>> x.app.cnx65-k8s.hobel.internal @192.168.10.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43624
;; flags: qr rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;x.app.cnx65-k8s.hobel.internal. IN A
;; Query time: 0 msec
;; SERVER: 192.168.10.1#53(192.168.10.1)
;; WHEN: Sat Jul 03 12:14:05 CEST 2021
;; MSG SIZE rcvd: 59
Почему это не работает? Даже в официальной документации libvirt
в качестве примера приведена запись с подстановочными знаками cname:
<dnsmasq:option value="cname=*.foo.example.com,master.example.com"/>
Я думаю, у вас проблема с настройкой dnsmasq; может название интерфейса? Похоже, вы можете использовать подстановочный знак. Учитывая следующую конфигурацию моей сети по умолчанию
:
<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0' connections='1'>
<name>default</name>
<uuid>34eaa498-ba0f-4762-a0f9-27f53dd07687</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:5d:a7:ff'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
<dnsmasq:options>
<dnsmasq:option value='cname=foo.example.com,master.example.com'/>
<dnsmasq:option value='cname=*.foo.example.com,master.example.com'/>
<dnsmasq:option value='auth-zone=example.com'/>
<dnsmasq:option value='auth-server=example.com,*'/>
</dnsmasq:options>
</network>
Я получаю /var/lib/libvirt/dnsmasq/default.conf
, который выглядит так:
strict-order
pid-file=/run/libvirt/network/default.pid
except-interface=lo
bind-dynamic
interface=virbr0
dhcp-range=192.168.122.2,192.168.122.254,255.255.255.0
dhcp-no-override
dhcp-authoritative
dhcp-lease-max=253
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
cname=foo.example.com,master.example.com
cname=*.foo.example.com,master.example.com
auth-zone=example.com
auth-server=example.com,*
Следующие запросы работать с виртуальной машины, подключенной к этой сети:
[root@example-vm ~]# dig +short foo.example.com
master.example.com.
[root@example-vm ~]# dig +short a.foo.example.com
master.example.com.
[root@example-vm ~]# dig +short b.foo.example.com
master.example.com.
И, как и ожидалось, ничего не возвращается:
[root@example-vm ~]# dig +short bar.example.com
(Тесты проводились на Fedora 34 с использованием libvirt-7.0.0-4.fc34.x86_64 и dnsmasq-2.85-1 .fc34.x86_64)