После шага 2 у вас может не быть рабочего распознавателя системы, пока шаг 3 не будет завершен. Вам может потребоваться перезапустить сетевую подсистему (или просто перезагрузиться), чтобы начать dnsmasqработу с настройками по умолчанию. В моем тестировании было достаточно добавить известный DNS-сервер /etc/dnsmasq.confи перезапустить dnsmasqего, чтобы он работал в среде liveCD.
Отличный ответ и, похоже, единственное решение при отключении NetworkManager не приемлемо!
Бог
3
Для меня это был отличный ответ, но он также потребовал дополнительных шагов из ответа @ blabla, добавив dns=dnsmasqконфигурацию/etc/NetworkManager/NetworkManager.conf
Roberto Tyley
Тоже самое. После борьбы с системным разрешением и несвязанным переключением на dnsmasq добился цели в Ubuntu 17.10. Я должен был использовать дополнения Blabla все же.
Альберто Л. Бонфильо
17
В дополнение к ответу @quixotic:
Убедитесь, что у вас есть в /etc/NetworkManager/NetworkManager.conf:
[main]
dns=dnsmasq
если вам нужно добавить его, перезапустите NetworkManager следующим образом:
sudo systemctl restart NetworkManager
и /etc/resolv.confдолжна быть символическая ссылка на /var/run/NetworkManager/resolv.conf. можно сделать так
На самом деле я установил его как dns=defaultи он работает нормально, потому что у меня есть серверы имен, определенные NetworkManager вместо того, чтобы быть определенными в dnsmasq; это работает для меня - NM получает серверы имен из настроек, сделанных в конфигурации NM KDE через системный трей. Я использую фиксированный IP в моей домашней сети FWIW.
pbhj
1
Этот шаг был необходимым дополнением к ответу @ quixotic для меня (Ubuntu 17.04, полная установка, а не LiveCD).
Роберто Тайли
0
Согласно руководству systemd-resolved , systemd-resolved предоставляет услуги разрешения имен через три различных интерфейса:
«Полнофункциональный API-интерфейс с разрешением systemd»
«локальный прослушиватель заглушки DNS на IP-адресе 127.0.0.53 на локальном интерфейсе обратной связи»
API glibc getaddrinfo (3), как определено в RFC3493 и связанных с ним функциях распознавателя, включая gethostbyname (3). Этот API широко поддерживается, в том числе и за пределами платформы Linux. Однако в его текущей форме он не предоставляет информацию о состоянии проверки DNSSEC и является только синхронным. Этот API поддерживается коммутатором службы имен glibc (nss (5)). Использование модуля NSS glibc nss-resol (8) необходимо для того, чтобы функции распознавателя NSS glibc могли разрешать имена хостов через systemd-resolved.
Похоже, что первые два интерфейса не будут мешать нормальному разрешению DNS, и для меня проблема, скорее всего, будет в третьем.
Чтобы активировать модуль NSS, добавьте «resol» в строку, начинающуюся с «hosts:» в /etc/nsswitch.conf. В частности, рекомендуется помещать «resol» в начале строки «hosts:» /etc/nsswitch.conf (но после записей «files» или «mymachines»), прямо перед записью «dns», если она существует, после чего следует «[! UNAVAIL = return]», чтобы гарантировать, что DNS-запросы всегда направляются через systemd-resolved (8), если он работает, но направляются в nss-dns, если эта служба недоступна
Поэтому необходимо, чтобы параметр «dns» предшествовал «resol» в строке «host:» файла /etc/nsswitch.conf . И тогда getaddrinfoследует просто придерживаться /etc/resolv.conf .
Это решение предотвращает только обработку systemd-resolved всех запросов разрешения DNS и не ограничивается определенным сетевым менеджером. И это также гарантирует, что службы LLMNR и mDNS работают нормально.
(Я не совсем знаком с тем, как работает разрешение имен в Linux, а также не уверен в том, что я понял из этих руководств. Просьба указать, что я что-то не так понял. Спасибо :))
(в качестве альтернативы отключите его полностью с помощью $ sudo systemctl disable systemd-resolved.service)
Удалите /etc/resolv.conf и создайте заново. Это важно, потому что resolv.conf является символической ссылкой на /run/systemd/resolve/stub-resolv.conf по умолчанию. Если вы не удалите символическую ссылку, файл будет перезаписан systemd при перезагрузке (даже если мы отключили systemd-resolved!). Также NetworkManager (NM) проверяет, является ли это символической ссылкой для обнаружения конфигурации, разрешенной системой.
Ответы:
dnsmasq
пакеты по-прежнему доступны в 16.10 и 17.04.Установите
dnsmasq
и установите зависимости (или хотя бы загрузите их пакеты) перед отключениемsystemd-resolved
:Отключить
systemd-resolved
и убедиться,dnsmasq
что работает:Сезон
dnsmasq
по вкусу. После применения настроек перезапуститеdnsmasq
:После шага 2 у вас может не быть рабочего распознавателя системы, пока шаг 3 не будет завершен. Вам может потребоваться перезапустить сетевую подсистему (или просто перезагрузиться), чтобы начать
dnsmasq
работу с настройками по умолчанию. В моем тестировании было достаточно добавить известный DNS-сервер/etc/dnsmasq.conf
и перезапуститьdnsmasq
его, чтобы он работал в среде liveCD.источник
dns=dnsmasq
конфигурацию/etc/NetworkManager/NetworkManager.conf
В дополнение к ответу @quixotic:
Убедитесь, что у вас есть в /etc/NetworkManager/NetworkManager.conf:
если вам нужно добавить его, перезапустите NetworkManager следующим образом:
и
/etc/resolv.conf
должна быть символическая ссылка на/var/run/NetworkManager/resolv.conf
. можно сделать такисточник
dns=default
и он работает нормально, потому что у меня есть серверы имен, определенные NetworkManager вместо того, чтобы быть определенными в dnsmasq; это работает для меня - NM получает серверы имен из настроек, сделанных в конфигурации NM KDE через системный трей. Я использую фиксированный IP в моей домашней сети FWIW.Согласно руководству systemd-resolved , systemd-resolved предоставляет услуги разрешения имен через три различных интерфейса:
Похоже, что первые два интерфейса не будут мешать нормальному разрешению DNS, и для меня проблема, скорее всего, будет в третьем.
В руководстве nss-resol :
Поэтому необходимо, чтобы параметр «dns» предшествовал «resol» в строке «host:» файла /etc/nsswitch.conf . И тогда
getaddrinfo
следует просто придерживаться /etc/resolv.conf .Это решение предотвращает только обработку systemd-resolved всех запросов разрешения DNS и не ограничивается определенным сетевым менеджером. И это также гарантирует, что службы LLMNR и mDNS работают нормально.
(Я не совсем знаком с тем, как работает разрешение имен в Linux, а также не уверен в том, что я понял из этих руководств. Просьба указать, что я что-то не так понял. Спасибо :))
источник
Для (X) Ubuntu 18.04 (см. Мой ответ на stackexchange ).
Вот копия этого (я должен сделать копию?)
Вот решение для (X) Ubuntu 18.04 Bionic.
Установить dnsmasq
sudo apt install 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, но она не работает, несмотря на то, что она описана в руководстве):
и перезапустите его:
Скажите dnsmasq использовать resolv.conf из NM:
и перезапустите его:
Используйте dnsmasq для разрешения:
источник