Як відключити системну та усунути DNS за допомогою dnsmasq?


32

Ubuntu 16.10+ використовує systemd-resolvedв якості DNS- резолюції .

Я віддаю перевагу налаштування 16.04 використовує, dnsmasqяк резолюцію.

Як я можу це зробити 16.10+, особливо 17.04?


Можливо, це може допомогти: askubuntu.com/questions/1032450/…
cmak.fr

Відповіді:


35

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.


Відмінна відповідь і, здавалося б, єдине рішення при відключенні NetworkManager неприйнятно!
bogl

3
Для мене це була чудова відповідь, але також вимагала додаткових кроків з відповіді @ blabla, додавши dns=dnsmasqконфігурацію до/etc/NetworkManager/NetworkManager.conf
Роберто Тилей

Те ж саме. Після боротьби із системним рішенням та беззв’язним переходом на 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. можна зробити так

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.
pbhj

1
Цей крок став для мене необхідним доповненням до відповіді @ quixotic (ubuntu 17.04, повна установка, а не LiveCD).
Роберто Тілей

0

Відповідно до посібника із системного дозволу, система-рішення надає послуги з вирішення імен через три різні інтерфейси:

  1. "повнофункціональний доступ до системи, розв'язаний системою, на шині"
  2. "локальний слухач заглушки DNS за IP-адресою 127.0.0.53 в інтерфейсі локальної петлі"
  3. API glibc getaddrinfo (3), як визначено RFC3493, та пов'язані з ним функції резолюції, включаючи gethostbyname (3). Цей API широко підтримується, в тому числі за межами платформи Linux. У своєму теперішньому вигляді він не розкриває інформацію про стан перевірки DNSSEC і є лише синхронним. Цей API підтримується перемикачем обслуговування glibc (nss (5)). Використання NSS-модуля glibc nss-resolution (8) необхідне для того, щоб дозволити NIS-функції glibc розв'язувати імена хостів через системне рішення.

Здається, що перші два інтерфейси не будуть втручатися в нормальну роздільну здатність DNS, і для мене проблема, ймовірно, буде розташована на третьому.

У посібнику з nss -зволу :

Щоб активувати модуль NSS, додайте в "рядок" рядок, починаючи з "hosts:" в /etc/nsswitch.conf. Зокрема, рекомендується розмістити "вирішити" на початку /etc/nsswitch.conf у рядку "hosts:" (але після записів "файли" або "мій машини"), безпосередньо перед записом "dns", якщо він існує, після чого "[! UNAVAIL = return]", щоб переконатися, що запити DNS завжди спрямовуються за допомогою системного дозволу (8), якщо він запущений, але вони будуть спрямовані до nss-dns, якщо ця послуга недоступна

Отже, потрібно зробити так, щоб "dns" передувало "вирішувати" в рядку "host:" /etc/nsswitch.conf . І тоді getaddrinfoслід просто дотримуватися /etc/resolv.conf .

Це рішення лише запобігає системному вирішенню обробляти всі запити дозволу DNS і не обмежується певним мережевим менеджером. А також гарантує, що служба LLMNR та mDNS працюють нормально.

(Я не дуже добре знайомий з тим, як працює роздільна здатність імен під Linux, а також не впевнений у тому, що я зрозумів з цих посібників. Просимо вказати, якщо я щось не так. Thx :))


0

Для (X) Ubuntu 18.04 (див. Мою відповідь у stackexchange ).

Ось його копія (чи потрібно зробити копію?)

Ось рішення для (X) Ubuntu 18.04 Bionic.

Встановіть dnsmasq

sudo apt install dnsmasq

Відключіть системний слухач на порту 53 (не торкайтеся /etc/systemd/Weather.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 та створіть заново. Це важливо, оскільки resoluv.conf є символьним посиланням на /run/systemd/resolve/stub-resolv.conf за замовчуванням. Якщо ви не видалите символічне посилання, файл буде перезаписаний системою при перезавантаженні (навіть якщо ми відключили системне рішення!). Також 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 використовувати резолюцію.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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.