Question Comment inclure des lignes dans resolv.conf qui ne seront pas perdues au redémarrage?


J'ai finalement migré vers 12.04 à partir de 7.10. J'ai une dernière partie à compléter mais je suis perplexe. J'utilise Puppet sur chaque serveur et, par le passé, j'ai inclus une adresse de serveur de noms et un nom de domaine de recherche pour le maître de marionnette dans resolv.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

En 12.04, resolv.conf est écrasé au redémarrage. Je ne peux pas utiliser une adresse IP statique pour ceux-ci, donc utiliser les interfaces / etc / network / pour m'aider est un point négatif.

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1

Y a-t-il un moyen d'obtenir que resolvconf gère cela soit dans la tête, la queue ou la base? Si c'est le cas, existe-t-il des exemples que je peux utiliser pour modifier mon serveur?

Toute aide est très appréciée.


148
2018-06-28 13:54


origine




Réponses:


Il est sans doute préférable que votre serveur DNS soit capable de résoudre la "marionnette" à la bonne adresse, et que votre serveur DHCP fournisse l'adresse du serveur DNS et la liste de recherche (si vous avez des adresses IP statiques) les éléments suivants dans / etc / network / interfaces.

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10

Mais si vous voulez le faire via les fichiers de configuration de resolvconf, vous voudrez éditer /etc/resolvconf/resolv.conf.d/base. Dans ce fichier, insérez vos informations comme vous le feriez dans resolv.conf.

nameserver 192.168.1.XXX

Puis dites à resolvconf de se régénérer resolv.conf.

sudo resolvconf -u

120
2018-06-28 15:35



Bien que cette réponse comporte des votes et que la première partie soit plus ou moins correcte, la deuxième partie de la réponse est incorrecte. (1) faire ne pas mettre une ligne "search" dans /etc/resolvconf/resolv.conf.d/head. Si vous placez une ligne "search", cette ligne sera ignorée si resolvconf inclut une ligne "search" dans la partie dynamique du fichier resolv.conf. Le résolveur de glibc ignore toutes les lignes sauf la dernière "recherche" ou "domaine". Voir resolv.conf (5). (2) Si la configuration de resolvconf est modifiée, vous ne devez pas redémarrer le travail resolvconf mais simplement exécuter une mise à jour, "resolvconf -u". - jdthood
J'ai enlevé la ligne. L'autre option serait d'utiliser la queue au lieu de la tête. - tgm4883
base, head ou tail (à partir de 12.04) sont tous réécrits comme resolv.conf, donc je peux confirmer que le commentaire @jdthood est vrai. Donc, une réponse complète dirait - ne modifiez aucun des fichiers resolv.conf, et lancez simplement: sudo /etc/init.d/networking restart En fait, cela va écrire les modifications de l'interface dans resolv.conf. - tishma
@tishma: Salut. Tout d'abord, pour éviter tout malentendu: rien n'écrit dans les fichiers de base, de tête ou de queue. Rien n'écrit dans aucun fichier dans /etc/resolvconf/resolv.conf.d/ au moment de l'exécution. Ces fichiers sont lus par resolvconf qui assemble leur contenu dans le fichier qu'il écrit --- /run/resolvconf/resolv.conf --- auquel pointe le lien symbolique /etc/resolv.conf. Deuxièmement, en ce qui concerne quoi faire après les options DNS-* dans / etc / network / interfaces sont modifiées. Faire ne pas lancez "/etc/init.d/networking restart"; c'est maintenant obsolète. Au lieu de cela, arrêtez l'interface en question et recommencez. - jdthood
En 14.04, cette réponse n'a rien fait pour moi. - Jay Sullivan


Je pense que la réponse est de vérifier votre /etc/dhcp/dhclient.conf, c'est à dire ne pas demander dns-nameservers de ton DHCP client.

Puis mettez à jour votre /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip

Alors votre resolv.conf sera automatiquement configuré comme vous le souhaitez.

Ajouter à la dns-search puis exécutez un /etc/init.d/networking restart  (même si ce script est obsolète, il fonctionne toujours).


32
2017-11-26 01:58



règles dhclient sur tous les paramètres de resolvconf, donc cela devrait être la meilleure réponse. - Alex R
/etc/init.d/networking restart n'a pas fonctionné sur ma machine, mais sudo ifdown -a et alors sudo ifup -a fait. (Aussi, il m'a fallu un peu pour réaliser que je devais remplacer dnsserverip avec quelque chose comme 8.8.8.8; Je me sens un peu bête.) - Jason Gross
essayer systemctl restart networking.service - Pavel Sayekat


Cela est probablement dû à la configuration DHCP lors de la première installation d'Ubuntu. Essayez ce processus en 3 étapes pour gérer ce problème de configuration automatique.

Premier

Modifiez la configuration de votre interface, qui se trouve dans: /etc/network/interfaces

Ajouter cette ligne ci-dessous iface lo inet loopback:

dns-nameservers yourdns youraltdns

À titre d'exemple pour Google DNS, vous pouvez utiliser ceci:

dns-nameservers 8.8.8.8 8.8.4.4

Seconde

Modifiez votre fichier de configuration DHCP, situé à:

/etc/dhcp/dhclient.conf

Marquez la syntaxe comme un commentaire en utilisant # sur chaque ligne ou simplement supprimer chaque nom-serveur de demande. Au 16.04, vous n'êtes peut-être pas obligé d'apporter des modifications ici.

Troisième

Redémarrez votre réseau en utilisant cette commande:

/etc/init.d/networking restart

En 16.04:

sudo ifdown -a
sudo ifup -a

18
2018-06-20 01:50



/etc/init.d/networking restart n'a pas fonctionné sur ma machine, mais sudo ifdown -a et alors sudo ifup -a fait. - Jason Gross
C'est simple et ça marche même si c'est un peu piraté! Problème avec des choses comme Ubuntu a 1000 façons de faire une chose! - Willa O Ng'wana
Et puis vous pouvez vérifier cela /etc/resolv.conf contient ces 2 nouvelles entrées DNS sur les premières lignes utiles. - ROMANIA_engineer


Regardez s'il vous plaît resolvconfla page de manuel de Vous pouvez forcer l'inclusion de certains paramètres DNS en créant par exemple /etc/resolvconf/resolv.conf.d/base:

  /etc/resolvconf/resolv.conf.d/base
          File containing basic resolver information.  The lines  in  this
          file  are  included in the resolver configuration file even when
          no interfaces are configured.

Il existe d'autres fichiers spéciaux (tête et queue), qui peuvent vous aider à obtenir ce que vous voulez.


7
2017-09-04 14:26



Vous pouvez ajouter des lignes à /etc/resolvconf/resolv.conf.d/base, mais comme chaque serveur de noms est accessible via une interface et n'est accessible que lorsque cette interface est active, il est préférable d'associer les informations du serveur de noms à cette interface. Si l'interface est configurée avec ifup, cela signifie: mettez les informations sur les lignes "dns-search" et "dns-nameservers" dans les strophes de / etc / network / interfaces. Si l'interface est configurée via DHCP, cela signifie: configurer le serveur DHCP pour qu'il fournisse des noms de recherche et des adresses de serveurs de noms aux clients. Etc. Utilisez le fichier "base" uniquement en tant que piratage temporaire ou en dernier recours. - jdthood


Pour moi, les réponses ci-dessus étaient insuffisantes pour les raisons suivantes:

  • Je n'utilise pas resolvconf, tout simplement /etc/resolv.conf.
  • En utilisant chattr +i verrouiller resolv.conf semble trop piraté. J'ai besoin de Puppet pour être libre de faire des changements si nécessaire.
  • AFAIK, édition /etc/network/interfaces n'empêche pas resolv.conf d'être écrasé; il spécifie simplement les serveurs de noms à écrire. Pour moi, spécifier les serveurs de noms n'était pas le point. J'essaye de mettre options timeout:1 et options attempts:1 dans mon resolv.conf fichier.

le meilleure solution J'ai trouvé remplace le comportement par défaut de dhclient en utilisant ses crochets documentés.

Créez un nouveau fichier à /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate avec le contenu suivant:

#!/bin/sh
make_resolv_conf() {
    :
}

Ensuite, rendez le fichier exécutable:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Maintenant, quand dhclient s'exécute - soit au redémarrage ou lorsque vous exécutez manuellement sudo ifdown -a ; sudo ifup -a - il charge ce script nodnsupdate. Ce script remplace une fonction interne appelée make_resolv_conf() qui normalement écraserait resolv.conf et au lieu de cela ne fait rien.

Cela a fonctionné pour moi sur Ubuntu 12.04.


4
2018-03-05 22:12



Fonctionne bien sur Debian 8. Solution élégante! - Artur Bodera
juste pour la complétude: page de manuel script dhclient contient les informations sur le script de configuration réseau du client DHCP mentionné ci-dessus. - hecke
Cela n'a pas fonctionné le 16.04, j'ai aussi ajouté des éléments à /etc/network/interfaces.d, sans effet, ajouté un remplacement vide de make_resolv_conf recommandé ici, aucun effet .... mais n'a pas modifié / etc / dhcp / dhclient.conf - Dois-je vraiment modifier un fichier de configuration statique pour résoudre ce problème? - silverjam


Comme beaucoup d'autres réponses le disent, cela a à voir avec resolvconf être installé dans votre système.

Donc, la meilleure façon de garder quelque chose resolv.conf ce qui ne sera pas perdu lors du redémarrage est de l'inclure dans les fichiers de configuration de resolvconf qui se trouvent dans:

/etc/resolvconf/resolv.conf.d/

Là va pour le head fichier. Tout ce que vous mettez là sera écrit en haut de /etc/resolv.conf

Donc, tout ira à quelque chose comme ça:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u

3
2017-10-17 13:59





Ajoutez votre serveur de noms au fichier /etc/resolvconf/resolv.conf.d/head. Le fichier contient un message que vous avez reçu:

ce fichier devrait ressembler à ceci après avoir ajouté 8.8.8.8

root@hvnatvcc: ~ # cat /etc/resolvconf/resolv.conf.d/head 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8

2
2017-10-23 10:43



Ajouter des lignes à /etc/resolvconf/resolv.conf.d/head est une solution médiocre, pire que d’ajouter des lignes à /etc/resolvconf/resolv.conf.d/base. La solution correcte pour les interfaces configurées à l'aide de ifup consiste à ajouter les lignes "dns-search" et "dns-nameservers" aux strophes dans / etc / network / interfaces. Voir aussi mes commentaires sur les autres réponses. - jdthood
C'est la seule chose qui a fonctionné pour moi ... et il semble difficile de comprendre pourquoi aucune des solutions "correctes" ne fonctionne. - silverjam


Cela peut être une bizarrerie bizarre dans ma machine, mais quelqu'un d'autre pourrait avoir le même casier.

J'ai essayé de nombreuses façons d'obtenir mes serveurs de noms ISP inclus dans /etc/resolv.conf sans succès:

  • Je les ai inclus dans /etc/network/interfaces et redémarré le réseau. Ils ne sont pas apparus dans /etc/resolv.conf.

  • Je les mets /etc/resolv.conf explicitement, mais bien sûr ils ont été écrasés. Ils sont apparus dans /run/resolvconf/interface/eth0.inet, mais n'a jamais réussi à /etc/resolv.conf.

  • J'ai essayé de configurer resolvconf pour les mises à jour dynamiques. Pas de changement.

Enfin, je lis quelque part que si la machine locale (127.0.0.1) apparaît dans /etc/resolv.conf tous les autres serveurs de noms ne sont pas inclus.

En désespoir de cause, j'ai édité /run/resolvconf/interface/lo.named, a supprimé la seule ligne qui s'y trouve (nameserver 127.0.0.1) et redémarré: ifdown eth0 && ifup eth0.

/etc/resolv.conf a ensuite inclus mes serveurs de noms ISP pour la première fois! Iran service network-manager restart pour voir si elle était stable et /etc/resolv.conf comprend toujours mes serveurs de noms ISP. Redémarré juste pour être sûr et il est toujours là mais  /run/resolvconf/interface/lo.named a été réinitialisé à: nameserver 127.0.0.1.

Curieusement, le redémarrage du réseau fonctionne toujours: /etc/resolv.conf contient toujours mes serveurs de noms ISP. Je ne peux pas l'expliquer (quelqu'un peut-il le faire?) Mais cela pourrait aider quelqu'un à rester coincé au même endroit.


2
2018-06-26 05:18



Ceci est probablement dû à dnsmasq. Vous pouvez simplement le supprimer en utilisant apt-get remove dnsmasq ou mettre à jour la configuration /etc/dnsmasq.conf. - Tombart