Ответы:
dnsmasq
пакеты по-прежнему доступны в 16.10 и 17.04.
Установите dnsmasq
и установите зависимости (или хотя бы загрузите их пакеты) перед отключениемsystemd-resolved
:
sudo apt-get install dnsmasq
Отключить systemd-resolved
и убедиться, dnsmasq
что работает:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
systemctl status dnsmasq
Сезон dnsmasq
по вкусу. После применения настроек перезапустите dnsmasq
:
sudo systemctl stop dnsmasq
sudo systemctl start dnsmasq
После шага 2 у вас может не быть рабочего распознавателя системы, пока шаг 3 не будет завершен. Вам может потребоваться перезапустить сетевую подсистему (или просто перезагрузиться), чтобы начать dnsmasq
работу с настройками по умолчанию. В моем тестировании было достаточно добавить известный DNS-сервер /etc/dnsmasq.conf
и перезапустить dnsmasq
его, чтобы он работал в среде liveCD.
dns=dnsmasq
конфигурацию/etc/NetworkManager/NetworkManager.conf
В дополнение к ответу @quixotic:
Убедитесь, что у вас есть в /etc/NetworkManager/NetworkManager.conf:
[main]
dns=dnsmasq
если вам нужно добавить его, перезапустите NetworkManager следующим образом:
sudo systemctl restart NetworkManager
и /etc/resolv.conf
должна быть символическая ссылка на /var/run/NetworkManager/resolv.conf
. можно сделать так
sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
dns=default
и он работает нормально, потому что у меня есть серверы имен, определенные NetworkManager вместо того, чтобы быть определенными в dnsmasq; это работает для меня - NM получает серверы имен из настроек, сделанных в конфигурации NM KDE через системный трей. Я использую фиксированный IP в моей домашней сети FWIW.
Согласно руководству systemd-resolved , systemd-resolved предоставляет услуги разрешения имен через три различных интерфейса:
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 :
Чтобы активировать модуль 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, а также не уверен в том, что я понял из этих руководств. Просьба указать, что я что-то не так понял. Спасибо :))
Для (X) Ubuntu 18.04 (см. Мой ответ на stackexchange ).
Вот копия этого (я должен сделать копию?)
Вот решение для (X) Ubuntu 18.04 Bionic.
Установить dnsmasq
sudo apt install dnsmasq
Отключите обработчик с разрешением systemd на порту 53 (не трогайте /etc/systemd/resolved.conf, поскольку он может быть перезаписан при обновлении):
$ cat /etc/systemd/resolved.conf.d/noresolved.conf
[Resolve]
DNSStubListener=no
и перезапустите
$ sudo systemctl restart systemd-resolved
(в качестве альтернативы отключите его полностью с помощью $ sudo systemctl disable systemd-resolved.service
)
Удалите /etc/resolv.conf и создайте заново. Это важно, потому что resolv.conf является символической ссылкой на /run/systemd/resolve/stub-resolv.conf по умолчанию. Если вы не удалите символическую ссылку, файл будет перезаписан systemd при перезагрузке (даже если мы отключили systemd-resolved!). Также NetworkManager (NM) проверяет, является ли это символической ссылкой для обнаружения конфигурации, разрешенной системой.
$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf
Отключите перезапись /etc/resolv.conf в NM (есть также опция rc-manager, но она не работает, несмотря на то, что она описана в руководстве):
$ cat /etc/NetworkManager/conf.d/disableresolv.conf
[main]
dns=none
и перезапустите его:
$ sudo systemctl restart NetworkManager
Скажите dnsmasq использовать resolv.conf из NM:
$ cat /etc/dnsmasq.d/nmresolv.conf
resolv-file=/var/run/NetworkManager/resolv.conf
и перезапустите его:
$ sudo systemctl restart dnsmasq
Используйте dnsmasq для разрешения:
$ cat /etc/resolv.conf
# Use local dnsmasq for resolving
nameserver 127.0.0.1