resolv.conf продолжает перезаписываться при перезапуске dnsmasq, ломая dnsmasq

9

Я использую Debian Jessie и пытаюсь настроить dnsmasq в качестве кэширующего DNS-сервера. Я использовал руководство, чтобы придумать следующее /etc/dnsmasq.conf:

listen-address=127.0.0.1
bind-interfaces
domain-needed
bogus-priv
no-hosts
dns-forward-max=150
cache-size=1000
neg-ttl=3600
resolv-file=/etc/resolv.dnsmasq
no-poll

Делать sudo service dnsmasq restartне удается, и это не начнется, говоря мне

Mar 26 17:13:01 user dnsmasq[26743]: dnsmasq: syntax check OK.
Mar 26 17:13:01 user dnsmasq[26746]: dnsmasq: only one resolv.conf file allowed in no-poll mode.

Хорошо, довольно странно, что конфиг прямо из руководства не удался. Я просто уберу no-pollопцию, чтобы посмотреть, работает ли она. На этот раз все начинается нормально, но разрешение DNS явно не удается. Соответствующие файлы:

/etc/resolv.conf:

nameserver 127.0.0.1

/etc/resolv.dnsmasq:

nameserver 8.8.8.8

/var/run/dnsmasq/resolv.conf:

nameserver 127.0.0.1

Третий файл, по-видимому, является действующим файлом dnsmasq resolv.conf, поскольку добавление строки сервера имен в то время, когда dnsmasq уже работает, приводит к немедленному запуску разрешения DNS. Похоже, это проигнорировало мою /etc/resolv.dnsmasq. Я также попытался добавить строку сервера имен в my /etc/resolv.confи удалить resolv-fileстроку in /etc/dnsmasq.conf, но она сразу же перезаписывается на то, что вы видите выше при выполнении sudo service dnsmasq restart.

Что происходит с dnsmasq и нужно ли настроить dnsmasq в качестве кэширующего DNS-сервера?

nullUser
источник
1
Если вам просто нужен статический сервер, почему бы вам не вставить server=8.8.8.8свой конфиг dnsmasq?
tripleee
Я думаю, что в no-pollосновном говорит, чтобы игнорировать resolv-file. При запуске требуется любой новый файл, так что это будет /etc/resolv.confв вашем случае (потому что он перезаписывается, когда что-то меняется).
tripleee
Я до сих пор не знаю, как правильно это сделать, если бы я имел в виду более одного DNS-сервера, но так как я не знаю, я просто буду рад, что ваше замечание решило мою проблему.
nullUser

Ответы:

11

Кажется, есть ошибка в стартовом скрипте, dnsmasqкоторый использует, resolvconfчтобы заглушить локальный распознаватель, если локальный интерфейс обратной связи явно не exceptзадан в /etc/defaults/dnsmasqфайле.

Короткий ответ: вы можете добавить ...

DNSMASQ_EXCEPT=lo

чтобы /etc/defaults/dnsmasqрешить проблему.

Для получения дополнительной информации см. Этот вопрос ...

/raspberrypi/37439/proper-way-to-prevent-dnsmasq-from-overwriting-dns-server-list-supplied-by-dhcp

bigjosh
источник
Это спасло мою жизнь. Спасибо.
Райан Бобровски
3

bigjosh прав - за исключением того, что было обновление для dnsmasq, и теперь есть опция, в конце /etc/default/dnsmasqкоторой вы можете снять хеш:

IGNORE_RESOLVCONF=yes
Maynard
источник
Вот как это работает с моей сложной установкой на Ubuntu 16.04.
Иконка
1
способ bigjosh работал для меня. Даже при том, что /etc/defaults/dnsmasqимел IGNORE_RESOLVECONF=yesс инструкциями раскомментировать это, чтобы решить эту проблему, которая не сделала.
andho
2

Не использовать

resolv-file=/etc/resolv.dnsmasq

Поместите DNS-сервер в dnsmasq.conf, как

server=/localnet/192.168.0.1 # change ip for your ip-server
server=8.8.8.8
server=8.8.4.4

И добавить в dnsmasq.conf

no-resolv
aclg
источник
1

Если вам нужен только DNS-сервер с кэшированием и ничего более необычного, что может сделать dnsmasq, лучше установить либо одну из них, lwresdлибо unboundиспользовать стандартную конфигурацию по умолчанию, которая дает вам DNS-сервер только для кэширования. Затем вы просто /etc/resolv.confиспользуете «nameserver 127.0.0.1» и все готово.

Приятно то, что эти два пакета не возятся с тем, /etc/resolv.confчто делает dnsmasq, и, таким образом, являются более чистым решением IMHO. Вы также можете удалить resolvconfпакет, чтобы ничего не мешало /etc/resolv.conf.

К вашему сведению, dnsmasq стал довольно сложным, слишком много наворотов и больше всего причиняет боль большинству людей. Нарушает ПОЦЕЛУЙ в моей книге.

Милли
источник
К сожалению, некоторые пакеты зависят dnsmasq-base, как network-managerи libvirt-bin(если вы используете KVM), поэтому не всегда возможно полностью избавиться от него. В этом случае вы можете удалить /usr/sbin/dnsmaqи сделать его жесткой ссылкой, /bin/trueчтобы он всегда был успешным (чтобы обмануть скрипт инициализации), а затем chattr +i /usr/sbin/dnsmasqзаблокировать его от обновления. Я должен был сделать это на нескольких ноутбуках.
Милли
+1, а также описано в philandstuff.com/2013/11/07/dnsmasq-resolvconf.html . Действительно отвратительное поведение и продолжает причинять боль даже через 5 лет после сообщения и сообщения об ошибке ...
user2480144