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


174

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

search puppetmaster.com
nameserver 192.168.1.XXX

Dans 12.04, resolv.conf est écrasé lors du redémarrage. Je ne peux pas utiliser d'adresse IP statique pour ceux-ci, utiliser le / etc / network / interfaces pour m'aider est donc un point vide.

# 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

Existe-t-il un moyen de résoudre le problème resolvconf dans la tête, la queue ou la base? Si c'est le cas, y a-t-il des exemples que je peux utiliser pour peaufiner mon serveur?

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


2
resolvconf est un mauvais logiciel, supprimez-le simplement et gérez le fichier /etc/resolv.conf à l'ancienne.
homme de bronze

Réponses:


134

Il est probablement préférable que votre serveur DNS puisse résoudre le problème "marionnette" à la bonne adresse, et que votre serveur DHCP distribue l'adresse du serveur de noms DNS et la liste de recherche ou, si vous avez des adresses IP statiques, quelque chose comme: 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 le modifier /etc/resolvconf/resolv.conf.d/base. Dans ce fichier, entrez 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

13
Bien que cette réponse comporte des votes et que la première partie soit plus ou moins correcte, la deuxième partie est incorrecte. (1) Ne mettez pas de ligne "search" dans /etc/resolvconf/resolv.conf.d/head. Si vous placez une ligne "search" à cet endroit, cette ligne sera ignorée si resolvconf inclut une ligne "search" dans la partie dynamique du fichier resolv.conf. Le résolveur glibc ignore toute la ligne "recherche" ou "domaine" sauf la dernière. Voir resolv.conf (5). (2) Si la configuration de resolvconf est modifiée, vous ne devez pas redémarrer le travail de resolvconf mais simplement exécuter une mise à jour, "resolvconf -u".
Jdthood

1
J'ai enlevé la ligne. L'autre option serait d'utiliser la queue au lieu de la tête.
tgm4883

6
@tishma: Salut. Premièrement, pour éviter tout malentendu: rien n’écrit dans les fichiers de base, tête ou queue. Rien n'écrit dans les fichiers de /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’elle écrit --- /run/resolvconf/resolv.conf --- vers lequel le lien symbolique /etc/resolv.conf pointe. Deuxièmement, ce qu'il faut faire après les options dns- * dans / etc / network / interfaces est modifié. Ne lancez pas "/etc/init.d/networking restart"; qui est maintenant obsolète. Au lieu de cela ifdown l'interface en question et ifup il encore.
Jdthood

4
En 14.04, cette réponse ne m'a rien apporté.
Jay Sullivan

2
Si tout le reste échoue .. $ sudo resolveconf -u ne semble pas changer les choses pour moi, redémarre la machine, hop.
MSpreij

35

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

Puis mettez à jour votre /etc/network/interfaces

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

Ensuite, votre système resolv.confsera configuré automatiquement comme vous le souhaitez.

Ajoutez-le à dns-searchpuis exécutez a /etc/init.d/networking restart (même si ce script est déconseillé, il fonctionne toujours).


5
dhclient règne sur tous les paramètres de resolvconf, ce qui devrait être la meilleure réponse.
Alex R

6
/etc/init.d/networking restartne fonctionnait pas sur ma machine, mais sudo ifdown -aensuite sudo ifup -a. (En outre, il m'a fallu un peu de temps pour réaliser que je devais remplacer dnsserverippar quelque chose comme 8.8.8.8: je me sens un peu stupide.)
Jason Gross

essayersystemctl restart networking.service
Pavel Sayekat

20

Ceci 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.

Première

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

Ajoutez cette ligne ci iface lo inet loopback- dessous :

dns-nameservers yourdns youraltdns

Comme exemple pour Google DNS, vous pouvez utiliser ceci:

dns-nameservers 8.8.8.8 8.8.4.4

Seconde

Editez votre fichier de configuration DHCP, situé à l’adresse:

/etc/dhcp/dhclient.conf

Marquez la syntaxe comme un commentaire à l'aide #de chaque ligne ou supprimez simplement chaque serveur de nom de requête. En 16.04, vous ne serez peut-être pas obligé de faire des changements 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

3
/etc/init.d/networking restartne fonctionnait pas sur ma machine, mais sudo ifdown -aensuite sudo ifup -a.
Jason Gross

C'est simple et ça marche même si c'est un peu hacky! Le problème avec des choses comme Ubuntu, c'est d'avoir 1000 façons de faire une chose!
Willa O Ng'wana

Et ensuite, vous pouvez vérifier que /etc/resolv.conf contient ces 2 nouvelles entrées DNS sur les premières lignes utiles.
ROMANIA_engineer

8

Veuillez consulter 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), ils peuvent vous aider à atteindre vos objectifs.


4
Vous pouvez ajouter des lignes à /etc/resolvconf/resolv.conf.d/base, mais comme chaque serveur de noms est accessible via une interface et uniquement lorsque cette interface est opérationnelle, 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: placez les informations sur les lignes "dns-search" et "dns-nameservers" dans les strophes / etc / network / interfaces. Si l'interface est configurée via DHCP, cela signifie: configurez le serveur DHCP pour qu'il fournisse aux clients les noms de recherche et les adresses de serveur de noms. Etc. Utilisez le fichier "base" uniquement comme piratage temporaire ou en dernier recours.
Jdthood

Oui. J'ai ajouté "nameserver 1.2.3.4" dans /etc/resolvconf/resolv.conf.d/base
Bastion

8

Comme de nombreuses autres réponses l'indiquent, il s'agit d' resolvconfune installation sur votre système.

Donc, le meilleur moyen de garder quelque chose resolv.confqui ne sera pas perdu au redémarrage est de l'inclure dans les fichiers de configuration de resolvconf qui se trouvent dans:

/etc/resolvconf/resolv.conf.d/

Allez-y pour le headfichier. Tout ce que vous y mettez 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

C'est la bonne réponse! Finalement!
user77232

6

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

  • Je ne l'utilise pas resolvconf, tout simplement /etc/resolv.conf.
  • Utiliser chattr +ipour verrouiller resolv.confsemble trop hacky. J'ai besoin que Puppet soit libre de faire les changements nécessaires.
  • Autant que je sache, l'édition /etc/network/interfacesn'empêche pas resolv.confd'être écrasée; il spécifie simplement les serveurs de noms qui doivent être écrits. Pour moi, spécifier les serveurs de noms n'était pas la question. J'essaie de définir options timeout:1et options attempts:1dans mon resolv.confdossier.

La meilleure solution que j'ai trouvée remplace le comportement par défaut consistant à dhclientutiliser ses points d'ancrage documentés.

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

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

Ensuite, rendez le fichier exécutable:

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

Désormais, lorsque dhclient est exécuté - soit au redémarrage, soit manuellement sudo ifdown -a ; sudo ifup -a, il charge ce script nodnsupdate. Ce script remplace une fonction interne appelée make_resolv_conf()qui écraserait normalement resolv.confet ne fait rien à la place.

Cela a fonctionné pour moi sur Ubuntu 12.04.


1
Fonctionne bien sur Debian 8. Solution élégante!
Artur Bodera

1
juste pour compléter: manpage dhclient-script contient les informations sur le script de configuration réseau du client DHCP mentionné dans la réponse ci-dessus.
mardi

Cela ne marchait pas sur 16.04, j’ai ajouté des choses à /etc/network/interfaces.d aussi, sans effet, j’ai ajouté une substitution vide de make_resolv_conf recommandée ici, sans effet .... mais je n’ai pas modifié / etc / dhcp / dhclient.conf - dois-je vraiment modifier un fichier de configuration statique pour résoudre ce problème?
silverjam

3

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

J'ai essayé de nombreuses manières d'inclure mes serveurs de noms ISP dans /etc/resolv.conf sans succès:

  • Je les ai inclus et ai /etc/network/interfacesredémarré la mise en réseau. Ils ne montrent pas dans /etc/resolv.conf.

  • Je les ai mis /etc/resolv.confexplicitement, mais bien sûr ils ont été écrasés. Ils se sont présentés /run/resolvconf/interface/eth0.inet, mais ne l'ont jamais fait /etc/resolv.conf.

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

Enfin, j'ai lu quelque part que si la machine locale (127.0.0.1) apparaît dans /etc/resolv.confun autre serveur de noms, elle n'est pas incluse.

En désespoir de cause , j'édité /run/resolvconf/interface/lo.named, supprimé la seule ligne en elle ( nameserver 127.0.0.1) et remis en marche: ifdown eth0 && ifup eth0.

/etc/resolv.conf a ensuite inclus mes serveurs de noms ISP pour la première fois! J'ai couru service network-manager restartpour voir si elle était stable et /etc/resolv.confinclut toujours mes serveurs de noms ISP. Redémarrés juste pour se assurer et il est toujours là , mais /run/resolvconf/interface/lo.named se est remis à: nameserver 127.0.0.1.

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


Ceci est probablement causé par dnsmasq. Vous pouvez simplement le supprimer en utilisant apt-get remove dnsmasqou mettre à jour la configuration dans /etc/dnsmasq.conf.
Tombart

2

Ajoutez votre serveur de noms dans le 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

3
Ajouter des lignes à /etc/resolvconf/resolv.conf.d/head est une mauvaise solution, voire pire que l’ajout de lignes à /etc/resolvconf/resolv.conf.d/base. La solution correcte pour les interfaces configurées avec ifup consiste à ajouter des lignes "dns-search" et "dns-nameservers" aux strophes de / etc / network / interfaces. Voir aussi mes commentaires sur les autres réponses.
Jdthood

3
C'est la seule chose qui a réellement fonctionné pour moi ... et il semble difficile de comprendre pourquoi aucune des solutions "correctes" ne fonctionne.
silverjam

1

ajouter sur la dernière ligne, par exemple:

nameserver 8.8.8.8

Ouvrez un terminal et tapez

sudo chattr +i /etc/resolv.conf

le + i veille à ce que le fichier ne soit pas réinitialisé au démarrage.

Pour annuler ce qui précède

sudo chattr -i /etc/resolv.conf

Pour plus

man chattr

1

Les autres solutions ne fonctionnaient pas pour moi sur mon système Fedora 20. Mon problème particulier était que la ligne "search" dans /etc/resolv.conf était en train d'être écrasée. Voici ce qui l'a corrigé. (Cela suppose que NetworkManager génère la ligne search rn.yourcompany.com et que vous souhaitiez l’être search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1.Utilisez la commande "ifconfig" pour trouver quelle interface est intéressante:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2.Devenez root et accédez au répertoire des périphériques réseau de configuration système:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. Utilisez votre éditeur disponible favori pour ajouter une Domainligne avec les domaines supplémentaires à rechercher:

DOMAIN="yourcompany.com intnet.yourcompany.com"

Enregistrez, déconnectez-vous et reconnectez-vous. NetworkManager devrait maintenant avoir la ligne suivante \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com

3
Il ne faut pas pleuvoir sur votre défilé, mais demandez à Ubuntu et Fedora est hors sujet.
Flimm

1

Ajouter des entrées dans /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

et lancez la commande suivante

sudo resolvconf -u

1

Pour Ubuntu Server 18, Netplan est le nouvel utilitaire de configuration de la mise en réseau.

# cd /etc/netplan

Puis modifiez la saisie des adresses de serveurs de noms dans le fichier yaml (utilisez le retrait correct). Par exemple, si vous utilisez les serveurs DNS de Google:

nameservers:
    addresses: [8.8.8.8,8.8.4.4]

Pour redémarrer le service

# netplan apply

Voir https://netplan.io/

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/


0

Si vous utilisez DHCP, éditez /etc/dhcp/dhclient.confpour ajouter des serveurs DNS supplémentaires:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

Le client DHCP écrase l' dns-nameserversin etc/network/interfaceset je pense /etc/resolvconf/resolv.conf.d/baseaussi.

Cela a fonctionné pour moi sur le serveur Ubuntu 14.04.3.

Consultez le wiki de Debian NetworkConfiguration pour plus de détails.


0

Il vous suffit de sauvegarder votre resol.conf et de supprimer le fichier resolvconf, puis de modifier le fichier /etc/resolv.conf selon vos besoins.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Nous devrions avoir le droit de choisir de ne pas utiliser de mauvais logiciel comme resolvconf.

À propos, le champ de recherche dans /etc/resolv.conf est inutile.


0

Utiliser resolvconfet désactiver systemd-resolved.service(cela fonctionne pour moi Ubuntu 19.04):

  1. Installer resolvconf

    sudo apt install resolvconf
    
  2. Ajout de serveurs de noms

    Ouvrez /etc/resolvconf/resolv.conf.d/baseavec votre éditeur de texte, je l'utilise vim.

    sudo vim /etc/resolvconf/resolv.conf.d/base
    

    Ajoutez ensuite les serveurs de noms dans le fichier ouvert, par exemple:

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. Mise à jour resolv.conf

    sudo resolvconf -u
    
  4. Désactiver systemd-resolved.serviceet redémarrer. nameserver 127.0.0.53n'est pas écrit à /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

Terminé!

La source


Pourriez-vous préciser pour quelle version d'Ubuntu vous l'avez fait? La question initiale fait référence à ubuntu 12.04, depuis longtemps obsolète.
Marc Vanhoomissen le

0

J'ai trouvé cela le correctif le plus simple. Si vous avez resolv.confet resolvconffichiers, ils vont marcher les uns sur les autres. Vous devez enlever leresolv.conf fichier qui est récupéré et le réécrire à chaque redémarrage.

Placez le nameserver 1.1.1.1 1.0.0.1en bas du fichier resolvconf puis exécutez

sudo rm /etc/resolv.conf

Pour se débarrasser du fichier. Ensuite, redémarrez et tout fonctionnera.


0

Solution mi le 12.04:

J'ai remarqué que si vous ajoutez le serveur de noms DNS aux interfaces qui ne prennent pas les serveurs de résolution de noms

Page de manuel de resolvconf

Pour que resolv.conf ne change pas lorsque nous modifions manuellement, faisons ceci dans le terminal:

sudo resolvconf –disable-updates

après:

sudo resolvconf -a eth0 # or your network interface

puis éditez manuellement en /run/resolvconf/resolv.confajoutant un maximum de deux serveurs DNS.

Puis redémarrez le service:

sudo /etc/init.d/networking restart

4
Ce n'est vraiment pas la bonne façon de résoudre le problème.
Jdthood

1
@ jdthood en tant que personne parcourant ceci pouvez-vous élaborer POURQUOI ceci n'est pas la bonne façon? Cela me semble logique, mais je ne sais rien à ce sujet.
ErikPerik

-1

Il suffit de mettre un

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

commande sur votre /etc/network/interfacesconfiguration. puis redémarrez votre réseau.

ça devrait marcher.


-2

Cette configuration est déclarée dans /etc/default/bind9

RESOLVCONF=no|yes

non = ne pas appliquer la condition dans leinit.d bind9

oui , ou autre valeur = overrideresolv.conf

Ce problème survient lorsque vous installez bind9et ne vous souciez pas de vérifier toutes les confs.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.