resolv.conf jest ciągle nadpisywany po ponownym uruchomieniu dnsmasq, przerywając dnsmasq

9

Używam Debian Jessie i próbuję skonfigurować dnsmasq jako buforujący serwer DNS. Użyłem przewodnika, aby wymyślić następujące rzeczy /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

Robienie sudo service dnsmasq restartnie powiedzie się i nie zacznie się, mówiąc mi

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.

Ok, trochę dziwne, że konfiguracja prosto z przewodnika nie powiodła się. Po prostu usunę no-pollopcję, aby zobaczyć, czy to działa. Tym razem zaczyna się dobrze, ale rozdzielczość DNS wyraźnie nie działa. Odpowiednie pliki:

/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

Trzeci plik wydaje się być plikiem resolv.conf na żywo dnsmasq, ponieważ dodanie do niego wiersza serwera nazw, gdy dnsmasq jest już uruchomiony, powoduje natychmiastowe uruchomienie rozpoznawania DNS. Wygląda na to, że zignorowałem mój /etc/resolv.dnsmasq. Próbowałem również dodanie odpowiedniego wiersza do mojego serwera nazw /etc/resolv.confi usuwania resolv-filelinię /etc/dnsmasq.conf, ale robi overwritted natychmiast, co widać powyżej po robi sudo service dnsmasq restart.

Co się dzieje z dnsmasq i czy mogę skonfigurować dnsmasq jako buforujący serwer DNS?

nullUser
źródło
1
Jeśli chcesz tylko serwera statycznego, dlaczego nie umieścisz server=8.8.8.8w konfiguracji dnsmasq?
tripleee
Myślę, że w no-pollzasadzie mówi się, aby zignorować resolv-file. Przy uruchamianiu pobiera dowolny plik, który jest nowszy, więc tak będzie /etc/resolv.confw Twoim przypadku (ponieważ zostanie przepisany, gdy coś się zmieni).
tripleee
Nadal nie wiem, jaki byłby właściwy sposób, gdybym miał na myśli więcej niż jeden serwer DNS, ale ponieważ tego nie zrobię, będę szczęśliwy, że twoja uwaga rozwiązała mój problem.
nullUser

Odpowiedzi:

11

Wygląda na to, że w skrypcie startowym występuje błąd, dnsmasqktóry służy resolvconfdo zamykania lokalnego resolvera, jeśli lokalny interfejs sprzężenia zwrotnego nie jest jawnie zaznaczony exceptw /etc/defaults/dnsmasqpliku.

Krótka odpowiedź jest taka, że ​​możesz dodać ...

DNSMASQ_EXCEPT=lo

aby /etc/defaults/dnsmasqrozwiązać ten problem.

Aby uzyskać więcej informacji, zobacz to pytanie ...

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

bigjosh
źródło
To uratowało mi życie. Dziękuję Ci.
Ryan Bobrowski
3

bigjosh ma rację - z wyjątkiem aktualizacji dnsmasq, a teraz jest opcja, na końcu /etc/default/dnsmasqktórej możesz usunąć haszowanie:

IGNORE_RESOLVCONF=yes
Maynard
źródło
Tak to działa z moją złożoną konfiguracją na Ubuntu 16.04.
Ikon
1
Sposób bigjosha działał dla mnie. Mimo że /etc/defaults/dnsmasqmiał IGNORE_RESOLVECONF=yesinstrukcje, jak usunąć komentarz, aby rozwiązać ten problem, czego nie zrobił.
andho
2

Nie używaj

resolv-file=/etc/resolv.dnsmasq

Umieść serwer dns w pliku dnsmasq.conf, np

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

I dodaj do dnsmasq.conf

no-resolv
aclg
źródło
1

Jeśli chcesz po prostu serwer DNS buforowania tylko i nic poza tym, że wyobraźnia dnsmasq może zrobić, by być lepiej instalowania bądź lwresdalbo unboundi za pomocą domyślnej konfiguracji czas, który daje serwera DNS tylko do buforowania. Następnie wystarczy ustawić /etc/resolv.conf„nameserver 127.0.0.1” i gotowe.

Zaletą jest to, że te dwa pakiety nie mieszają się z tym, co /etc/resolv.confrobi dnsmasq, a zatem jest czystszym rozwiązaniem IMHO. Zazwyczaj można również usunąć resolvconfpakiet, aby nic nie zadzierało /etc/resolv.conf.

Do Twojej wiadomości, dnsmasq stało się dość skomplikowane, zbyt wiele dzwonków i gwizdków i powoduje już ból u większości ludzi. Narusza KISS w mojej książce.

mili
źródło
Niestety, niektóre pakiety zależą od dnsmasq-base, jak network-manageri libvirt-bin(jeśli robisz KVM), więc nie zawsze można całkowicie się go pozbyć. W takim przypadku możesz usunąć /usr/sbin/dnsmaqi ustawić go jako stały link, aby /bin/truezawsze się udawał (oszukać skrypt init), a następnie chattr +i /usr/sbin/dnsmasqzablokować jego aktualizację. Musiałem to zrobić na kilku laptopach.
milli
+1, jak również opisano w philandstuff.com/2013/11/07/dnsmasq-resolvconf.html . Naprawdę obrzydliwe zachowanie i powoduje ból nawet 5 lat po zgłoszeniu błędu i zgłoszeniu błędu ...
user2480144