Ubuntu 16.10 + использование systemd-resolved
как сопоставитель DNS.
Я предпочитаю установку 16,04 использования, dnsmasq
как сопоставитель.
Как я могу сделать это на 16,10 +, особенно на 17,04?
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.
В дополнение к ответу @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
Согласно руководству systemd-разрешенных, systemd-разрешенных предоставляет услуги по определению имен через три различных интерфейса:
glibc getaddrinfo (3) API, как определено RFC3493 и его связанными функциями сопоставителя, включая gethostbyname (3). Этот API широко поддерживается, включая вне платформы Linux. В его текущей форме это не выставляет информацию о статусе проверки DNSSEC однако и синхронно только. Этот API поддерживается glibc службой имен Переключатель (nss (5)). Использование glibc NSS nss-твердость модуля (8) требуется, чтобы позволить функциям сопоставителя glibc NSS разрешать имена хостов через systemd-разрешенный.
Кажется, что первые два интерфейса не вмешаются в нормальное разрешение DNS и для меня, проблема, вероятно, будет находиться на третьем.
В руководстве nss-твердости:
Для активации модуля NSS добавьте "твердость" к строке, запускающейся с "хостов": в/etc/nsswitch.conf. А именно, рекомендуется поместить "твердость" рано в "хосты"/etc/nsswitch.conf: строка (но после "файлов" или "mymachines" записей), прямо перед записью "DNS", если это существует, сопровождаемое" [! UNAVAIL=return]", для обеспечения запросов DNS всегда направляются через systemd-разрешенный (8), если он работает, но направляются nss-dns, если этот сервис не доступен
Таким образом, то, что необходимо, должно сделать "DNS", предшествует "твердости" в "хосте": строка/etc/nsswitch.conf. И затем getaddrinfo
должен просто придерживаться/etc/resolv.conf.
Это решение только предотвращает systemd-разрешенный от обрабатывания всех запросов разрешения DNS и не ограничивается определенным администратором сети. И это также удостоверяется, что LLMNR и mDNS сервис работают обычно.
(Я не справедлив знакомый с тем, как определение имен работает в соответствии с Linux и также не уверенный в том, что я понял из этих руководств. Pleaes указывают, получил ли я что-то не так. Спасибо :))
Для (X) Ubuntu 18.04 (см. мой ответ в stackexchange).
Вот копия его (я должен сделать копию?)
Вот решение для (X) Бионическая Ubuntu 18.04.
Установка 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-разрешенный!). Также NetworkManager (NM) проверяет - ли это символьная ссылка для обнаружения systemd-разрешенной конфигурации.
$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf
Отключите перезапись/etc/resolv.conf NM (существует также емкостно-резистивный менеджер опции, но это не работает, несмотря на него описан в руководстве):
$ 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