193 votes

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

J'ai enfin migré vers 12.04 à partir de 7.10. Il me reste une dernière partie à compléter mais je suis bloqué. J'utilise Puppet sur chaque serveur, et dans le passé j'ai inclus une adresse de serveur de noms et un nom de domaine de recherche pour le puppetmaster dans resolv.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

Dans 12.04, resolv.conf est écrasé au redémarrage. Je ne peux pas utiliser une IP statique pour ceux-ci, donc utiliser le fichier /etc/network/interfaces pour m'aider est inutile.

# Fichier resolv.conf(5) dynamique pour le résolveur glibc(3) généré par resolvconf(8)
#     NE MODIFIEZ PAS CE FICHIER MANUELLEMENT - VOS MODIFICATIONS SERONT ECRASEES
nameserver 127.0.0.1

Y a-t-il un moyen de faire en sorte que resolvconf gère ceci soit dans l'en-tête, la queue ou à la base? Si oui, y a-t-il des exemples que je peux utiliser pour ajuster sur mon serveur.

Toute aide est grandement appréciée.

6voto

kvizii Points 257

Pour moi, les réponses ci-dessus étaient incomplètes pour les raisons suivantes :

  • Je n'utilise pas resolvconf, juste /etc/resolv.conf.
  • Utiliser chattr +i pour verrouiller resolv.conf semble trop bidouille. J'ai besoin que Puppet soit libre de faire des changements quand nécessaire.
  • À ma connaissance, éditer /etc/network/interfaces n'empêche pas resolv.conf d'être écrasé ; il spécifie simplement les serveurs de noms qui doivent être écrits. Pour moi, spécifier les serveurs de noms n'était pas le but. J'essaie de définir options timeout:1 et options attempts:1 dans mon fichier resolv.conf.

La meilleure solution que j'ai trouvée 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, lorsque dhclient s'exécute - que ce soit au dé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 écrirait normalement sur resolv.conf et ne fait rien à la place.

Cela a fonctionné pour moi sur Ubuntu 12.04.

3voto

gorlux Points 131

Cela peut être juste une bizarrerie sur ma machine, mais quelqu'un d'autre pourrait avoir le même cas particulier.

J'ai essayé de nombreuses façons d'inclure les serveurs de noms de mon fournisseur d'accès à Internet dans /etc/resolv.conf sans succès:

  • Je les ai inclus dans /etc/network/interfaces et redémarré le réseau. Ils n'apparaissaient pas dans /etc/resolv.conf.

  • Je les ai mis explicitement dans /etc/resolv.conf, mais bien sûr ils ont été écrasés. Ils apparaissaient dans /run/resolvconf/interface/eth0.inet, mais n'ont jamais été ajoutés dans /etc/resolv.conf.

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

Finalement, j'ai lu quelque part que si la machine locale (127.0.0.1) apparaît dans /etc/resolv.conf, les autres serveurs de noms ne sont pas inclus.

Dans un acte de désespoir, j'ai modifié /run/resolvconf/interface/lo.named, supprimé la seule ligne présente (nameserver 127.0.0.1) et redémarré: ifdown eth0 && ifup eth0.

Alors /etc/resolv.conf incluait les serveurs de noms de mon fournisseur d'accès Internet pour la première fois! J'ai exécuté service network-manager restart pour voir si c'était stable et /etc/resolv.conf contient toujours mes serveurs de noms de mon FAI. J'ai redémarré juste pour être sûr et c'est toujours là mais /run/resolvconf/interface/lo.named a été réinitialisé à: nameserver 127.0.0.1.

Curieusement, redémarrer le réseau fonctionne toujours: /etc/resolv.conf contient toujours mes serveurs de noms de mon FAI. Je ne peux pas expliquer cela (est-ce que quelqu'un peut?) mais cela pourrait aider quelqu'un coincé dans la même situation.

2voto

HVNSweeting Points 320

Ajoutez votre serveur de noms au fichier /etc/resolvconf/resolv.conf.d/head. Le fichier contient le 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 
# Fichier resolv.conf(5) dynamique pour le résolveur glibc(3) généré par resolvconf(8)
#     NE PAS MODIFIER CE FICHIER MANUELLEMENT -- VOS MODIFICATIONS SERONT ÉCRASÉES
nameserver 8.8.8.8

2voto

tanmay.01 Points 353

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 fait en sorte 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 d'informations

man chattr

2voto

siz Points 121

Ajoutez 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 exécutez la commande suivante

sudo resolvconf -u

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X