Comment définir mon DNS quand resolv.conf est écrasé?

La plupart des informations que je vois en ligne dit d'éditer /etc/resolv.conf , mais toutes les modifications que je fais là juste get outrepassé.

 $ 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 dnsmasq docs disent éditer /etc/resolv.conf . J'ai essayé de placer des servers de noms personnalisés dans /etc/resolv.conf.d/base , mais les changements /etc/resolv.conf pas dans /etc/resolv.conf après l'exécution de sudo resolvconf -u .

Pour info, je ne veux pas modifier le DNS par connection, je veux définir les parameters DNS par défaut à utiliser pour toutes les connections, sauf indication contraire.

METTRE À JOUR:

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

Je pense que c'est la meilleure solution depuis:

  1. Ça marche.
  2. Il nécessite le less de changements et
  3. Il fonctionne toujours en conjonction avec le cache DNS de Dnsmasq, plutôt que de le contourner.

Je crois que si vous voulez surcharger le DNS nameserver vous ajoutez simplement une ligne semblable à ceci dans votre dossier de base sous resolv.conf.d .

Exemple

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

Ensuite, mettez votre list de servers de noms comme ainsi:

 nameserver 8.8.8.8 nameserver 8.8.4.4 

Enfin, mettez à jour resolvconf :

 $ sudo resolvconf -u 

Si vous jetez un coup d'oeil à la page man pour resolvconf il décrit les différents files 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, eg, options inet6 

Même s'il y a un avertissement en haut du file principal:

 $ 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 files sont construits, l'avertissement finira par find son path dans le file resolv.conf résultant que ces files seront utilisés. Vous pouvez donc tout aussi bien append les lignes du nameserver décrites ci-dessus pour le file de base file head .

Les references

  • Persist dns nameserver pour ubuntu 14.04
  • Comment append un server DNS via resolv.conf?

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

Ensuite, j'ai 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 dnsserver est

 DNS: 208.67.222.222 DNS: 208.67.220.220 

qui sont ceux fournis par mon routeur. D'autre part, creuser une adresse dit 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 «tête» est lue par resolvonf: la partie «base» est en quelque sorte contrôlée par dnsmasq
  2. le dnsserver est forcé à 8.8.4.4 quel que soit le server fourni par dhcp, MAIS vous perdez la caching fournie par dnsmasq, puisque la requête est toujours envoyée à 8.8.4.4
  3. dnsmasq n'utilise toujours que le server DNS fourni par dhcp.

Dans l'set, cela fonctionne mais je ne pense pas que ce soit le résultat recherché. Une solution plus étroite, je pense, est la suivante. modifier

 sudo vim /etc/dhcp/dhclient.conf 

puis append

 supersede domain-name-servers 8.8.8.8; 

Le résultat est le suivant: resolv.conf contient seulement 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, il est demandé à 8.8.8.8 et non au server fourni par dhcp.

Une autre option (peut-être préférable) 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 request retombe sur l'autre server. En fait, nm-tool dit

 DNS: 8.8.8.8 DNS: 208.67.222.222 DNS: 208.67.220.220 

J'ai découvert que vous pouvez changer les servers de noms utilisés par dnsmasq en ajoutant les lignes suivantes à /etc/dnsmasq.conf :

 server=8.8.8.8 server=8.8.4.4 

Je n'avais pas de file /etc/dnsmasq.conf , puisqu'il est installé par le packageage dnsmasq, mais Ubuntu n'est fourni qu'avec dnsmasq-base. J'ai lancé sudo apt-get install dnsmasq , puis édité /etc/dnsmasq.conf , puis sudo service dnsmasq restart et sudo service network-manager restart .

J'ai lancé sudo tail -n 200 /var/log/syslog pour vérifier mon syslog et vérifier que dnsmasq utilisait les servers 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 

Pour les situations IP statiques, le Guide du server Ubuntu dit de changer le file / 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 adresses 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

  1. Rechercher 'login réseau'
  2. Ouvrez-le

    entrer la description de l'image ici

  3. Sélectionnez ensuite WiFi ou Ethernet, ou ce que vous utilisez, puis click Modifier. Vous obtiendrez ceci:

    entrer la description de l'image ici

  4. Sélectionnez ipv4 dans les tabs

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

  7. Vous avez terminé

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

 $ sudo nano /etc/resolv.conf 

Ajoutez ceci et enregistrez:

 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.

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

Il indique: Si vous souhaitez replace les parameters DNS fournis par un server DHCP, ouvrez

 /etc/dhcp3/dhclient.conf 

et ajoutez la ligne suivante:

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

en remplaçant les éléments <dns_ip_address*> par le contenu approprié.

Essayez d'append dns-nameservers XXX.XXX.XXX.X dans votre file /etc/networking/interfaces .

EDIT MAI 6,2016

J'ai écrit un script pour mettre à jour tous les parameters des connections système dans le directory /etc/Network-Manager/system-connections/ . L'interface graphique que vous utilisez pour modifier les connections individuelles, modifie un file particulier dans ce directory. Le script met à jour tous les files – il search simplement ceux qui n'ont pas dns défini avec grep et le définit avec awk.

Depuis l'access à ces files nécessite un access 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:

entrer la description de l'image ici

POST ORIGINAL Certains users ici ont souligné que DNS est en quelque sorte contrôlé par dnsmasq . C'est vrai en effet. J'ai fait face à un problème un peu plus petit, où, peu importe la façon dont j'ai changé de head ou de body dans /etc/resolvconf/resolv.conf.d , mon ordinateur ne pouvait pas réellement accéder à un /etc/resolvconf/resolv.conf.d avec un nom de domaine.

Ce que j'ai fait est de modifier le file /etc/NetworkManager/NetworkManager.conf . Initialement, il disait que dns=dnsmasq mais je l'ai changé en: dns=208.67.222.222 . Bien que nm-tool ne mentionne pas 208.67.222.222, j'ai toujours pu utiliser des noms de domaine, pas seulement des adresses IP.

Voici comment mon file NetworkManager.conf ressemble maintenant:

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

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

MISE À JOUR # 1

De return de l'université aujourd'hui, j'ai découvert que je ne pouvais pas me connecter à mon WiFi domestique. J'ai lu un peu sur l' 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 est en train d'append le plugin dnsmasq au NetworkManager, apparemment.

Donc ma solution fonctionnait toujours, pas comme je l'avais prévu. Voici un extrait de la page man:

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

Les plugins DNS sont utilisés pour fournir une fonctionnalité de server de noms de caching locale (qui accélère les requêtes DNS) et pour pousser datatables DNS vers les applications qui l'utilisent.

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

Il me manque peut-être quelque chose, mais d'après les instructions de configuration à l' adresse https://help.ubuntu.com/14.04/serverguide/network-configuration.html, tout ce que vous faites est de mettre à jour ce qui suit. Je ne suis pas en train d'exécuter un proxy – juste une machine derrière un pare-feu et un DNS local (l'exemple montre Googles, mais le mettre à tout ce dont vous avez besoin).

 nano /etc/network/interfaces 

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 

ACTUALISÉ:

 # 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 xxxx netmask 255.255.255.0 gateway xxxx #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 xy dns-nameservers 4.4.4.4 8.8.8.8 

Redémarrez, si vous le pouvez.

La manière facile de changer le DNS:

 $ sudo nano /etc/network/interfaces 

Si des problèmes surviennent, installez nano :

 $ sudo apt-get install nano -y 

puis ..

  1. trouvez ceci: dns-nameservers
  2. si vous ne le trouvez pas, tapez-le
  3. Je l'ai fait 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 d'ailleurs.

à la racine:
1) commentez dns = dnsmasq sur /etc/NetworkManager/NetworkManager.conf
2) append "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.4.2.2.2; à la fin de /etc/dhcp/dhclient.conf
3) sudo service network-manager restart

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 process de redémarrage, vérifiez votre configuration avec "nslookup nist.gov"

Fonctionne bien sur Ubuntu LTS 14.04

J'ai fait face à un problème similaire. J'ai eu Ubuntu en tant qu'invité et Windows 7 en tant qu'hôte. J'ai sélectionné NAT et Bridge, mais je n'ai pas réussi. J'ai finalement sélectionné NAT et vérifié les parameters de mon proxy de browser. Il y a eu beaucoup de succès et d'essais mais finalement je suis content. Merci à la suggestion de quelqu'un. Je devenais fou et je devais littéralement suivre les packages en utilisant traceroute.

Pour changer le paramètre du proxy dans ubuntu, allez dans Paramètres-> Avancé-> sous l'onglet Réseau-> «Modifier les parameters du proxy» -> Paramètres du réseau local -> Répliquez ceci comme parameters du browser de votre ordinateur hôte.

sudo echo -e "nameserver 8.8.8.8\n" | sudo resolvconf -a eth0

Aller à resolv.config

 $ sudo nano /etc/resolv.conf 

Ajoutez ceci et sauvegardez dans le file enfin:

 nameserver 8.8.8.8 

Sauvegardez le file par Ctrl + X suivi de y Retour . Puis redémarrez le service en tant que:

 sudo service network-manager restart