Configurer dnsmasq de NetworkManager pour utiliser / etc / hosts

22

J'ai installé DNSMASQ mais il ne démarrait pas car le port 53 était occupé.

J'ai découvert qu'ubuntu avait déjà un paquet dnsmasq et que ça marche.

Maintenant, le problème est ... Je veux juste pouvoir résoudre mes hôtes dans / etc / hosts à travers lui

c'est- nslookup somehostonlan localhost à- dire: à résoudre pour certaines IP prises dans le fichier / etc / hosts.

mais cela ne se produit pas.

Pourquoi? BTW, en tant que serveur DNS de mise en cache, cela fonctionne bien. Je veux juste qu'il résout les hôtes à partir du fichier / etc / hosts c'est tout

Bakytn
la source

Réponses:

22

Pour accélérer Internet, ubuntu 12.04 a ajouté un plugin à NetworkManager pour démarrer dnsmasq, un serveur DNS local qui met en cache les entrées DNS. Le problème est que le plugin a codé en dur la chaîne --no-hosts.

Une solution consiste donc à commenter la ligne qui charge le plugin dans le fichier de configuration de NetworkManager et à redémarrer NetworkManager:

sudo mv /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.bak
sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.bak | sed -e "s/^\(dns=dnsmasq\)$/#\1/" > /etc/NetworkManager/NetworkManager.conf'
sudo restart network-manager

Une autre solution consiste à envelopper dnsmasq pour filtrer les arguments indésirables:

sudo mv /usr/sbin/dnsmasq /usr/sbin/dnsmasq.bin
sudo bash -c 'cat > /usr/sbin/dnsmasq' << EOF
#!/bin/sh
dnsmasq=/usr/sbin/dnsmasq.bin

exec $dnsmasq `echo $@ | sed -e s/--no-hosts//`
EOF

sudo chmod 755 /usr/sbin/dnsmasq

Veuillez marquer le bogue comme vous affectant.

Une autre solution sans patcher les fichiers système

cat /etc/NetworkManager/dnsmasq.d/hosts.conf 

addn-hosts=/etc/hosts
kbenoit
la source
7

Ce bug me touchait encore aujourd'hui (Ubuntu 14.04).

Enfin, j'ai trouvé une solution qui, ajoutez simplement cette ligne 'addn-hosts = / etc / hosts' au fichier de configuration dnsmasq du paquet Newworkmanager.

echo 'addn-hosts=/etc/hosts' > /etc/NetworkManager/dnsmasq.d/etc-hosts
service network-manager restart

L'idée est que nous ajoutons / etc / hosts en tant que fichier hôte supplémentaire.

Même si je pouvais trouver une solution, l'option codée en dur «--no-hosts» dans le fichier binaire / usr / sbin / NetworkManager me déçoit.

harish2704
la source
7

Depuis août 2015, les autres réponses sont obsolètes.

Réponse simple

  1. Créez /etc/NetworkManager/dnsmasq.d/hosts.conf.
  2. Mettez des lignes comme address=/whatever/1.2.3.4dedans. Voir les documents (chercher --address). Les caractères génériques sont possibles: address/.whatever./1.2.3.4.
  3. Tuer dnsmasq( bug ).
  4. Redémarrez - le: $ service network-manager restart.
mightyiam
la source
1

dnsmasq devrait utiliser automatiquement le /etc/hostsfichier. Cela peut être désactivé par l' -hoption de ligne de commande ou l' no-hostsoption de configuration. Je ne m'attendrais pas non plus à être défini dans la configuration par défaut.

Essayez de forcer dnsmasq à recharger son fichier d'hôtes. (Les modifications apportées au fichier de configuration nécessitent un redémarrage). L'une ou l'autre de ces commandes devrait fonctionner.

service dnsmasq reload

kill -HUP $(pidof dnsmasq)

Si vous travaillez avec un système qui a no-hostsspécifié, vous devriez pouvoir utiliser l' addn-hostsoption pour le remplacer. Normalement, cela serait utilisé pour lire un fichier supplémentaire au /etc/hostsformat. Cela peut être utilisé pour spécifier des données d'hôte supplémentaires que vous souhaitez que DNS fournisse, mais que vous ne voulez pas dans votre /etc/hostsfichier. Cela peut être utilisé pour permettre au gestionnaire de packages et aux outils associés de gérer /etc/hoststandis que des données d'hôtes supplémentaires sont fournies dans un autre fichier.

BillThor
la source
/etc/dnsmasq.conf a commenté toutes les options. Le rechargement n'aide pas
Bakytn
Je ne sais pas ce que j'ai fait. cela semble fonctionner maintenant
bakytn
3
Pourquoi répondriez-vous à cela alors que vous ne connaissez pas réellement la réponse? Le fait que vous "ne vous attendiez pas à ce que l'un ou l'autre soit défini dans la configuration par défaut" ne rend pas le cas tel qu'il est en fait défini et codé en dur dans dnsmasq dans NetworkManger.
Justin Buser
dnsmasq doit être redémarré pour charger les modifications dans les fichiers de configuration
txwikinger
@txwikinger De nombreux fichiers d'options sont relus lors de la dnsmasqréception d'un HUPsignal. Cela inclut les fichiers /etc/hostset /etc/ethers. Les temps de redémarrage sont suffisamment rapides pour qu'il soit rare que les clients n'obtiennent pas de réponse.
BillThor