Comment puis-je configurer mon DNS lorsque le fichier resolv.conf est écrasé ?

La plupart des informations que je vois en ligne disent qu'il faut modifier /etc/resolv.conf, mais toutes les modifications que j'y fais sont écrasé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. La documentation de dnsmasq dit de modifier /etc/resolv.conf. J'ai essayé de mettre des serveurs de noms personnalisés dans /etc/resolv.conf.d/base, mais les changements n'apparaissent pas dans /etc/resolv.conf après avoir exécuté sudo resolvconf -u.

Pour votre information, je ne veux pas modifier les DNS pour chaque connexion, je veux définir des paramètres DNS par défaut à utiliser pour toutes les connexions, sauf indication contraire.

UPDATE:

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

Je pense que c&#8217est la meilleure solution depuis :

  1. Elle fonctionne.
  2. Elle nécessite le moins de changements possible et
  3. Elle fonctionne toujours en conjonction avec le cache DNS de dnsmasq, plutôt que de le contourner.

Je crois que si vous voulez remplacer le serveur de noms DNS, il suffit d'ajouter une ligne similaire à celle-ci dans votre fichier base sous resolv.conf.d.

Exemple

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

Puis 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 oeil à 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 se retrouve dans le fichier resolv.conf qui en résulte. Vous auriez donc pu tout aussi facilement ajouter les lignes nameserver décrites ci-dessus pour le fichier base, au fichier head également.

Références

Commentaires (7)

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

Pour la tester, j'ai mis

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.

Puis j'ai redémarré le réseau avec

sudo service network-manager restart

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

# 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 les dnsserver sont

DNS:             208.67.222.222
DNS:             208.67.220.220

qui sont ceux fournis par mon routeur. D'autre part, le fait de 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 ceci que

  1. seule la partie "head&quot ; est lue par resolvonf : la partie "base&quot ; est en quelque sorte contrôlée par dnsmasq
  2. le dnsserver est en fait forcé de se connecter à 8.8.4.4 indépendamment du serveur fourni par dhcp, MAIS vous perdez le cache fourni par dnsmasq, puisque la requête est toujours envoyée à 8.8.4.4
  3. dnsmasq utilise toujours UNIQUEMENT le dnsserver fourni par dhcp.

Dans l&#8217ensemble, cela fonctionne mais je ne pense pas que ce soit le résultat souhaité. Une solution plus proche, je pense, est la suivante. Modifier

sudo vim /etc/dhcp/dhclient.conf

puis ajoutez

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 invoqué et que nm-tool dit

DNS:             8.8.8.8

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

Une autre option (peut-être meilleure) est d'utiliser "prepend&quot ; au lieu de "supersede" : de cette façon, si le nom n'est pas résolu par 8.8.8.8, alors la requête 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
Commentaires (4)

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

Commentaires (2)