resolv.conf continua a essere sovrascritto quando si riavvia dnsmasq, interrompendo dnsmasq


9

Sto eseguendo Debian Jessie e sto cercando di configurare dnsmasq come server DNS di cache. Ho usato una guida per elaborare quanto segue /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

Fare sudo service dnsmasq restartfallisce e non inizierà, mi dice

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, un po 'strano che una configurazione appena uscita da una guida sia fallita. Rimuoverò solo l' no-pollopzione per vedere se funziona. Questa volta inizia bene, ma la risoluzione DNS sta chiaramente fallendo. File importanti:

/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

Il terzo file sembra essere il file resolv.conf live di dnsmasq, perché l'aggiunta di una riga del nameserver mentre dnsmasq è già in esecuzione fa sì che la risoluzione DNS inizi immediatamente a funzionare. Quindi sembra che abbia ignorato il mio /etc/resolv.dnsmasq. Ho anche provato ad aggiungere una linea di nameserver al mio /etc/resolv.confe rimuovendo la resolv-filelinea /etc/dnsmasq.conf, ma viene sovrascritto immediatamente a quello che vedi sopra facendo sudo service dnsmasq restart.

Cosa sta succedendo con dnsmasq e configuro dnsmasq come server DNS di cache?


1
Se vuoi solo un server statico, perché non inserisci la server=8.8.8.8tua configurazione dnsmasq?
Tripleee,

Sto pensando che no-pollsostanzialmente dice di ignorare il resolv-file. All'avvio, prende qualunque file sia più recente, quindi sarà /etc/resolv.confnel tuo caso (perché viene riscritto quando qualcosa cambia).
Tripleee,

Non so ancora quale sarebbe il modo corretto di fare se avessi in mente più di un server DNS, ma dal momento che non lo farò sarò felice che la tua osservazione abbia risolto il mio problema.
null Utente

Risposte:


11

Sembra che ci sia un bug nello script di avvio dnsmasqche utilizza resolvconfper bloccare il resolver locale se l'interfaccia di loopback locale non è esplicitamente exceptinserita nel /etc/defaults/dnsmasqfile.

La risposta breve è che puoi aggiungere ...

DNSMASQ_EXCEPT=lo

per /etc/defaults/dnsmasqrisolvere il problema.

Per maggiori informazioni, vedi questa domanda ...

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


Questo mi ha salvato la vita. Grazie.
Ryan Bobrowski

3

bigjosh ha ragione - tranne che c'è stato un aggiornamento a dnsmasq, e ora c'è un'opzione alla fine della /etc/default/dnsmasqquale puoi annullare l'hash:

IGNORE_RESOLVCONF=yes

Funziona così con la mia complessa configurazione su Ubuntu 16.04.
Ikon

1
Il modo di Bigjosh ha funzionato per me. Anche se /etc/defaults/dnsmasqaveva le IGNORE_RESOLVECONF=yesistruzioni per decommentarlo per risolvere questo problema, cosa che non ha fatto.
andho,

2

Non usare

resolv-file=/etc/resolv.dnsmasq

Metti il ​​server dns in dnsmasq.conf, come

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

E aggiungi in dnsmasq.conf

no-resolv

1

Se vuoi solo un server DNS solo nella cache e nient'altro che possa fare dnsmasq, faresti meglio a installare lwresdo unbounde utilizzare la configurazione predefinita stock che ti offre un server DNS solo cache. Quindi hai appena impostato /etc/resolv.confl'uso di "nameserver 127.0.0.1" e il gioco è fatto.

La cosa bella è che questi due pacchetti non /etc/resolv.confscherzano con quello che fa dnsmasq ed è quindi una soluzione più pulita IMHO. Di solito è anche possibile rimuovere il resolvconfpacchetto in modo che non ci siano problemi /etc/resolv.conf.

Cordiali saluti, dnsmasq è diventato piuttosto complicato, troppe campane e fischietti e sta causando più dolore per la maggior parte delle persone. Viola BACIO nel mio libro.


Sfortunatamente, alcuni pacchetti dipendono dnsmasq-base, come network-managere libvirt-bin(se stai facendo KVM), quindi non è sempre possibile liberarsene completamente. In tal caso, puoi eliminarlo /usr/sbin/dnsmaqe renderlo un collegamento reale in /bin/truemodo che abbia sempre successo (per ingannare lo script init) Quindi chattr +i /usr/sbin/dnsmasqper bloccarlo dall'aggiornamento. Ho dovuto farlo su diversi laptop.
milli,

+1 come descritto in philandstuff.com/2013/11/07/dnsmasq-resolvconf.html . Comportamento davvero disgustoso e continua a causare dolore anche 5 anni dopo la segnalazione di post e bug ...
user2480144
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.