Как отключить systemd-разрешенный и разрешить DNS с dnsmasq?

Ubuntu 16.10 + использование systemd-resolved как сопоставитель DNS.

Я предпочитаю установку 16,04 использования, dnsmasq как сопоставитель.

Как я могу сделать это на 16,10 +, особенно на 17,04?

32
задан 1 April 2017 в 16:38

4 ответа

dnsmasq пакеты все еще доступны в 16.10 и 17.04.

  1. Установите dnsmasq и зависимости (или хотя бы загрузите их пакеты) до отключив systemd-resolved :

    sudo apt-get install dnsmasq
    
  2. Отключить systemd-resolved и убедиться, что dnsmasq работает:

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. Сезон dnsmasq по вкусу. После применения настроек перезапустите dnsmasq:

    sudo systemctl stop dnsmasq
    sudo systemctl start dnsmasq
    

После шага 2 у вас может не быть работающего преобразователя системы, пока шаг 3 не будет завершен. Вам может потребоваться перезапустить сетевую подсистему (или просто перезагрузиться), чтобы заставить dnsmasq работать с настройками по умолчанию. В моем тестировании было достаточно добавить известный DNS-сервер в /etc/dnsmasq.conf и перезапустить dnsmasq, чтобы он работал в среде liveCD.

35
ответ дан 23 November 2019 в 00:39

В дополнение к ответу @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
17
ответ дан 23 November 2019 в 00:39

Согласно руководству systemd-разрешенных, systemd-разрешенных предоставляет услуги по определению имен через три различных интерфейса:

  1. "полнофункциональный systemd-разрешенный API выставляет на шине"
  2. "локальный слушатель тупика DNS на IP-адресе 127.0.0.53 на локальном петлевом интерфейсе"
  3. 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 указывают, получил ли я что-то не так. Спасибо :))

0
ответ дан 23 November 2019 в 00:39

Для (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
0
ответ дан 23 November 2019 в 00:39

Другие вопросы по тегам:

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