resolv.conf continue d'être écrasé lorsque dnsmasq est redémarré, cassant dnsmasq

9

J'exécute Debian Jessie et j'essaie de configurer dnsmasq comme serveur DNS de mise en cache. J'ai utilisé un guide pour trouver les éléments suivants /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

Faire sudo service dnsmasq restartéchoue et ça ne commencera pas, me disant

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, assez étrange qu'une configuration directement sortie d'un guide ait échoué. Je vais juste supprimer l' no-polloption pour voir si cela fonctionne. Cette fois, cela démarre très bien, mais la résolution DNS échoue clairement. Fichiers pertinents:

/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

Le troisième fichier semble être le fichier resolv.conf en direct de dnsmasq, car l'ajout d'une ligne de serveur de noms pendant que dnsmasq est déjà en cours d'exécution entraîne le démarrage immédiat de la résolution DNS. Il semble donc qu'il ait ignoré mon /etc/resolv.dnsmasq. J'ai également essayé d'ajouter une ligne de serveur de noms à mon /etc/resolv.confet de supprimer la resolv-fileligne /etc/dnsmasq.conf, mais elle est immédiatement remplacée par ce que vous voyez ci-dessus en faisant sudo service dnsmasq restart.

Que se passe-t-il avec dnsmasq et dois-je configurer dnsmasq comme serveur DNS de mise en cache?

nullUser
la source
1
Si vous voulez juste un serveur statique, pourquoi ne mettez-vous pas server=8.8.8.8dans votre configuration dnsmasq?
tripleee
Je pense que le no-pollfondamental dit d'ignorer le resolv-file. Au démarrage, il prend le fichier le plus récent, ce sera donc /etc/resolv.confvotre cas (car il est réécrit lorsque quelque chose change).
tripleee
Je ne sais toujours pas quelle serait la bonne façon de procéder si j'avais plus d'un serveur DNS en tête, mais comme je ne le suis pas, je serai simplement heureux que votre remarque ait résolu mon problème.
nullUser

Réponses:

11

Il semble y avoir un bogue dans le script de démarrage pour dnsmasqqui utilise resolvconfpour assommer le résolveur local si l'interface de bouclage locale n'est pas explicitement except-ed dans le /etc/defaults/dnsmasqfichier.

La réponse courte est que vous pouvez ajouter ...

DNSMASQ_EXCEPT=lo

pour /etc/defaults/dnsmasqrésoudre le problème.

Pour plus d'informations, consultez cette question ...

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

bigjosh
la source
Cela m'a sauvé la vie. Je vous remercie.
Ryan Bobrowski
3

bigjosh a raison - sauf qu'il y a eu une mise à jour de dnsmasq, et il y a maintenant une option à la fin de /etc/default/dnsmasqlaquelle vous pouvez annuler le hachage:

IGNORE_RESOLVCONF=yes
Maynard
la source
Voilà comment cela fonctionne avec ma configuration complexe sur Ubuntu 16.04.
Ikon
1
La voie de bigjosh a fonctionné pour moi. Même s'il /etc/defaults/dnsmasqavait IGNORE_RESOLVECONF=yesdes instructions pour le décommenter pour résoudre ce problème, ce qu'il n'a pas fait.
andho
2

Ne pas utiliser

resolv-file=/etc/resolv.dnsmasq

Mettez le serveur DNS dans dnsmasq.conf, comme

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

Et ajoutez dans dnsmasq.conf

no-resolv
aclg
la source
1

Si vous voulez juste un serveur DNS de mise en cache uniquement et rien d'autre que dnsmasq peut faire, vous feriez mieux d'installer lwresdou d' unboundutiliser la configuration par défaut stock qui vous donne un serveur DNS de mise en cache uniquement. Ensuite, vous définissez simplement /etc/resolv.confd'utiliser "nameserver 127.0.0.1" et vous avez terminé.

La bonne chose est que ces deux paquets ne plaisantent pas avec ce /etc/resolv.confque fait dnsmasq et est donc une solution plus propre à mon humble avis. Vous pouvez également généralement supprimer le resolvconfpackage afin que rien ne dérange /etc/resolv.conf.

Pour info, dnsmasq est devenu assez compliqué, trop de cloches et de sifflets et ne fait que faire mal à la plupart des gens. Viole KISS dans mon livre.

milli
la source
Malheureusement, certains packages dépendent de dnsmasq-base, comme network-manageret libvirt-bin(si vous utilisez KVM), il n'est donc pas toujours possible de s'en débarrasser complètement. Dans ce cas, vous pouvez le supprimer /usr/sbin/dnsmaqet en faire un lien dur /bin/truepour qu'il réussisse toujours (pour tromper le script init), puis chattr +i /usr/sbin/dnsmasqpour l'empêcher d'être mis à jour. J'ai dû le faire sur plusieurs ordinateurs portables.
milli
+1 également décrit dans philandstuff.com/2013/11/07/dnsmasq-resolvconf.html . Comportement vraiment dégoûtant et continue de causer de la douleur même 5 ans après la publication du rapport de bogue ...
user2480144