Відповіді:
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.
Відповідно до посібника із системного дозволу, система-рішення надає послуги з вирішення імен через три різні інтерфейси:
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 :))
Для (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