web-dev-qa-db-fra.com

Utilisation de dnsmasq avec NetworkManager

Il était bien connu que NetworkManager ne joue pas bien avec dnsmasq (ref: ici ). J'ai écrémé la longue discussion ici mais je ne suis toujours pas sûr de la façon dont la façon recommandée de gérer la situation est.

Tout ce que je veux, c'est faire est d'utiliser dnsmasq pour fournir DNS et DHCP à mon réseau local. Quelle serait la voie recommandée dans ce cas?

Il semble que le problème reste même pour Ubuntu 14.04, même le bug est prétendu être corrigé.

En tant que contextuels, les gens désactivent la NM-asservie dnsmasq-base Parce que les raisons suivantes:

Le NM-asservi dnsmasq utilise des options codées (en C) qui fournissent des fonctionnalités extrêmement limitées.

  • Il n'écoute pas sur Ethx (--listen-address=127.0.0.1). Nous ne pouvons donc pas utiliser nos serveurs comme serveurs DNS pour nos PC de réseau local, c'est-à-dire que cela est totalement inutile pour les ordinateurs de lans.
  • Il ne cache pas les demandes (--cache-size=0). Pas de cache ==> Aucun requête DNS Scersup. Cela est à nouveau très significatif pour les ordinateurs de rémunération car il existe de nombreux utilisateurs simultanés.
  • Enfin, nous avons également besoin de la fonctionnalité DHCP et TFTP de DNSMASQ, alors même si NM + DNSMASQ comprenait un vrai serveur DNS, nous devrions exécuter un autre DNSMASQ

Mais je ne sais pas si elles sont toujours tenues et/ou comment la solution a résolu le problème. En outre, aucun d'entre eux ne sont très clairs exactement ce qu'ils ont fait et comment ils ont fait pour résoudre leur problème. C'est-à-dire que la partie de solution est manquante de la partie longue discussion . Quelqu'un peut-il remplir les blancs s'il vous plaît? C'est à dire.,

Le dnsmasq fourni hors de la boîte par Ubuntu ne fonctionne pas, du côté serveur, pour les raisons susmentionnées. Et aussi, du côté client, "Le DNSMASQ installé sur ces ordinateurs portables Ubuntu ne peut pas faire la requête DNS LAN de mon serveur DNS" , car "Les (ordinateurs portables Ubuntu ') NetworkManager leur permettent d'avoir un réglage bizarre 127.0.1.1.1.1.1.1.1.1.1 (Réf: Solution DNS pour réseau local ou réseau local pour réseau local )

Comment faire du DNSMASQ pour fonctionner correctement avec NetworkManager, de manière à fournir DNS et DHCP (et TFTP) à mon réseau local, sur le serveur et le côté client?

Tl'dr

pour ceux qui recherchent la réponse. Sur toutes les réponses ci-dessous, j'ai trouvé la solution la plus simple est @ Brad's, pour le côté serveur (toujours aucune bonne réponse pour le côté client):

la seule solution au problème est de désactiver le DNSMASQ DNSMASQ ... et d'installer la "standard" DNSMASQ, puis de la configurer via sa norme /etc/dnsmasq.conf fichier de configuration.

15
xpt

Il est possible de remplacer les paramètres en les mettant en /etc/NetworkManager/dnsmasq.d/*.conf. Les paramètres de fichier de configuration prennent la priorité sur les drapeaux de ligne de commande. Ils sont appliqués lorsque NetworkManager commence dnsmasq. Cours Sudo service network-manager restart Pour réappliquer. (En cas de doute: la réponse de Brad a raté le fait que ps ax | grep dns montre un --conf-dir argument)

Par exemple:

echo cache-size=1000 |Sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Comme je me souviens que je me souvienne que NetworkManager désactive la mise en cache DNSMASQ par défaut en raison de préoccupations sur une intoxication cache. Pour une machine où tous les utilisateurs ont confiance, cela peut ne pas être un problème.

NetworkManager n'intègre pas avec resolvconf et le serveur de NM à 127.0.1.1 Ne sera pas utilisé localement si le package ResolvConfr est installé. resolvconf fait partie des installations d'Ubuntu-Minimal et de Debian Standard; NetworkManager réamentre cette fonctionnalité de manière plus intégrée et moins basée sur le script.

NetworkManager veille à ne pas interférer avec une instance DNSMASQ globale (liaison à une IP de bouclage secondaire et à la définition bind-interfaces par /etc/dnsmasq.d/network-manager). Si vous installez une instance DNSMASQ globale et gardez l'instance NM, double enregistrement /etc/resolv.conf Pour voir lequel l'hôte utilisera par défaut.

Bien que vous puissiez personnaliser l'instance DNSMASQ de NetworkManager, comme indiqué ci-dessus, si vous souhaitez un serveur DNS qui se lie aux interfaces publiques, vous devez installer le package dnsmasq (NetworkManager utilise uniquement dnsmasq-base, qui ne configure pas une instance globale) et mettez votre configuration dans /etc/dnsmasq.d/*.conf. L'instance esclave de NetworkManager ne signifie que pour se lier à l'interface de bouclage et la configurer au-delà de cette portée risque de le casser.


En résumé, pour quelqu'un qui veut juste la mise en cache DNS locale:

Sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |Sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Pour un réseau local simple, le partage de la connexion de NetworkManager devrait toujours suffire. Mais pour un réseau local configuré sur mesure, avec TFTP et ainsi de suite:

Sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |Sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |Sudo tee -a /etc/dnsmasq.d/lan.conf
Sudo service dnsmasq restart
6
Tobu

Ma solution pourrait casser le gestionnaire de réseau et sa façon de tout garder un moyen simple de faire des choses. Avec la voie brisée de NM de traiter avec DNSMASQ, je viens de le remplacer par ma méthode ci-dessous.

Une solution de contournement du problème était de simplement faire ce qui suit:

Sudo apt install dnsmasq
cp /etc/dnsmasq.conf ~/

Modifier le ~/dnsmasq.conf Fichier dans votre répertoire utilisateur Comment vous voulez que ce soit et enregistrez-le.

Sudo rm -v /etc/dnsmasq.conf
Sudo cp -v ~/dnsmasq.conf /etc/
Sudo chattr +i /etc/dnsmasq.conf
Sudo systemctl restart dnsmasq.service

J'ai fait un simple alias de bash et le mettre au bas de mon fichier ~/.bash_aliases pour faciliter la modification du fichier dnsmasq.conf. Voici l'alias:

alias="Sudo chattr -i /etc/dnsmasq.conf && Sudo nano -w /etc/dnsmasq.conf && Sudo chattr +i /etc/dnsmasq.conf && Sudo systemctl restart dnsmasq.service"

Bien sûr, vous pouvez choisir n'importe quel éditeur de votre goût pour la deuxième commande sudo dans l'alias, mais j'ai utilisé Nano là-bas pour la facilité pour tout le monde. Enregistrez le fichier, fermez et rouvrez votre onglet Terminal de commande/Fenêtre. Cela devrait permettre à l'alias d'être disponible pour les onglets terminaux/fenêtres nouvellement ouverts.

Il suffit d'exécuter eddmc à partir de votre compte d'utilisateur et vous demandera votre mot de passe d'exécuter les commandes élevées.

Notez que j'ai toujours chattr +i le fichier. C'est ainsi que Network Manager ne écrasera pas votre config avec ses propres.

Sur les connexions Ethernet câblées, il ne devrait y avoir aucun problème. J'ai trouvé depuis que j'utilise dnsmasq pour la mise en cache DNS sur des ordinateurs portables avec sans fil que je dois redémarrer manuellement le dnsmasq.service après la connexion à un point d'accès. Je pense que le gestionnaire de réseau peut effectuer des tâches telles que le redémarrage des services lors de la connexion, mais je n'ai pas encore examiné cela.

0
jpyper

Je voulais affecter un Mac particulier à une adresse IP particulière et aux fins de la stabilité, collez-le avec le gestionnaire de réseau/DNSMASQ par défaut autant que possible.

https://cgit.freedesktop.org/networkmanager/networkmanager/tree/src/dnsmasq/nm-dnsmasq-manager.con a le commentaire d'utiliser --conf-file pour ignorer les configurations, mais plus tard dans le fichier que nous avons

/* dnsmasq exits if the conf dir is not present */
    if (g_file_test (CONFDIR, G_FILE_TEST_IS_DIR))
        nm_cmd_line_add_string (cmd, "--conf-dir=" CONFDIR);

Sous Ubuntu 16.04 LTS, après avoir configuré un point chaud Wi-Fi et partageant une autre connexion, ps auxgww | grep dnsmasq montre que le dernier argument de ligne de commande de chacun des processus DNSMASQ est:

--conf-dir=/etc/NetworkManager/dnsmasq-shared.d

Ainsi, il est possible de créer des fichiers de configuration dans ce répertoire partagé parmi toutes les invocations de DNSMASQ qui sont lancées par Network Manager.

J'ai créé /etc/networkmanager/dnsmasq-shared.d/hue

dhcp-Host=0c:4d:e9:a0:ce:cf,192.168.1.221

et redémarré, bien que courir

Sudo service network-manager restart

aurait travaillé.

Cela a abouti à mon appareil d'obtenir l'adresse IP appropriée.

Oui, c'est faux parce que cela signifie que toutes les invocations de DNSMASQ par NetworkManager recevront cette déclaration, mais dans ce cas, il est inoffensif car il ne compte que si le Mac apparaît sur le réseau en question. Si le réseau n'est pas 192.168.1, il y aura des problèmes.

Ceci est plus robuste que de remplacer/USR/SBIN/DNSMASQ avec un script proposé à https://gist.github.com/magnetikonline/623615

La bonne solution consisterait à modifier comment DNSMASQ est invoquée à utiliser correctement les fichiers de configuration DNSMASQ. Je comprends que le désir d'avoir un gestionnaire de réseau "ne fait que travailler", mais faire des outils idiot-preuve signifie que seuls les idiots peuvent les utiliser.

0
Christopher Brooks