Il était bien connu que NetworkManager ne jouait pas bien avec dnsmasq
(réf: ici ). J'ai survolé la longue discussion ici, mais je ne sais toujours pas quelle est la façon recommandée de gérer la situation.
Tout ce que je veux, c'est 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 persiste même pour Ubuntu 14.04, même le bug est censé être corrigé.
Pendant le contournement, les gens désactivent l'esclave NM dnsmasq-base
pour les raisons suivantes:
Le NM-esclave dnsmasq
utilise des options codées en dur (en C) qui offrent 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 qu'ils sont complètement inutiles pour les LAN. - Il ne met pas en cache les requêtes (
--cache-size=0
). Pas de mise en cache ==> pas d'accélération des requêtes DNS. Ceci est encore très important pour les réseaux locaux car il existe de nombreux utilisateurs simultanés. - Enfin, nous avons également besoin des fonctionnalités DHCP et TFTP de dnsmasq, donc même si NM + dnsmasq incluait un vrai serveur DNS, nous devrions exécuter un autre dnsmasq
Mais je ne sais pas s'ils tiennent toujours et / ou comment le correctif a résolu le (s) problème (s). De plus, aucun d'entre eux ne sait exactement ce qu'ils ont fait et comment ils l'ont fait pour résoudre leur problème. C'est-à-dire que la partie solution est absente de la longue discussion . Quelqu'un peut-il remplir les blancs s'il vous plaît? C'est à dire,
Le dnsmasq
prêt à l'emploi fourni par Ubuntu ne fonctionne pas, côté serveur, pour les raisons ci-dessus. Et aussi, du côté client, "le dnsmasq installé sur ces ordinateurs portables Ubuntu ne peut pas faire de requête DNS LAN depuis mon serveur DNS" , car "le NetworkManager (ordinateurs portables Ubuntu ') leur fait avoir un paramètre de serveur de noms 127.0.1.1 étrange" ( ref: solution DNS pour LAN ou réseau domestique local )
Comment faire en sorte que dnsmasq fonctionne correctement avec NetworkManager, afin de fournir DNS et DHCP (et TFTP) à mon réseau local, côté serveur et côté client?
TL'dr
pour ceux qui cherchent la réponse. De toutes les réponses ci-dessous, j'ai trouvé que la solution la plus simple est @ brad's, pour le côté serveur (toujours pas de bonne réponse pour le côté client):
la seule solution au problème est de désactiver le dnsmasq du lecteur NM ..., d'installer le dnsmasq "standard" puis de le configurer via son
/etc/dnsmasq.conf
fichier de configuration standard .
Réponses:
J'ai aussi tes problèmes.
En principe, après wiki.archlinux , il semble que pour activer la mise en cache, il devrait suffire de créer un fichier
/etc/NetworkManager/dnsmasq.d/cache
contenant simplementJ'ai essayé mais après le redémarrage de NM, je n'ai toujours pas de cache:
Notez que le fichier de conf cité est toujours vide: je n'ai pu configurer aucune option à l'aide de cette procédure.
Dans l'ensemble, il semble que le masque dns asservi NM dans 14.04 (qui est fourni par le paquetage dnsmasq-base) est complètement verrouillé, il n'est donc pas possible d'activer la mise en cache, ni rien d'autre (dhcp, tftp).
Si c'est vrai, je pense que, comme vous le dites, la seule solution au problème est de désactiver le dnsmasq NM-drive en commentant la ligne
dans le fichier
/etc/NetworkManager/NetworkManager.conf
et installez le dnsmasq "standard" puis configurez-le via son/etc/dnsmasq.conf
fichier de configuration standard .la source
--conf-dir=/etc/NetworkManager/dnsmasq.d
, lecache-size
spécifié dans le fichier que vous avez créé est utilisé. Vous pouvez voir la différence en utilisantdig
Il est possible de remplacer les paramètres en les insérant
/etc/NetworkManager/dnsmasq.d/*.conf
. Les paramètres du fichier de configuration ont priorité sur les indicateurs de ligne de commande. Ils sont appliqués lorsque NetworkManager démarre dnsmasq. Courezsudo service network-manager restart
pour réappliquer. (En cas de doute: la réponse de Brad a manqué le fait quips ax | grep dns
montre un--conf-dir
argument)Par exemple:
Si je me souviens, NetworkManager désactive la mise en cache dnsmasq par défaut en raison de problèmes d'empoisonnement du cache. Pour une machine sur laquelle tous les utilisateurs sont fiables, ce n'est peut-être pas un problème.
NetworkManager ne s'intègre pas avec
resolvconf
et le serveur de NM127.0.1.1
ne sera pas utilisé localement si le package resolvconf est installé. resolvconf fait partie des installations Debian minimales et ubuntu; NetworkManager réimplémente cette fonctionnalité d'une manière plus intégrée et moins basée sur des scripts.NetworkManager ne fait sûr de ne pas interférer avec une instance globale de dnsmasq ( la liaison à un paramètre IP loopback secondaire et
bind-interfaces
par/etc/dnsmasq.d/network-manager
). Si vous installez une instance globale de dnsmasq et conservez l'instance de NM, vérifiez à nouveau/etc/resolv.conf
celle que l'hôte utilisera par défaut.Bien que vous puissiez personnaliser l'instance dnsmasq de NetworkManager comme indiqué ci-dessus, si vous voulez un serveur DNS qui se lie aux interfaces publiques, vous devez installer le
dnsmasq
package (NetworkManager utilise uniquementdnsmasq-base
, qui ne configure pas une instance globale) et mettre votre configuration dedans/etc/dnsmasq.d/*.conf
. L'instance esclave de NetworkManager est uniquement destinée à se lier à l'interface de bouclage et sa configuration au-delà de cette portée risquerait de la casser.En résumé, pour quelqu'un qui veut juste une mise en cache DNS locale:
Pour un LAN simple, le partage de connexion de NetworkManager devrait toujours suffire. Mais pour un LAN configuré sur mesure, avec TFTP et ainsi de suite:
la source
dnsmasq
paquet. alors à quoiecho
sert la prochaine commande? depuis lednsmasq
sera parti.dnsmasq
, mais vous devriez toujours avoirdnsmasq-base
installé à cause de NM.Je voulais attribuer un MAC particulier à une adresse IP particulière et, pour des raisons de stabilité, m'en tenir autant que possible au gestionnaire de réseau / dnsmasq par défaut.
https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c contient le commentaire sur l'utilisation de --conf-file pour ignorer les configurations, mais plus loin dans le fichier, nous avons
Sous Ubuntu 16.04 LTS, après avoir configuré un point d'accès Wi-Fi et partagé une autre connexion,
ps auxgww | grep dnsmasq
montre que le dernier argument de ligne de commande de chacun des processus dnsmasq est:Ainsi, il est possible de créer des fichiers de configuration dans ce répertoire qui sont partagés entre toutes les invocations de dnsmasq qui sont démarrées par Network Manager.
J'ai créé /etc/NetworkManager/dnsmasq-shared.d/Hue
et redémarré, bien qu'en cours d'exécution
aurait fonctionné.
Cela a permis à mon appareil d'obtenir l'adresse IP appropriée.
Oui, c'est faux car cela signifie que toutes les invocations de dnsmasq par NetworkManager obtiendront cette déclaration, mais dans ce cas, elle est inoffensive car cela n'a d'importance 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.
C'est plus robuste que de remplacer / usr / sbin / dnsmasq par un script comme cela est proposé sur https://gist.github.com/magnetikonline/6236150
La bonne solution serait de modifier la façon dont dnsmasq est invoqué pour utiliser correctement les fichiers de configuration de dnsmasq. Je comprends le désir que Network Manager "fonctionne tout simplement", mais rendre les outils à l'épreuve des idiots signifie que seuls les idiots peuvent les utiliser.
la source
Ma solution pourrait briser Network Manager et sa façon de tout faire simple. Avec la manière cassée de NM de gérer dnsmasq, je viens de le remplacer avec ma méthode ci-dessous.
Une solution de contournement au problème consistait simplement à procéder comme suit:
Modifiez le
~/dnsmasq.conf
fichier dans votre répertoire utilisateur comme vous le souhaitez et enregistrez-le.J'ai créé un alias bash simple et je l'ai placé au bas de mon fichier ~ / .bash_aliases pour faciliter la modification du fichier dnsmasq.conf. Voici l'alias:
Bien sûr, vous pouvez choisir n'importe quel éditeur à votre convenance pour la deuxième commande sudo dans l'alias, mais j'ai utilisé nano pour plus de facilité pour tout le monde. Enregistrez le fichier, fermez et rouvrez votre onglet / fenêtre de terminal de commande. Cela devrait permettre à l'alias d'être disponible pour les onglets / fenêtres de terminal récemment ouverts.
Exécutez simplement à
eddmc
partir de votre compte utilisateur et il vous demandera votre mot de passe pour exécuter les commandes élevées.Notez que j'ai toujours
chattr +i
le dossier. C'est ainsi que Network Manager ne remplacera pas votre configuration par la sienne.Sur les connexions Ethernet filaires, il ne devrait y avoir aucun problème. J'ai découvert depuis que j'utilise dnsmasq pour la mise en cache DNS sur les ordinateurs portables avec sans fil que je dois redémarrer manuellement le service dnsmasq.après la connexion à un point d'accès. Je pense que Network Manager peut effectuer des tâches comme le redémarrage des services lors de la connexion, mais je n'ai pas encore examiné cela.
la source
Malgré les affirmations contraires ici et ailleurs, NetworkManager ignore complètement tous les fichiers de configuration de dmsmasq - même ceux de son propre répertoire
/etc/NetworkManager/dnsmasq-shared.d
. La preuve est dans le code source de NetworkManager ... Voici le commentaire pertinent:Voici le lien vers le code source pertinent (lignes 139-144).
la source