Comment ajouter un serveur DNS via resolv.conf?

207

Est /etc/resolv.confinutile dans Ubuntu 12.04 LTS (Precise Pangolin)?

Je vois que les informations du serveur DNS sont maintenant stockées dans NetworkManager . L' nmclioutil de ligne de commande peut répertorier cela pour vous.

Si je veux ajouter un serveur DNS supplémentaire , l'ajoutera-t-il à l' /etc/resolv.confaide de l'aide du resolvconfpackage?

PnotNP
la source
2
Je pense que la commande mentionnée ci-dessus devrait être nm-tool, pas nmcli.
Jesse Glick

Réponses:

139

Si /etc/resolv.confcontient, nameserver 127.0.0.1ajouter des entrées /etc/resolvconf/resolv.conf.d/tailne fera vraiment rien d'utile.

Si vous utilisez NetworkManager, vous devez plutôt ajouter de manière statique les adresses de serveurs de noms via l' indicateur de réseau : Edit Connections ... | Modifier ... | Paramètres IPv4 | Serveurs DNS supplémentaires .

Si vous voulez vraiment ajouter d'autres entrées à /etc/resolv.conf, créez-en /etc/resolvconf/resolv.conf.d/tailet ajoutez-les là.

Comme avec chaque version d'Ubuntu, il est recommandé de lire les Notes de publication d'Ubuntu, disponibles ici:

Les sections Desktop et Common Infrastructure contiennent un lien vers

stgraber
la source
1
@stgraber, veuillez commenter l'approche alternative que j'ai trouvée et postée ci-dessous. Comment se compare-t-il avec l'ajout d'un /etc/resolvconf/resolv.conf.d/tailfichier ou l'utilisation de Network Manager? Merci.
Randall Cook
3
@stgraber Que recommandez-vous pour Ubuntu Server? J'ai remarqué dans votre blog et dans mes commentaires que Network-Manger semble être le meilleur moyen de gérer cela, mais installer le gestionnaire de réseau sur mon système installerait tout un tas de choses dont je n'ai pas besoin (par exemple, des éléments d'interface graphique ).
Avery Chan
1
Pourquoi ne pas ajouter des entrées dans /etc/resolvconf/resolv.conf.d/head (conformément à votre article de blog)?
Sup
3
@AveryChan, utilisez la "troisième approche" proposée par @ randallcook - ajoutez simplement dns-nameserversvotre section eth0 dans /etc/network/interfaces.
mrm
1
/etc/resolvconf/update.d/libcsur le serveur Ubuntu 14.04.1: # Set TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no # to allow additional nameserver addresses to be listed in # resolv.conf after an initial loopback address 127.* or ::1. (le définir /etc/default/resolvconf, en tant que lignes 23 et 24 du /etc/resolvconf/update.d/libcspectacle.
immeëmosol
134

J'ai trouvé une autre approche ici qui consiste à ajouter une ligne comme celle ci-dessous pour /etc/dhcp/dhclient.conf:

prepend domain-name-servers x.x.x.x, y.y.y.y;

De même, j'ai trouvé une troisième approche ici qui consiste à ajouter des lignes à /etc/network/interfaces:

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

Mise à jour: Voici la documentation officielle de la troisième approche.

Randall Cook
la source
18
J'ai voté pour cela parce que third approachc'est de loin le moyen le plus simple de le faire.
Billy Moon
1
@billy Je ne pouvais pas faire fonctionner la troisième méthode du tout. Seul le premier répertorié ici, éditer le fichier dclient.conf, a fonctionné pour moi.
Jeff Atwood
9
Remarque: La modification de dhclient.conf n'a d'effet que si dhclient est utilisé (et il est utilisé à la fois par ifup et NetworkManager!) La modification de / etc / network / interfaces n'a d'effet que si ifup est utilisé. La configuration des connexions NetworkManager à l'aide de l'éditeur de connexion NetworkManager n'a d'effet que si NetworkManager est utilisé.
Jdthood
1
Si je ne me trompe pas, la troisième approche ajoute un autre serveur de noms APRÈS ceux renvoyés par DHCP. Si vous voulez que cela vienne en premier, une des autres options est plus appropriée. J'ai utilisé /etc/resolvconf/resolv.conf.d/head(après avoir surmonté le commentaire trompeur "NE PAS MODIFIER" :))
starfry
1
@ Mr.Hyde, ce ne sont pas des commandes en ligne de commande, ce sont des lignes à ajouter à / etc / network / interfaces.
Randall Cook
91

On dirait que vous parlez du paquet resolvconf.

Installez le package resolvconf .

Courir

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head

Le haut du fichier est un avertissement effrayant. Le fichier /etc/resolv.conf est généré automatiquement à partir du contenu de ce fichier; l'avertissement est là pour qu'il soit placé dans /etc/resolv.conf lorsque /etc/resolv.conf est généré. A la fin du fichier, ajoutez

nameserver <ip_of_nameserver>

Appuyez sur Ctrl xet répondez oui à l'enregistrement du fichier. Pour finir, régénérez /etc/resolv.conf pour que les modifications soient appliquées maintenant:

sudo resolvconf -u

Vérifiez ensuite le contenu de /etc/resolv.conf pour voir si la ligne que vous avez ajoutée est maintenant là. En outre, il sera toujours présent au prochain démarrage de votre machine ou de votre service réseau, selon la première éventualité.

Azendale
la source
Les informations sur l'avertissement de fichier sont exactement ce dont j'avais besoin. J'avais l'impression de ne pas éditer le fichier! Merci!
Xunnamius
C'est la meilleure réponse pour moi!
Siwei Shen 申思维
31

Ci-dessous, je vais vous montrer le meilleur moyen que j'ai trouvé depuis que je lance Ubuntu Server Edition et utilise ifup plutôt que NetworkManager.

En fait, pour moi, ils ont rendu cela plus facile :) en mettant tout cela dans le fichier / etc / network / interfaces. Les mêmes configurations que celles que vous auriez écrites dans resolv.conf peuvent désormais figurer dans le même fichier que les configurations de votre carte réseau, comme dans l'exemple ci-dessous:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 75.75.75.75 75.75.76.76
        dns-search local

J'espère que cela aide et facilite les choses, comme nous le faisons maintenant. Nous pouvons maintenant créer des adresses IP statiques et ajouter des serveurs de noms et des domaines DNS dans un seul fichier :)

Joseph Mituzas
la source
1
Je vous remercie. Cela est également devenu ma méthode préférée. Remarque hors sujet: il n'est pas nécessaire de spécifier les adresses "réseau" et "diffusion", car elles sont automatiquement calculées à partir de "l'adresse" et du "masque de réseau". Tout ce dont vous avez besoin est "adresse", "masque de réseau" et "passerelle".
Martijn Heemels le
C'est la réponse la plus propre. Assurez-vous d’épeler correctement les mots-clés dns- *. Mon "véritable serveur DNS" était mal orthographié.
John McGehee
18

Le mien utilise Ubuntu Server 12.04. J'ai apporté les modifications suivantes et redémarré le serveur (généralement, cela ne peut se faire qu'en supprimant l'interface réseau, c'est-à-dire ifdown eth0ou ifup eth0).

Dans le fichier, /etc/resolvconf/resolv.conf.d/basej'ai ajouté les entrées suivantes:

nameserver 8.8.8.8
nameserver 8.8.4.4

J'espère que ce qui précède aide!

Don Chai
la source
12

Vous pouvez utiliser NetworkManager comme indiqué dans la réponse de Frank, mais si vous préférez le modifier manuellement /etc/resolv.conf, vous pouvez le supprimer (c'est en fait un lien symbolique), puis créer un nouveau fichier brut avec le contenu souhaité. L' resolvconfutilitaire écrit uniquement dans le fichier /run/resolvconf/resolv.conf.

Jase
la source
9

Remarque: cette réponse s’appliquait à une version de la question antérieure à la fusion, qui était assez différente, l’accent étant mis uniquement sur l’attente d’un serveur de noms souhaité.

Cela fonctionne avant 12.04:

Modifier /etc/dhcp3/dhclient.confet ajouter:
prepend domain-name-servers 127.0.0.1;

(En fait, cette ligne est déjà présente; tout ce que vous avez à faire est de la commenter.)

Belacqua
la source
Cela fonctionne-t-il si aucune adresse n'est attribuée par DHCP?
Azendale
Si vous souhaitez en savoir plus sur la configuration de dhclient, vous pouvez man dhclient.confaccéder à la page de manuel dhclient. (Ce n'est pas une réponse à la question de Azendale.)
Christian Skjødt
Cette réponse est complètement fausse. Tout d'abord, l'auteur de la question souhaite ajouter l'adresse d'un serveur de serveur externe, pas l'adresse 127.0.0.1. La configuration d'interface pour une interface externe n'est pas l'endroit pour ajouter une adresse pour un serveur de noms interne. Deuxièmement, le fichier se trouve dans / etc / dhcp, pas dans / etc / dhcp3. Troisièmement, depuis Ubuntu 12.04, de telles choses sont configurées à l’aide de resolvconf.
Jdthood
1
Tout d’abord, la question initiale a été radicalement modifiée par la fusion du modérateur, ma réponse a donc l’air étrange. Le fichier dhcp3 était l'emplacement où j'ai répondu à cette question en 2011 , et même si ce n'est pas idéal, cela a fonctionné. J'ai utilisé cette solution sur plusieurs machines. Évidemment, vous changeriez l'adresse de bouclage en celle que vous souhaitez ajouter au début. Je suppose que la plupart des gens savent ce qu'est un bouclage, même s'ils n'ont pas lu le RFC6890.
belacqua
@jdthood Pourquoi ne pas ajouter votre propre réponse? Personnellement, je ne connaissais pas la manière de faire les choses bsd-ish resolvconf. J'ai préféré l'approche directe /etc/resolv.conf et je ne suis pas sûr de l'avantage du nouveau système Rube Goldberg. (De même avec / etc / motd).
Belacqua
7

resolvconfest inutile. Je suis sur un serveur Linux et mon adresse IP est statique et mes serveurs DNS sont statiques. Je ne ai pas besoin resolvconfou NetworkManager .

Ma politique est de garder les choses simples lorsque je travaille sur un serveur. Moins il y a de complexité, plus il sera facile de gérer / corriger les problèmes.

Donc, je l'ai fait aptitude purge resolvconfet manuellement, en m'assurant que ce /etc/resolv.confn'est pas un lien symbolique, et je viens de créer un fichier statique. Juste au cas où un programme essaie de modifier le fichier, je l’ai fait chattr +i(immuable) par /etc/resolv.confmesure de précaution.

marque
la source
4
Comme resolvconf fait partie du système de base, en le supprimant, vous posez des problèmes à l'avenir, au moment de la mise à niveau.
jeudi
3
Je suis d’accord avec le commentaire et la réponse: déterminez le nombre de problèmes que cela a causés, le nombre d’heures de support consacré à la résolution de ce "problème" et le nombre d’informaticiens qui ont passé du temps à chercher des réponses. La simplicité est ce qu'il y a de mieux - je n'ai pas besoin que mes serveurs changent le DNS pour quelque chose que je ne veux pas.
Mei
6

La plupart de ce qui précède suppose que vous avez un système vierge, mais la réalité est souvent telle que vous avez déjà installé différents clients DHCP, désactivé le gestionnaire de réseau dans certaines versions précédentes d'Ubuntu, etc. Il peut être intéressant de connaître les éléments suivants. J'utilise Dnsmasq depuis un moment, mais je l'ai désinstallé. Actuellement, mon système avait le contenu suivant de /etc/resolv.conf(qui est un lien symbolique /run/resolvconf/resolv.confsur mon système):

cat /etc/resolv.conf
# 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

Peu importe la fréquence d'exécution sudo resolvconf -uou de non exécution sudo dpkg-reconfigure resolvconf, le serveur de noms n'a pas été mis à jour avec ceux que j'ai définis dans NetworkManager. Les informations que résolvconf utilise depuis le NetworkManager étaient présentes:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8

Cependant, il se peut que, s'il y a plusieurs fichiers dans ce répertoire, ce fichier ne soit pas utilisé du tout. Le coupable était un fichier non supprimé avec la désinstallation de Dnsmasq:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1

Le simple fait de supprimer ce fichier (et d’exécuter sudo resolvconf -uultérieurement) a résolu mes problèmes de DNS:

cat /etc/resolv.conf                        
# 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.4.4
nameserver 8.8.8.8 

J'espère que cela aidera également les autres avec le débogage (les interactions complexes entre tous ces différents outils de réseau). Si vous utilisez resolvconfassurez-vous de courir ls /run/resolvconf/interfacespour voir ce qui est là.

Anne van Rossum
la source
1
Merci, cela m'a beaucoup aidé. J'ai d'abord essayé les réponses avec le plus grand nombre de voix et personne ne semblait faire l'affaire. Je n'ai pas eu de fichiers supplémentaires dans le répertoire /run/resolvconf/interface/, mais mon NetworkManagerfichier avait besoin d'un peu d'amour. Votre réponse m'a aidé à résoudre ce problème.
mason81
4

Je viens de supprimer un lien /etc/resolv.confet de créer un fichier régulier avec les adresses des serveurs de noms. Cela fonctionne et je ne vois aucune raison d'utiliser cette construction plutôt étrange créée par les développeurs Ubuntu.

Ivan
la source
1
Oui, je ne suis pas fan de ce genre de changement qui affecte les serveurs, ajoute de la complexité et de l'opacité. Ce comportement fondamental ne devrait pas changer d’une version à l’autre.
Belacqua
Cette réponse a 5 ans, et IMHO est toujours le meilleur de tous ceux énumérés. C'est simple, rapide et efficace. Y a-t-il des inconvénients?
Craig S. Anderson
3

Vous pouvez éditer la connexion "AUTO ETH0" ou le nom que vous utilisez pour vous connecter en NM. Vous pouvez le faire en cliquant avec le bouton droit sur NM et en sélectionnant "Modifier les connexions ...". Sur l'onglet IPv4, vous pouvez sélectionner "Adresses automatiques (DHCP) uniquement" comme "Méthode" et NM vous permettra de définir manuellement la ou les adresses de serveur de noms, même les adresses étant transmises via DHCP.

Frank Barcenas
la source
3

Ajoutant mon petit bout à la liste déjà longue, voici une autre manière (testée le 12.04):

Modifier /run/resolvconf/interface/NetworkManagerpour répondre à vos besoins. Voici un exemple:

search foobar.com example.com
nameserver 192.168.1.1

Ensuite, comme indiqué pour la plupart des autres exemples, effectuez une sudo resolvconf -u. Maintenant, vous trouverez votre resolv.confapparence comme ceci:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Je n'aime toujours pas la manière dont il est mis en œuvre maintenant (il semble qu'Ubuntu a besoin d'un service pour chaque foo qu'il fabrique) et je préférerais une plaine resolv.confà coup sûr. Mais cette approche semble être le meilleur compromis pour moi jusqu'à présent. Le "localhost-NS" ajouté ne devrait pas faire trop mal.

Izzy
la source
2

J'ai corrigé cela en changeant l'ordre des sources. J'ai déjà déplacé la dnssource mdnsdans /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Vous pouvez conserver vos paramètres tout en utilisant le serveur de mise en cache local de cette manière.

Dan B
la source
au lieu d’ajouter des entrées, corrigez le système qui est cassé et vous donne les informations que vous souhaitez réellement. +1
Nelaaro
2

Que diriez-vous:

sudo dpkg-reconfigure resolvconf

Avant cela, utilisez Network Manager pour changer l’adresse DNS et changez la méthode pour

Adresses automatiques (DHPC) uniquement

Ensuite, exécutez la commande ci-dessus et redémarrez. Cela a fait la solution pour moi.

Adige72
la source
2
vi /etc/network/interfaces


This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The primary network interface
allow-hotplug eth0


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0         <<----- change this comment with the #
iface eth0 inet dhcp
Roy Rogers
la source
2

C'est une question très populaire, avec une collection de réponses standard possibles, qui, IMO, sont plutôt compliquées. Personnellement, j’ai toujours eu du mal à faire en sorte que Ubuntu respecte les paramètres DNS que j’ai configurés dans NetworkManager - notamment le paramétrage des serveurs DNS statiques avec des "adresses automatiques (DHCP) uniquement" - et aujourd’hui j’ai enfin compris ce qui était réellement inexact.

Le problème réside dans l'interaction entre resolvconf et NetworkManager. Ce fichier est appelé resolvconf /etc/resolvconf/interface-order. Au moins sur mes systèmes, NetworkManager ne figure pas du tout dans ce fichier (sauf qu'il est couvert par le caractère générique * à la fin). Le rapport le plus récent de dhclient à resolvconf a donc préséance sur tout ce que NetworkManager a à dire.

Ainsi, du moins dans mon cas, la réponse réelle a été d'ajouter

NetworkManager

au sommet ou près du /etc/resolvconf/interface-order.

(Oui, je connais beaucoup de gens qui me disent simplement "désinstaller resolvconf", ce qui me semble une mauvaise idée en soi. Mais plus que cela, au moins, rusé et xénial, considérez resolvconf comme une partie vitale du système [c'est-à-dire, ubuntu -minimal en dépend], il serait donc difficile de conserver votre système dans un état cohérent et mis à jour sans resolvconf.)

Sur demande, je peux fournir plus de détails sur la façon dont j'ai compris cela. ( EDIT : apparemment, je ne l’ai pas fait quand cela a été demandé, désolé. À ce stade, je ne me souviens pas de beaucoup plus de détails que ce que j’ai dit ensuite :) En un mot, j’ai remplacé l’exécutable resolvconf par un wrapper de shell qui a vidé ses arguments, entrée, sortie et stderr dans des fichiers; et ajouté set -x aux scripts de mise à jour de resolvconf.

( EDIT : je peux dire que ce que je veux dire par la première partie est que j’ai utilisé sudo pour déplacer le fichier exécutable resolvconf, qui pourrait être trouvé à l’aide de la commande which ou de la commande type. Créez ensuite un script shell qui exécute simplement le fichier déplacé. resolvconf, mais renvoie également les arguments à un fichier et utilise la redirection de shell pour envoyer stdin, stdout et stderr à divers autres fichiers. Je ne me souviens pas où "les scripts de mise à jour de resolvconf" sont et ne peuvent pas être facilement vérifiés. Je pense beaucoup de geeks de Linux peuvent comprendre ce que je veux dire, peut-être qu'un bon samaritain fournira encore plus de détails dans un commentaire.)

Steven Collins
la source
S'il vous plaît " fournir plus de détails sur la façon dont vous avez compris cela "
Pierre.Vriens
1

Pour changer de DNS, suivez les instructions dans: https://developers.google.com/speed/public-dns/docs/using

  1. Aller au réseau

  2. Sélectionnez la connexion pour laquelle vous souhaitez configurer le DNS.

  3. Pour modifier les paramètres d'une connexion sans fil, sélectionnez l'onglet Sans fil, puis sélectionnez le réseau sans fil approprié.

  4. Cliquez sur la flèche (droite), puis dans la fenêtre qui s’ouvre, sélectionnez l’onglet Paramètres IPv4 ou Paramètres IPv6.

  5. Si la méthode sélectionnée est automatique (DHCP), ouvrez le menu déroulant et sélectionnez uniquement les adresses automatiques (DHCP). Si la méthode est définie sur autre chose, ne la changez pas.

  6. Dans le champ Serveurs DNS, entrez les adresses IP DNS, séparées par une virgule.

Ferroao
la source
0

0.Ajouter un DNS temporaire. Éditez /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1.Installez ou mettez à jour resolvconf.

root@ubuntu:~# apt-get install resolvconf -y

2. Ajoutez votre serveur de noms dans /etc/resolvconf/resolv.conf.d/tail

nameserver 4.4.4.4
nameserver 8.8.8.8

3. Redémarrez votre machine.

xiaoliuzi
la source