dnsmasq на virbr0 (libvirt) и администраторе сети

Я хочу выполнить dnsmasq на своей локальной машине для конфигурирования подстановочного знака для разрешения к 127.0.0.1 для тестирования.

Однако, когда я пошел для запуска dnsmasq с systemd, я получил следующее сообщение об ошибке:

[root@dhcppc4 ~]# systemctl status dnsmasq -l
● dnsmasq.service - DNS caching server.
   Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2015-10-09 21:49:58 BST; 14s ago
  Process: 2652 ExecStart=/usr/sbin/dnsmasq -k (code=exited, status=2)
 Main PID: 2652 (code=exited, status=2)

Oct 09 21:49:58 dhcppc4 systemd[1]: Started DNS caching server..
Oct 09 21:49:58 dhcppc4 systemd[1]: Starting DNS caching server....
Oct 09 21:49:58 dhcppc4 dnsmasq[2652]: dnsmasq: failed to create listening socket for port 53: Address already in use
Oct 09 21:49:58 dhcppc4 systemd[1]: dnsmasq.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Oct 09 21:49:58 dhcppc4 systemd[1]: Unit dnsmasq.service entered failed state.
Oct 09 21:49:58 dhcppc4 systemd[1]: dnsmasq.service failed.

Перепутанный относительно того, как порт 53 взят без текущего выполнения сервера DNS (и подтвержден с dig @127.0.0.1), я работал netstat -ln и найденный процессом, слушающим на порте 53 на адресе 192.168.122.1:

tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN
udp        0      0 192.168.122.1:53        0.0.0.0:* 

ifconfig показывает это 192.168.122.1 виртуальный интерфейс virbr0.

Быстрый поиск Google и Wiki позже, я понимаю, что libvirt предоставляет виртуальные сети хосту для абстракции физических интерфейсов. Libvirt использует переключатель виртуальной сети, через который весь трафик направляется [1]. Переключатель виртуальной сети по умолчанию, virbr0, создается, когда демон сначала запускает.

Я могу затем подтвердить, что могу отправить, запросы через РОЮТ к dnsmasq в этом интерфейсе:

[grobinson@dhcppc4 ~]$ dig @192.168.122.1 +short
a.root-servers.net.
j.root-servers.net.
m.root-servers.net.
b.root-servers.net.
i.root-servers.net.
k.root-servers.net.
l.root-servers.net.
d.root-servers.net.
g.root-servers.net.
c.root-servers.net.
h.root-servers.net.
e.root-servers.net.
f.root-servers.net.

Вопрос 1: Я не понимаю, что причина позади наличия dnsmasq слушает в этом виртуальном интерфейсе? Для/etc/resolv.conf I видят, что серверы DNS, настроенные в сервере DHCP, говорят машину прямым запросам к серверам Google DNS. Каково его использование?

# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4

Я нахожу, что могу отредактировать /etc/NetworkManager/NetworkManager.conf и добавьте строку dns=dnsmasq и затем перезапустите администратора сети с systemd. Отсюда на администраторе сети настроен к прямым запросам к dnsmasq на обратной петле, обращаются и видны с простым вызовом для рытья:

[grobinson@dhcppc4 ~]$ dig @127.0.0.1 +short
l.root-servers.net.
g.root-servers.net.
i.root-servers.net.
...

netstat -ln вывод теперь показывает два связанные сокета и слушающий на порте 53:

tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN     
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN 

Вопрос 2: каким образом администратор сети может запустить dnsmasq на 127.0.0.1, и я не могу с systemctl? Это вызвано тем, что конфигурация по умолчанию пытается послушать во всех интерфейсах, который перестал работать для virbr0? Я просто должен заявить желаемый интерфейс?

Вопрос 3: похоже, что существует два параметра конфигурации для dnsmasq: /etc/dnsmasq.conf и папка /etc/NetworkManager/dnsmasq.d/ где конфигурационные файлы могут быть записаны. Похоже, что последний для когда dns=dnsmasq установлен и dnsmasq, слушающий на 127.0.0.1 начиная с редактирования /etc/dnsmasq.conf не имеет никакого эффекта на запросы к @127.0.0.1. Первый мог быть для dnsmasq в libvirt?

1
задан 10 October 2015 в 00:39
3 ответа

По умолчанию libvirt запускает экземпляр dnsmasq для каждого из своих ' мосты виртуальных интерфейсов. Это делается для предоставления службы DHCP для виртуальных машин, работающих в виртуальной сети.

http://wiki.libvirt.org/page/VirtualNetworking

По сути, мост virbr создается libvirt каждый раз, когда вы запускаете виртуальную машину. используя настройки по умолчанию. Если вы хотите предотвратить это, вам необходимо создать мост самостоятельно перед запуском виртуальной машины, а затем запустить ее в режиме «моста», указав свой настраиваемый мост в качестве аргумента. Вот страница руководства, которая довольно хорошо это объясняет. Найдите параметр --network:

https://www-01.ibm.com/support/knowledgecenter/linuxonibm/liaat/liaatvirtinstalloptions.htm

Каждый раз, когда вы создаете «виртуальную сеть» в libvirt, она также запускает для него экземпляр dnsmasq. Итак, опять же, вам нужно прекратить использовать виртуальные сети libvrt и перейти на ручной режим.

1
ответ дан 3 December 2019 в 23:59

Настройте свой экземпляр dnsmasq на явный список интерфейсов, которые вы хотите, чтобы он слушал.

В /etc/dnsmasq.conf вы можете использовать любое имя интерфейса interface = eth0 или интерфейс IP listen-address = 192.168.0.1 . Даже с этим набором dnsmasq будет полезно связываться со всеми интерфейсами, поэтому отключите это, добавив bind-interfaces в файл конфигурации.

Или же в файле конфигурации укажите черный список интерфейсов с помощью , кроме -interface = virtbr * .

Источники:

0
ответ дан 3 December 2019 в 23:59

Если вы хотите, чтобы ваши локальные изменения /etc/hosts распространялись на ваши виртуальные машины с использованием того же интерфейса, вы можете просто ПОДПИСАТЬСЯ на локальный процесс libvirt.

1
ответ дан 7 December 2020 в 18:27

Теги

Похожие вопросы