Было хорошо известно, что NetworkManager не очень хорошо играет dnsmasq
(см .: здесь ). Я просмотрел длительное обсуждение здесь, но все еще не уверен, каков рекомендуемый способ справиться с ситуацией.
Все, что я хочу, это использовать dnsmasq
DNS и DHCP для моей локальной сети. Что было бы рекомендовано в этом случае?
Кажется, проблема остается даже для Ubuntu 14.04, даже ошибка считается исправленной.
Как обходные пути, люди отключают NM-порабощенных dnsmasq-base
по следующим причинам:
Порабощенный NM dnsmasq
использует жестко закодированные опции (в C), которые обеспечивают чрезвычайно ограниченную функциональность.
- Он не слушает ethX (
--listen-address=127.0.0.1
). Таким образом, мы не можем использовать наши серверы в качестве DNS-серверов для наших локальных сетевых компьютеров, то есть это совершенно бесполезно для локальных сетей. - Он не кэширует запросы (
--cache-size=0
). Нет кэширования ==> нет ускорения DNS-запросов. Это опять-таки очень важно для локальных сетей, так как есть много одновременных пользователей. - Наконец, нам также нужны функциональные возможности dnsmasq для DHCP и TFTP, поэтому даже если NM + dnsmasq включает в себя реальный DNS-сервер, нам придется запустить другой dnsmasq
Но я не уверен, что они все еще сохраняются и / или как исправление решило проблему (и). Кроме того, ни один из них не очень ясно, что именно они сделали и как они сделали, чтобы решить свою проблему. То есть часть решения отсутствует в длительной дискуссии . Может кто-нибудь заполнить пробелы, пожалуйста? То есть,
dnsmasq
Предоставляется вне коробки с Ubuntu не работает, на стороне сервера, по указанным выше причинам. А также, на стороне клиента, «dnsmasq, установленный на этих ноутбуках Ubuntu, не может выполнять DNS-запрос локальной сети с моего DNS-сервера» , потому что «(Ubuntu laptops») NetworkManager заставляет их иметь странную настройку сервера имен 127.0.1.1 » ( ref: решение DNS для локальной сети или локальной сети )
Как заставить dnsmasq беспрепятственно работать с NetworkManager, чтобы обеспечить DNS и DHCP (и TFTP) для моей локальной сети, как на стороне сервера, так и на стороне клиента?
TL'dr
для тех, кто ищет ответ. Из всех ответов, приведенных ниже, я обнаружил, что самое простое решение - @ brad для серверной части (все еще нет хорошего ответа для клиентской стороны):
Единственное решение проблемы - отключить NM-накопитель dnsmasq ... и установить «стандартный» dnsmasq, а затем настроить его через стандартный
/etc/dnsmasq.conf
файл конфигурации.
Ответы:
У меня тоже есть твои проблемы.
В принципе, после wiki.archlinux кажется, что для включения кэширования достаточно создать файл,
/etc/NetworkManager/dnsmasq.d/cache
содержащий простоЯ попробовал это, но после перезапуска NM у меня все еще нет кеша:
Обратите внимание, что цитируемый файл conf всегда пуст: мне не удалось настроить ни одну опцию, используя эту процедуру.
В целом, похоже, что dnsmask, порабощенный NM, в 14.04 (который предоставляется пакетом dnsmasq-base) полностью заблокирован, поэтому невозможно включить ни кэширование, ни что-либо еще (dhcp, tftp).
Если это правильно, я думаю, что, как вы говорите, единственное решение проблемы - отключить NM-накопитель dnsmasq, закомментировав строку
в файле
/etc/NetworkManager/NetworkManager.conf
и установите «стандартный» dnsmasq, а затем настройте его через стандартный/etc/dnsmasq.conf
файл конфигурации.источник
--conf-dir=/etc/NetworkManager/dnsmasq.d
, используетсяcache-size
указанный в созданном вами файле. Вы можете увидеть разницу с помощьюdig
Можно переопределить настройки, введя их в
/etc/NetworkManager/dnsmasq.d/*.conf
. Настройки файла конфигурации имеют приоритет над флагами командной строки. Они применяются, когда NetworkManager запускает dnsmasq. Беги,sudo service network-manager restart
чтобы заново подать заявку. (Если есть какие-либо сомнения: в ответе Брэда не было факта,ps ax | grep dns
показывающего--conf-dir
аргумент)Например:
Насколько я помню, NetworkManager отключает кеширование dnsmasq по умолчанию из-за проблем с отравлением кеша. Для машины, которой доверяют все пользователи, это может не быть проблемой.
NetworkManager не интегрируется
resolvconf
, и сервер NM at127.0.1.1
не будет использоваться локально, если установлен пакет resolvconf. resolvconf - это часть Ubuntu-минимальной и стандартной установки Debian; NetworkManager реализует эту функциональность более интегрированным и менее основанным на сценариях способом.NetworkManager гарантирует, что не будет мешать глобальному экземпляру dnsmasq (привязка к вторичному IP-адресу обратной связи и настройка
bind-interfaces
через/etc/dnsmasq.d/network-manager
). Если вы устанавливаете глобальный экземпляр dnsmasq и сохраняете экземпляр NM, дважды проверьте,/etc/resolv.conf
какой из них будет использоваться хостом по умолчанию.Хотя вы можете настроить экземпляр dnsmasq NetworkManager, как показано выше, если вы хотите, чтобы DNS-сервер связывался с общедоступными интерфейсами, вы должны установить
dnsmasq
пакет (используется только NetworkManagerdnsmasq-base
, который не настраивает глобальный экземпляр) и вставить свою конфигурацию/etc/dnsmasq.d/*.conf
. Подчиненный экземпляр NetworkManager предназначен только для привязки к интерфейсу обратной связи, и его настройка вне этой области может привести к его поломке.Таким образом, для тех, кто просто хочет локальное кэширование DNS:
Для простой локальной сети все еще должно быть достаточно общего доступа к сети NetworkManager. Но для настраиваемой локальной сети, с TFTP и так далее:
источник
dnsmasq
пакет. тогда для чего следующаяecho
команда? так какdnsmasq
не будет.dnsmasq
, но вы все равно должны былиdnsmasq-base
установить из-за NM.Я хотел назначить конкретный MAC-адрес определенному IP-адресу, и в целях стабильности придерживайтесь стандартного Network Manager / dnsmasq, насколько это возможно.
https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c содержит комментарий об использовании --conf-file для игнорирования конфигураций, но позже в файле мы имеем
В Ubuntu 16.04 LTS после настройки горячей точки Wi-Fi и совместного использования другого подключения
ps auxgww | grep dnsmasq
показано, что последний аргумент командной строки каждого из процессов dnsmasq:Таким образом, в этом каталоге можно создавать файлы конфигурации, которые будут использоваться всеми вызовами dnsmasq, запускаемыми Network Manager.
Я создал /etc/NetworkManager/dnsmasq-shared.d/Hue
и перезагрузился, хотя работает
работал бы.
Это привело к тому, что мое устройство получило соответствующий IP-адрес.
Да, это неправильно, потому что это означает, что все вызовы dnsmasq от NetworkManager получат эту декларацию, но в этом случае она безвредна, поскольку имеет значение только в том случае, если MAC обнаружен в рассматриваемой сети. Если сеть не 192.168.1, то возникнут проблемы.
Это более надежно, чем замена / usr / sbin / dnsmasq сценарием, как это предлагается на https://gist.github.com/magnetikonline/6236150.
Правильным решением было бы изменить способ вызова dnsmasq для правильного использования файлов конфигурации dnsmasq. Я понимаю желание, чтобы Network Manager «просто работал», но создание инструментов, защищенных от идиотов, означает, что их могут использовать только идиоты.
источник
Мое решение может сломать Network Manager, и в нем все просто. Из-за неправильного способа работы NM с dnsmasq я просто переопределил его своим методом ниже.
Обойти эту проблему можно было следующим образом:
Отредактируйте
~/dnsmasq.conf
файл в вашем пользовательском каталоге так, как вы хотите, и сохраните его.Я сделал простой псевдоним bash и поместил его внизу моего файла ~ / .bash_aliases, чтобы было легко редактировать файл dnsmasq.conf. Вот псевдоним:
Конечно, вы можете выбрать любой редактор по своему вкусу для второй команды sudo в псевдониме, но я использовал там nano для простоты для всех. Сохраните файл, закройте и снова откройте вкладку / окно вашего командного терминала. Это должно позволить псевдониму быть доступным для недавно открытых вкладок / окон терминала.
Просто запустите
eddmc
из своей учетной записи пользователя, и он попросит ваш пароль для выполнения повышенных команд.Обратите внимание, что я всегда
chattr +i
файл. Это делается для того, чтобы Network Manager не перезаписывал ваш конфиг своим собственным.На проводных соединениях Ethernet не должно быть никаких проблем. С тех пор, как я использую dnsmasq для кэширования dns на ноутбуках с беспроводной связью, мне нужно вручную перезапустить dnsmasq.service после подключения к точке доступа. Я думаю, что Network Manager может выполнять такие задачи, как перезапуск служб при подключении, но я еще не рассматривал это.
источник
Несмотря на заявления здесь и в других местах, NetworkManager полностью игнорирует все файлы конфигурации dmsmasq - даже те, которые находятся в его собственном каталоге
/etc/NetworkManager/dnsmasq-shared.d
. Доказательство в исходном коде для NetworkManager ... Вот соответствующий комментарий:Вот ссылка на соответствующий исходный код (строки 139-144).
источник