resoluv.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. Так виглядає, що вона ігнорувала мою /etc/resolv.dnsmasq. Я також спробував додати рядок сервера імен до мого /etc/resolv.confта видалити resolv-fileрядок /etc/dnsmasq.conf, але він негайно заміняється на те, що ви бачите вище при виконанні sudo service dnsmasq restart.

Що відбувається з dnsmasq і чи можу я налаштувати dnsmasq як кешування DNS-сервера?


1
Якщо ви просто хочете статичний сервер, чому б вам не server=8.8.8.8вставити конфігурацію dnsmasq?
трійка

Я думаю, що в no-pollосновному каже ігнорувати resolv-file. При запуску потрібен той файл, який буде новіший, і це буде /etc/resolv.confу вашому випадку (оскільки він переписується, коли щось змінюється).
трійчатка

Я досі не знаю, яким би був правильний спосіб зробити це, якби я мав на увазі більше одного сервера DNS, але оскільки я цього не роблю, я просто буду радий, що ваше зауваження вирішило мою проблему.
nullUser

Відповіді:


11

У сценарії запуску, як видається, є помилка, dnsmasqяка використовує resolvconfдля припинення локального розв’язувача, якщо інтерфейс локальної петлі не є явно except-eded у /etc/defaults/dnsmasqфайлі.

Коротка відповідь полягає в тому, що ви можете додати ...

DNSMASQ_EXCEPT=lo

щоб /etc/defaults/dnsmasqвирішити проблему.

Для отримання додаткової інформації див. Це питання ...

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


Це врятувало мені життя. Дякую.
Райан Бобровський

3

bigjosh має рацію - за винятком того, що було оновлено dnsmasq, і тепер є варіант, в кінці /etc/default/dnsmasqякого ви можете скасувати хеш:

IGNORE_RESOLVCONF=yes

Ось як це працює з моєю складною установкою на 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

1

Якщо ви просто хочете керувати DNS-сервером, призначеним лише для кешування, і нічого іншого, що може зробити dnsmasq, вам буде краще встановити lwresdабо unboundвикористовувати конфігурацію за замовчуванням, яка дає вам керуючий DNS-сервер лише для кешування. Тоді ви просто налаштуєте /etc/resolv.confвикористовувати "nameserver 127.0.0.1" і все закінчено.

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

FYI, dnsmasq отримав досить складний характер, занадто багато дзвіночків і вже просто заподіює біль більшості людей. Порушує KISS у моїй книзі.


На жаль, деякі пакунки залежать від dnsmasq-base, як, наприклад, network-managerі libvirt-bin(якщо ви працюєте з KVM), тому повністю позбутися цього не завжди можливо. У такому випадку ви можете видалити /usr/sbin/dnsmaqі зробити його жорстким посиланням, щоб /bin/trueвоно завжди вдавалося (обдурити скрипт init), а потім chattr +i /usr/sbin/dnsmasqзаблокувати його від оновлення. Мені довелося це робити на кількох ноутбуках.
мілі

+1, як добре описано в philandstuff.com/2013/11/07/dnsmasq-resolvconf.html . Надзвичайно огидна поведінка і продовжує викликати біль навіть через 5 років після повідомлення про повідомлення про помилку ...
user2480144
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.