Я недавно установил dnsmasq для работы в качестве DNS-сервера для моей локальной сети. dnsmasq прослушивает порт 53, который уже используется локальным прослушивателем заглушки DNS из systemd-resolved .
Чтобы решить эту проблему, просто остановите systemd-resolved и затем перезапустите его после запуска dnsmasq. Но он возвращается после перезагрузки: systemd-resolved запускается с предпочтением, и dnsmasq не запускается, потому что порт 53 уже используется.
Первый очевидный вопрос, как мне кажется, заключается в том, как мне лучше понять, что systemd-resolved понимает, что он не должен запускать локальный прослушиватель заглушки DNS и, таким образом, оставить порт 53 для использования dnsmasq?
Однако более интересным вопросом является то, как эти две службы обычно предназначены для совместной работы. Они даже предназначены для работы бок о бок или системно разрешаются так, как если бы кто-то использовал dnsmasq?
sudo systemctl disable systemd-resolved
? Я думаю, что если dnsmasq правильно настроен, он должен обрабатывать разрешение домена.sudo systemctl stop systemd-resolved
если он работает. Используйтеsudo systemctl status systemd-resolved
для проверкиОтветы:
Начиная с systemd 232 (выпущен в 2017 году) вы можете редактировать
/etc/systemd/resolved.conf
и добавлять эту строку:Это отключит привязку к порту 53.
Эта опция более подробно описана в справочной странице resolved.conf .
Вы можете найти версию systemd, с которой работает ваша система:
источник
Вы можете отключить
systemd-resolved
загрузку при загрузке с помощьюsudo systemctl disable systemd-resolved
.Если вы хотите запустить их вместе, вы можете перенаправить их,
systemd-resolved
чтобы использовать localhost в качестве основного сервера имен. Это позволит убедиться, что все запросы направляются в dnsmasq для разрешения, прежде чем попасть на внешний DNS-сервер. Это можно сделать, добавив строкуnameserver 127.0.0.1
в верхней части вашего/etc/resolv.conf
файла. Это также отключит локальное кэширование systemd.Вы можете прочитать больше на Arch Linux вики . Я скопировал это оттуда, и это покрывает это довольно хорошо.
Однако это не позволяет избежать ошибки во время загрузки, т. Е. Dnsmasq все равно не будет работать, если произойдет запуск systemd-resolved. Если ваша версия
systemd
достаточно новая, используйте ответ Malvineous . Если ваша версияsystemd
слишком старая, вы можете обойти эту проблему, изменив модуль dnsmasq: в[Unit]
разделе добавитьBefore=systemd-resolved
.После этого, если вы хотите, вы можете создать отдельный
/etc/dnsmasq-resolv.conf
файл для восходящего потока сервера имен и передать его с помощью-r
или--resolv-file
опцию, или добавить вверх по течению сервера имен в файле конфигурации Dnsmasq и использовать-R
или--no-resolv
вариант. Таким образом, у вас есть только локальный хост,/etc/resolv.conf
и все проходит через dnsmasq.источник
Before=systemd-resolved
в[Unit]
раздел. Таким образом, dnsmasq всегда запускается первым.Судя по страницам руководства systemd, он не предназначен для того, чтобы вручную отключать заглушку DNS-сервера. Интересно, что я заметил только описанную проблему после обновления systemd с 230 до 231.
Отключение systemd-resolved не было для меня опцией, потому что мне нужно было обрабатывать полученные исходящие DNS-серверы через DHCP.
Моим решением было сделать dnsmasq stop systemd-resolved перед запуском и запустить его потом снова.
Я создал дроп-ин конфигурацию в
/etc/systemd/system/dnsmasq.service.d/resolved-fix.conf
:Это выглядит довольно хакерским решением, но оно работает.
источник
DNSStubListener
руководстве resolved.conf указано следующее : «Обратите внимание, что прослушиватель заглушки DNS неявно отключается, когда его адрес прослушивания и порт уже используются». Вот почему этот метод работает отлично, я думаю.Я просто включил опцию "bind-interfaces", удалив '#' в начале строки в /etc/dnsmasq.conf.
Я смог запустить dnsmasq снова:
Я решил, что это решение разрешено этим обсуждением : добавьте параметр, чтобы отключить преобразователь заглушки.
источник
В
systemd
версии будет опция232
для отключения слушателя заглушки. См. Https://github.com/systemd/systemd/pull/4061 .источник
Если вы используете настройку Ubuntu 18.04 по умолчанию, это может быть вызвано конфликтом между
systemd-resolved
(DNS-сервером по умолчанию) иdnsmasq
. Если вы установилиdnsmasq
себя намеренно, потому что явно этого хотели, то один из других ответов на этот вопрос, объясняющий, как отключитьsystemd-resolved
, вероятно, будет полезен для вас. Если вы не установили явным образомdnsmasq
, скорее всего, он установлен, потому что вы используетеlxd
. Это может быть потому, что вы на самом деле используетеlxd
для управления контейнерами, но это, скорее всего, потому, что оснастки используютlxd
для защиты вас, когда приложения установлены. С моей точки зрения, я хочу сохранитьdnsmasq
(потому чтоlxd
хочет этого), но я также хочу сохранитьsystemd-resolved
в качестве DNS-сервера (потому что это то, что выбрала команда Ubuntu, и я доверяю им больше, чем себе).Таким образом, это, кажется,
lxd
проблема в глубине души. Если так, то, как я это исправил, согласно сообщению в списке рассылки lxd-users , это:$ lxc network edit lxdbr0
Это отредактирует вашу конфигурацию в редакторе терминала. Это будет выглядеть примерно так:
Добавьте к нему три строки:
и это должно привести к тому
dnsmasq
, что запускаемая системаlxd
обнаруживает петли DNS. Это, по крайней мере для меня, решило проблему и остановилосьsystemd-resolved
иdnsmasq
использовало 100% CPU.источник
Вот решение для (X) Ubuntu 18.04 Bionic.
Установить dnsmasq
Отключите обработчик с разрешением systemd на порту 53 (не трогайте /etc/systemd/resolved.conf, поскольку он может быть перезаписан при обновлении):
и перезапустите
(в качестве альтернативы отключите его полностью с помощью
$ sudo systemctl disable systemd-resolved.service
)Удалите /etc/resolv.conf и создайте заново. Это важно, потому что resolv.conf является символической ссылкой на /run/systemd/resolve/stub-resolv.conf по умолчанию. Если вы не удалите символическую ссылку, файл будет перезаписан systemd при перезагрузке (даже если мы отключили systemd-resolved!). Также NetworkManager (NM) проверяет, является ли это символической ссылкой для обнаружения конфигурации, разрешенной системой.
Отключите перезапись /etc/resolv.conf в NM (есть также опция rc-manager, но она не работает, несмотря на то, что она описана в руководстве по NM):
и перезапустите его:
Скажите dnsmasq использовать resolv.conf из NM:
и перезапустите его:
Используйте dnsmasq для разрешения:
источник
Я решил это так:
Добавьте или раскомментируйте следующую строку в / etc / default / dnsmasq :
Создайте свой собственный файл resolv (/etc/resolv.personal) для определения серверов имен. Вы можете использовать любой сервер имен здесь. Я взял два с https://www.opennic.org
В /etc/dnsmasq.conf добавьте или раскомментируйте следующую строку:
Затем перезапустите dnsmasq и отключите распознаватель по умолчанию: systemd-resolved.
источник
Я не уверен, почему обе службы пытаются использовать один и тот же адрес. Может быть, вы можете организовать их, как в моем случае на Xubuntu 18.04.1, где их конфигурация следующая:
Чтобы разрешить systemd, используя мой dnsmasq, я просто установил:
В моем конфиге dnsmasq я установил внешние серверы имен:
После перезапуска всего:
systemd-resolved установит для DNS-сервера по умолчанию значение dnsmasq в:
источник
/etc/resolv.conf
это символическая ссылка на/run/systemd/resolve/resolv.conf
. По-видимому, это один из четырех (!) Возможных различных режимов , в которых может работать systemd-resolved. Я полагаю, это зависит от того, как настроен ваш дистрибутив, т.е. это верно для вашего Xubuntu 18.04.1, но может отличаться от других системы.Мне не удалось заставить dnsmasq начать использовать решения, найденные в Интернете, то есть отключить systemd-resolved, изменить dnsmasq.conf на «динамическое связывание» вместо «связывание интерфейсов». Я смог запустить его при загрузке, запустив dnsmasq start После network-online.service, а не network.service:
источник
Wants=
. freedesktop.org/wiki/Software/systemd/NetworkTargetВот что сработало для меня (после нескольких часов боли) в Ubuntu 18.10 Cosmic Cuttlefish. Я сделал это, чтобы воспользоваться
dnsmasq
сравнительно более надежным механизмом кэширования и избежать уязвимостей в NGINX . Обратите внимание, что я использую версию Ubuntu Server (noNetworkManager
/nmcli
, простоsystemd-networkd
), и она работает на AWS EC2, поэтому мне также нужно было поддерживать работу DNS и DHCP с доменом поиска EC2 по умолчанию. Я не хотелsystemd-resolved
полностью отключать, потому что понятия не имею, как это может повлиять на будущие обновления. Все здесь запускается как root / sudo, если не указано иное (это происходит по умолчанию при передаче в качестве пользовательских данных EC2).Убедитесь,
127.0.0.1#53
что используется для разрешения, а DNSSEC работает с чем-то вродеdig +trace facebook.com
источник
DNSStubListener=no
?