J'ai deux interfaces réseau configurées via DHCP. En conséquence, /etc/resolv.conf
est rempli avec les informations provenant du serveur DHCP.
Comment puis-je éditer ce fichier?
Je sais que si j'ajoute prepend domain-name-servers 127.0.0.1
à /etc/dhcp/dhclient.conf
, je peux obtenir nameserver 127.0.0.1
en tant que première (et unique) ligne de /etc/resolv.conf
.
Que faire si je veux 127.0.0.1 et une seule des deux adresses de serveur de noms fournie via DHCP?
Dans Ubuntu 12.04 et versions ultérieures, /etc/resolv.conf
est généré de manière dynamique par l'utilitaire resolvconf. (En fait, resolvconf génère /run/resolvconf/resolv.conf
et /etc/resolv.conf
est un lien symbolique vers celui-ci. C'est la configuration par défaut; il est également possible de s'exécuter avec un fichier statique à /etc/resolv.conf
, mais il s'agit d'un fichier non standard.) Informations sur le serveur de noms (adresses de serveurs de noms et noms de domaines de recherche) est enregistré avec resolvconf par les configurateurs d’interface (ifup
, NetworkManager
, dhclient
, etc.). Resolvconf génère un fichier à jour resolv.conf
sur la base des éléments enregistrés.
Par conséquent, vous ne pouvez pas modifier le fichier resolv.conf
directement. Si vous souhaitez contrôler ce qui se termine dans resolv.conf
, vous devrez configurer l'utilitaire resolvconf. Veuillez consulter la documentation de resolvconf pour plus d'informations.
La réponse à la question spécifique "Que faire si je veux 127.0.0.1 et une seule des deux adresses de serveur de noms fournie via DHCP?" est:
prepend domain-name-servers 127.0.0.1
à /etc/dhcp/dhclient.conf
. Le protocole correct consiste pour les serveurs de noms locaux à enregistrer leurs adresses d'écoute locales auprès de resolvconf lorsqu'ils sont prêts à fournir un service de noms locaux; lorsqu'ils le font, les clients DHCP n'ont pas besoin de le faire. Dnsmasq fait le bon choix par défaut. Dans le cas de BIND 9, vous devez définir RESOLVCONF=yes
dans /etc/default/bind9
pour lui permettre d’enregistrer l’adresse 127.0.0.1
avec resolvconf.127.0.0.1
. Pour désactiver ce comportement, créez un fichier /etc/default/resolvconf
contenant la ligne TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no
.Troisièmement, resolvconf par défaut tronque la liste des serveurs de noms après trois éléments. Il est inutile d'inclure plus d'adresses, car le résolveur glibc ignore les adresses après les trois premières. Pour que resolvconf tronque la liste après deux adresses, vous devez éditer le script /etc/resolvconf/update.d/libc
pour remplacer cette ligne.
[ "$N" = 3 ] && return 0
par la suivante.
[ "$N" = 2 ] && return 0
Cela a fonctionné pour mon grand-père, cela a fonctionné pour mon père et cela a fonctionné pour moi.
rm /etc/resolv.conf
vi /etc/resolv.conf
search yourdomain.com
nameserver 8.8.8.8
nameserver 8.8.4.4
EDIT:
rm
supprime le lien symbolique standard.
vi
crée un fichier réel à sa place.
Lorsque j’ai installé 12.04, ce texte m’a beaucoup aidé: http://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/
Pour mémoire, la documentation officielle de resolvconf est ici http://anonscm.debian.org/gitweb/?p=resolvconf/resolvconf.git;a=blob;f=README;hb=HEAD
"Éditer" est aussi simple que d'utiliser la ligne de commande resolvconf comme une API.
par exemple.
echo nameserver 8.8.8.8 | resolvconf -a eth0.goog
Ici le . est un séparateur et la partie après l'interface est le nom de la configuration pour cette interface.
Et si vous souhaitez supprimer ce serveur de noms, nommez simplement l'interface et la configuration et utilisez -d pour le supprimer.
resolvconf -d eth0.goog
Dans un scénario serveur/cloud, c'est tout ce dont vous avez besoin. Pour les mobiles, vous voudrez vous référer à la documentation.