O resolv.conf continua sendo substituído quando o dnsmasq é reiniciado, quebrando o dnsmasq

9

Estou executando o Debian Jessie e estou tentando configurar o dnsmasq como um servidor DNS em cache. Usei um guia para criar o seguinte /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

Fazer sudo service dnsmasq restartfalha e não vai começar, me dizendo

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, meio estranho que uma configuração diretamente de um guia falhou. Vou apenas remover a no-pollopção para ver se funciona. Desta vez, tudo começa bem, mas a resolução do DNS está claramente falhando. Arquivos Relevantes:

/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

O terceiro arquivo parece ser o arquivo resolv.conf ativo do dnsmasq, porque adicionar uma linha de servidor de nomes a ele enquanto o dnsmasq já está sendo executado faz com que a resolução do DNS comece a funcionar imediatamente. Então parece que ignorou o meu /etc/resolv.dnsmasq. Eu também tentei adicionar uma linha de servidor de nomes para o meu /etc/resolv.confe removendo a resolv-filelinha /etc/dnsmasq.conf, mas ele fica overwritted imediatamente para o que você vê acima em cima de fazer sudo service dnsmasq restart.

O que está acontecendo com o dnsmasq e eu configuro o dnsmasq como um servidor DNS em cache?

nullUser
fonte
11
Se você quer apenas um servidor estático, por que não coloca server=8.8.8.8sua configuração do dnsmasq?
tripleee
Eu estou pensando que no-pollbasicamente diz para ignorar o resolv-file. Na inicialização, é necessário o arquivo que for mais recente, o que acontecerá /etc/resolv.confno seu caso (porque ele é reescrito quando algo muda).
tripleee
Ainda não sei qual seria a maneira correta de fazer se tivesse mais de um servidor DNS em mente, mas como não, ficarei feliz em saber que sua observação resolveu meu problema.
nullUser

Respostas:

11

Parece haver um bug no script de inicialização dnsmasqusado resolvconfpara impedir o resolvedor local, se a interface de loopback local não estiver explicitamente exceptinserida no /etc/defaults/dnsmasqarquivo.

A resposta curta é que você pode adicionar ...

DNSMASQ_EXCEPT=lo

para /etc/defaults/dnsmasqresolver o problema.

Para mais informações, consulte esta pergunta ...

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

bigjosh
fonte
Isso salvou minha vida. Obrigado.
Ryan Bobrowski
3

bigjosh está certo - exceto que houve uma atualização para o dnsmasq e agora existe uma opção no final da /etc/default/dnsmasqqual você pode descompactar:

IGNORE_RESOLVCONF=yes
Maynard
fonte
É assim que funciona com minha configuração complexa no Ubuntu 16.04.
Ikon
11
O jeito de bigjosh funcionou para mim. Mesmo que /etc/defaults/dnsmasqteve IGNORE_RESOLVECONF=yescom instruções para remover o comentário-lo para resolver esta questão, o que não fez.
andho 23/07
2

Não use

resolv-file=/etc/resolv.dnsmasq

Coloque o servidor DNS no dnsmasq.conf, como

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

E adicione no dnsmasq.conf

no-resolv
aclg
fonte
1

Se você deseja apenas um servidor DNS somente em cache e nada mais imagina que o dnsmasq possa fazer, é melhor instalar um lwresdou unboundusar a configuração padrão de estoque que fornece um servidor DNS somente em cache. Então você acabou /etc/resolv.confde usar o "nameserver 127.0.0.1" e pronto.

O bom é que esses dois pacotes não mexem com o que o /etc/resolv.confdnsmasq faz e, portanto, é uma solução IMHO mais limpa. Você também pode remover o resolvconfpacote para não mexer com nada /etc/resolv.conf.

Para sua informação, o dnsmasq se tornou bastante complicado, muitos sinos e assobios e está causando mais dor à maioria das pessoas. Viola o KISS no meu livro.

mili
fonte
Infelizmente, alguns pacotes dependem de dnsmasq-base, como network-managere libvirt-bin(se você estiver executando o KVM), portanto nem sempre é possível se livrar completamente dele. Nesse caso, você pode excluir /usr/sbin/dnsmaqe torná-lo um link físico para /bin/truesempre ter sucesso (para enganar o script init). Depois, chattr +i /usr/sbin/dnsmasqpara impedir que seja atualizado. Eu tive que fazer isso em vários laptops.
Milli
+1, bem descrito em philandstuff.com/2013/11/07/dnsmasq-resolvconf.html . Reallly nojento comportamento e continua causando dor, mesmo 5 anos após o post e bug relatório ...
user2480144