web-dev-qa-db-fra.com

Comment définir mon DNS lorsque le fichier resolv.conf est écrasé?

La plupart des informations que je vois en ligne disent de modifier /etc/resolv.conf, mais toutes les modifications que j'y apporte sont simplement remplacées.

$ 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.1.1

Il semble que 127.0.1.1 soit une instance locale de dnsmasq. Les documents dnsmasq disent de modifier /etc/resolv.conf. J'ai essayé de mettre des serveurs de noms personnalisés dans /etc/resolv.conf.d/base, mais les modifications ne sont pas apparues dans /etc/resolv.conf après avoir exécuté Sudo resolvconf -u.

Pour info, je ne veux pas changer DNS sur une base par connexion, je veux définir les paramètres DNS par défaut à utiliser pour toutes les connexions, sauf indication contraire.

MISE À JOUR:

J'ai moi-même répondu à cette question: https://unix.stackexchange.com/a/163506/67024

Je pense que c'est la meilleure solution depuis:

  1. Ça marche.
  2. Il nécessite le moins de changements et
  3. Il fonctionne toujours en conjonction avec le cache DNS de dnsmasq, plutôt que de le contourner.
302
Seán Hayes

J'ai découvert que vous pouvez modifier les serveurs de noms que dnsmasq utilise en ajoutant les lignes suivantes à /etc/dnsmasq.conf:

server=8.8.8.8
server=8.8.4.4

Je n'avais pas de /etc/dnsmasq.conf cependant, car il est installé par le paquet dnsmasq, mais Ubuntu n'est fourni qu'avec dnsmasq-base. L'Iran Sudo apt-get install dnsmasq, puis modifié /etc/dnsmasq.conf, puis Sudo service dnsmasq restart et Sudo service network-manager restart.

L'Iran Sudo tail -n 200 /var/log/syslog pour vérifier mon syslog et vérifier que dnsmasq utilisait les serveurs de noms que j'ai spécifiés:

Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.8.8#53
Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.4.4#53
60
Seán Hayes

Je crois que si vous souhaitez remplacer le serveur de noms DNS, vous ajoutez simplement une ligne similaire à celle-ci dans votre fichier base sous resolv.conf.d.

Exemple

$ Sudo vim /etc/resolvconf/resolv.conf.d/base

Ensuite, mettez votre liste de serveurs de noms comme ceci:

nameserver 8.8.8.8
nameserver 8.8.4.4

Enfin, mettez à jour resolvconf:

$ Sudo resolvconf -u

Si vous jetez un œil à la page de manuel de resolvconf, elle décrit les différents fichiers sous /etc/resolvconf/resolv.conf.d/.

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

   /etc/resolvconf/resolv.conf.d/head
          File to be prepended to the dynamically generated resolver 
          configuration file.  Normally this is just a comment line.

   /etc/resolvconf/resolv.conf.d/tail
          File to be appended to the dynamically generated resolver 
          configuration file.  To append nothing, make this  an  empty  
          file.   This file is a good place to put a resolver options line 
          if one is needed, e.g.,

              options inet6

Même s'il y a un avertissement en haut du fichier head:

$ 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

cet avertissement est là pour que lorsque ces fichiers sont construits, l'avertissement finira par se frayer un chemin dans le fichier resolv.conf résultant que ces fichiers seront utilisés pour créer. Ainsi, vous auriez pu tout aussi facilement ajouter les lignes nameserver décrites ci-dessus pour le fichier base, au fichier head également.

Références

262
slm

Je suis également intéressé par cette question et j'ai essayé la solution proposée @sim.

Pour le tester, je mets

nameserver 8.8.8.8

dans /etc/resolvconf/resolv.conf.d/base et

nameserver 8.8.4.4

dans /etc/resolvconf/resolv.conf.d/head

J'ai ensuite redémarré le réseau avec

Sudo service network-manager restart

Le résultat est que /etc/resolv.conf ressemble à

# 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 127.0.1.1

et nm-tool indique que le serveur DNS est

DNS:             208.67.222.222
DNS:             208.67.220.220

qui sont ceux fournis par mon routeur. En revanche, creuser une adresse indique que

;; Query time: 28 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)

Si j'ai raison, je conclus de tout cela que

  1. seule la partie "head" est lue par resolvonf: la partie "base" est en quelque sorte contrôlée par dnsmasq
  2. le serveur DNS est en fait forcé à 8.8.4.4 quel que soit le serveur fourni par dhcp, MAIS vous perdez la mise en cache fournie par dnsmasq, car la demande est toujours envoyée à 8.8.4.4
  3. dnsmasq utilise toujours UNIQUEMENT le serveur DNS fourni par dhcp.

Dans l'ensemble, cela fonctionne, mais je ne pense pas que ce soit le résultat souhaité. Je pense qu'une solution plus proche est la suivante. Éditer

Sudo vim /etc/dhcp/dhclient.conf

puis ajouter

supersede domain-name-servers 8.8.8.8;

Le résultat est le suivant: resolv.conf ne contient que 127.0.0.1, ce qui signifie que le cache dnsmasq est appelé et nm-tool dit

DNS:             8.8.8.8

ce qui signifie que si le nom recherché n'est pas dans le cache, il est demandé à 8.8.8.8 et non au serveur fourni par dhcp.

Une autre option (peut-être meilleure) consiste à utiliser "prepend" au lieu de "supersede": de cette façon, si le nom n'est pas résolu par 8.8.8.8, la demande retombe sur l'autre serveur. En fait, nm-tool dit

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220
80
brad

Pour les situations IP statiques, le Guide du serveur Ubuntu indique de changer le fichier/etc/network/interfaces, qui peut ressembler à ceci:

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

Vous changez les IP 192.168.3.45 192.168.8.10 pour celles que vous voulez, comme 8.8.8.8

https://help.ubuntu.com/14.04/serverguide/serverguide.pdf Page 38

23
Rodolpho
  1. Rechercher 'Connexion réseau'
  2. L'ouvrir

    enter image description here

  3. Sélectionnez ensuite WiFi ou Ethernet, ou tout ce que vous utilisez, puis cliquez sur modifier. Vous obtiendrez ceci:

    enter image description here

  4. Sélectionnez ipv4 dans les onglets

  5. Sélectionnez les adresses uniquement dans la méthode
  6. Saisissez votre nom DNS ci-dessous et enregistrez-le

  7. Vous avez terminé

17
pa1pal

Une solution rapide et sale qui n'a pas encore été mentionnée consiste à définir l'indicateur immuable sur le resolv.conf fichier juste après l'avoir modifié.

$ Sudo nano /etc/resolv.conf

Ajoutez ceci et économisez:

nameserver 8.8.8.8

Alors:

$ Sudo chattr +i /etc/resolv.conf

Cela devrait faire l'affaire. Je le fais aussi sur mon système.

15
Younis Bensalah

Configuration DNS sous Linux

l'utilisation DNS sur Linux est terminée un ensemble de routines dans la bibliothèque C qui donnent accès au DNS (Internet Domain Name System). Le fichier de configuration du résolveur (resolv.conf) contient des informations qui sont lues par les routines de résolution la première fois qu'elles sont appelées par un processus. En bref, chaque processus demandant DNS lira /etc/resolv.conf sur la bibliothèque. Le NSS est superposé en plus de cela, et est configuré par /etc/nsswitch.conf.

Linux DNS config sont situés dans le fichier /etc/resolv.conf MAIS il existe un certain nombre de programmes/services qui souhaitent gérer et gérer automatiquement le fichier de configuration DNS à /etc/resolv.conf. Dans certaines situations, vous souhaiterez peut-être gérer vous-même ce fichier. Chaque programme/service gérant DNS a ses propres fichiers de configuration comme /etc/dnsmasq.conf (pour le service dnsmasq) et ajoutez la configuration DNS au changement de connexion et/ou à d'autres événements ... une solution rapide consiste à verrouiller le fichier de configuration DNS avec chattr +i /etc/resolv.conf mais ce n'est pas recommandé dans certains cas, une meilleure solution est de configurer correctement tous les programmes/services en utilisant le DNS comme (dnsmasq/network-manager/resolvconf/etc.)

Reprendre le contrôle du DNS

Voici une liste exhaustive des configurations pour reprendre le contrôle de resolv.conf et éviter de l'écraser (comment désactiver/configurer le DNS à partir d'un autre emplacement que resolv.conf ) notez que resolvconf est un programme indépendant de resolv.conf, également en fonction de votre système/configuration, vous pouvez ne pas avoir un ou plusieurs des programmes répertoriés ici.

1. Resolvconf:

Fichiers de configuration

cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4

Mettez à jour la configuration

Sudo resolvconf -u

Désactiver resolvconf

systemctl disable --now resolvconf.service 

2. Service Dnsmasq:

Fichiers de configuration

cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4

Mettez à jour la configuration

Sudo systemctl restart dnsmasq.service

3. Gestionnaire de réseau:

Fichiers de configuration

/etc/NetworkManager/*

Désactiver DNS

$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none

Activer DNS

$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default

[global-dns]
searches=example.com

[global-dns-domain-*]

Utilisez le service résolu

$ cat /usr/lib/NetworkManager/conf.d/resolved.conf 
[main]
dns=systemd-resolved

Utilisez resolvconf

$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf 
[main]
rc-manager=resolvconf

Mettez à jour la configuration

systemctl restart NetworkManager.service

4. Interfaces réseau:

Fichiers de configuration

$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

Mettre à jour la configuration

reboot

5. Client DHCP:

Fichiers de configuration

$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

Mettre à jour la configuration

reboot

6. Service Rdnssd:

Désactiver rdnssd

systemctl disable --now rdnssd.service

7. Service résolu:

Désactiver résolu

systemctl disable --now systemd-resolved.service

8. Netconfig:

Fichiers de configuration

/etc/sysconfig/network/config

Désactiver netconfig

cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""

Mettre à jour la configuration

reboot

Configuration du serveur DNS

Exemple d'un /etc/resolv.conf configuration

#Cloudflare
nameserver 1.0.0.1

#Google
#nameserver 8.8.8.8
#nameserver 8.8.4.4

#Cloudflare 
#nameserver 1.1.1.1

#Classic Config
#nameserver 192.168.1.1
#search lan
14
intika

Mon problème était un peu différent, je voulais remplacer les serveurs DNS de mes routeurs. J'ai trouvé ce lien depuis Ubuntu: https://wiki.ubuntu.com/OverrideDNSServers

Il dit: Si vous souhaitez remplacer les paramètres DNS fournis par un serveur DHCP, ouvrez

/etc/dhcp3/dhclient.conf

et ajoutez la ligne suivante:

supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

remplacer <dns_ip_address*> éléments avec le contenu approprié.

11
Ryan

Peut-être que je manque quelque chose, mais selon les instructions de configuration à https://help.ubuntu.com/14.04/serverguide/network-configuration.html tout ce que vous faites est de mettre à jour ce qui suit. Je n'exécute pas de proxy - juste une machine derrière un pare-feu et un DNS local (l'exemple montre Google, mais réglez-le sur ce dont vous avez besoin).

nano /etc/network/interfaces

Par défaut:

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
auto eth0
iface eth0 inet dhcp

MISE À JOUR:

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
#iface eth0 inet dhcp
iface eth0 inet static
address x.x.x.x
netmask 255.255.255.0
gateway x.x.x.x

#nameservers
# you may not need dns-search
# I use it because I'm running this on a Windows network 
# so its useful to have
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

Redémarrez, si vous le pouvez.

Essayez d'ajouter dns-nameservers XXX.XXX.XXX.X Dans votre /etc/networking/interfaces fichier.

3
Mike

Certaines des réponses ici fonctionnent très bien. Cependant, je n'étais pas satisfait du fait que je doive parcourir manuellement les fichiers de configuration juste pour définir le "bon" DNS qui je déjà reçois plus de DHCP avec NetworkManager.

J'ai creusé un peu et j'ai remarqué que le /etc/resolv.conf le fichier est en fait un lien et il pointe vers /run/systemd/resolve/stub-resolv.conf. Après quelques essais, il semble que /run/systemd/resolve/ le répertoire contient un autre fichier nommé resolv.conf qui contient déjà les paramètres que vous avez reçus via DHCP. Ainsi, au lieu d'avoir à écraser/créer manuellement des fichiers de configuration dans /etc/, vous pouvez simplement rétablir le lien /etc/resolv.conf pour pointer vers le /run/systemd/resolve/resolv.conf fichier et tout devrait bien se passer:

# Sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Vous devriez maintenant pouvoir modifier les paramètres même à partir du gestionnaire de réseau dans Gnome. :)

Je ne sais pas si cela fonctionnera sur les anciens ubuntu, mais c'est le cas sur Ubuntu 17.10.

2
tftd

MODIFIER LE 6 MAI 2016

J'ai écrit un script pour mettre à jour tous les paramètres des connexions système dans le /etc/Network-Manager/system-connections/ répertoire. L'interface graphique que vous utilisez pour modifier des connexions individuelles modifie un fichier particulier dans ce répertoire. Le script met à jour tous les fichiers - il recherche simplement ceux qui n'ont pas défini DNS avec grep et le définit avec awk.

Étant donné que l'accès à ces fichiers nécessite un accès Sudo, exécutez ce script avec Sudo, puis - redémarrez le gestionnaire de réseau

#!/bin/bash
# Author: Serg Kolo
# Date: May 6, 2015
# Description: this script checks all settings for connections in 
# /etc/NetworkManager/system-connections/ , and if there's no custom
# dns set , this script sets it;
# NOTE: run Sudo service network-manager restart after running this script

set -x

for file in /etc/NetworkManager/system-connections/* ; do
        grep 'dns=208.67.220.220;' "$file"  || ( awk '{print;if ($1=="[ipv4]"){getline; print "method=auto\ndns=208.67.220.
220;\nignore-auto-dns=true"}}' "$file" > .tmpfile && ( cat .tmpfile > "$file") )
done

Script en action:

enter image description here

POST ORIGINAL Certains utilisateurs ici ont souligné que le DNS est en quelque sorte contrôlé par dnsmasq. C'est bien vrai. J'ai rencontré un problème un peu plus petit, où que je modifie head ou body dans /etc/resolvconf/resolv.conf.d, mon ordinateur ne pouvait pas réellement accéder à interné par nom de domaine - fonctionnant uniquement avec des adresses IP.

Ce que j'ai fait, c'est d'éditer le /etc/NetworkManager/NetworkManager.conf fichier. À l'origine, il disait dns=dnsmasq mais je l'ai changé en: dns=208.67.222.222. Bien que de cette façon, nm-tool ne mentionne pas 208.67.222.222, j'ai quand même pu utiliser des noms de domaine, pas seulement des adresses IP.

Voici comment mon NetworkManager.conf le fichier ressemble maintenant:

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq
dns=208.67.222.222

[ifupdown]
managed=false

REMARQUE: Pour plus de détails sur mon problème et cette solution, reportez-vous à mon message sur askubuntu.com .

MISE À JOUR # 1

De retour à la maison de l'université aujourd'hui, j'ai découvert que je ne pouvais pas me connecter au WiFi de ma maison. J'ai lu un peu sur man NetworkManager.conf et il s'avère que dns= dans [main] est en fait une ligne pour les plug-ins, donc la ligne dns=dnsmasq ajoute en fait le plugin dnsmasq au NetworkManager, apparemment.

Donc ma solution fonctionnait toujours, mais pas comme je m'y attendais. Voici un extrait de la page de manuel:

dns=plugin1,plugin2, ... List DNS plugin names separated by ','. 

Les plugins DNS sont utilisés pour fournir la fonctionnalité de serveur de noms de mise en cache locale (ce qui accélère les requêtes DNS) et pour transmettre les données DNS aux applications qui les utilisent.

Donc, en définissant dns=208.67.222.222 J'ai peut-être, fondamentalement, empêché NetworkManager d'utiliser ce plugin, qui utiliserait autrement le serveur DNS local (qui ne fonctionne apparemment pas).

1

Il existe deux méthodes

Méthode 1

Le serveur DNS à utiliser peut être modifié en mettant à jour le fichier head dans sous resolv.conf.d

$ echo 'nameserver 1.1.1.1' | Sudo tee /etc/resolvconf/resolv.conf.d/base

puis exécutez

$ Sudo resolvconf -u

Ce qui précède va générer un fichier générique resolv.conf Dans le répertoire /etc. Toutes vos demandes de résolution seront envoyées au dit serveur de noms ci-dessus. Résolu.

Cependant, cela a des implications. Lorsque vous utilisez resolvconf pour interroger directement 1.1.1.1 Pour les résolutions d'adresse, le pouvoir de mise en cache fourni par dnsmasq a disparu. Chaque demande sera envoyée à 1.1.1.1

Méthode 2

Si vous ne voulez pas que ce qui précède se produise et utilisez dnsmasq pour les résolutions DNS, reportez-vous à la réponse this . La réponse est simplement décrite ici.

Ajoutez le contenu suivant dans le fichier /etc/dnsmasq.conf.

serveur = 1.1.1.1

Redémarrez ensuite le service dnsmasq

$ Sudo systemctl restart dnsmasq.service

Les choses fonctionneront bien. Résolu.

1
Pragathees

Le moyen facile de changer DNS:

$ Sudo nano /etc/network/interfaces

Si des problèmes surviennent, installez nano:

$ Sudo apt-get install nano -y

puis ..

  1. trouve ça: dns-nameservers
  2. si vous ne le trouvez pas, tapez-le
  3. J'ai fait le mien comme ça: dns-nameservers 199.85.126.10 199.85.127.10

J'espère que c'est la meilleure façon, je l'ai fait comme ça sur un VPS en passant.

0
Saif Salim

NB: Comme la plupart des réponses, celle-ci suppose l'utilisation de NetworkManager. Cependant, contrairement à la plupart des autres réponses, il ne suppose pas l'utilisation de resolvconf, dhclient ou quoi que ce soit d'autre - méfiez-vous qu'ils peuvent prendre le relais, cependant (voir la mise à jour).

Étant donné le nombre de vues de cette question, il est assez incroyable que cette solution 8 caractères n'ait pas encore été publiée: selon man NetworkManager.conf,

dns: […] aucun: NetworkManager ne modifiera pas resolv.conf. Cela implique rc-manager non géré

Par conséquent, ajoutez

dns=none

dans le [main] section de /etc/NetworkManager/NetworkManager.conf puis redémarrez NetworkManager et il ne modifiera pas /etc/resolv.conf plus.

Notez que le paramètre rc-manager=unmanaged devrait être équivalent à dns=none, et ce paramètre rc-manager=symlink en plus d'avoir /etc/resolv.conf en tant que lien symbolique peut être une meilleure idée (lire la page de manuel susmentionnée).

Mise à jour :

Une fois que NetworkManager a cessé d'écraser /etc/resolv.conf, Je pensais que dhcpcd remplaçait déjà /etc/resolv.conf par un fichier vide inutile au démarrage. La page de manuel de dhcpcd.conf aidé, il suffit d'ajouter

nohook resolv.conf

dans ton dhcpcd.conf (le mien est en /etc/dhcpcd.conf).

à la racine:

  1. commentaire dns=dnsmasq sur /etc/NetworkManager/NetworkManager.conf
  2. ajouter supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2; au bout du /etc/dhcp/dhclient.conf
  3. Sudo service network-manager restart

Ce qui suit apporte les modifications indiquées ci-dessus:

$ Sudo sed -i 's/dns\x3Ddnsmasq/\x23dns\x3Ddnsmasq/' \
   /etc/NetworkManager/NetworkManager.conf

$ echo 'supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2;' | \
   Sudo tee --append /etc/dhcp/dhclient.conf

$ Sudo service network-manager restart

Attendez 7/10 secondes pour terminer le processus de redémarrage, vérifiez votre configuration avec "nslookup nist.gov". Fonctionne bien sur Ubuntu LTS 14.04.

0
Sebastien Willemijns