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:
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
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
.
$ 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.
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
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
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
L'ouvrir
Sélectionnez ensuite WiFi ou Ethernet, ou tout ce que vous utilisez, puis cliquez sur modifier. Vous obtiendrez ceci:
Sélectionnez ipv4 dans les onglets
Saisissez votre nom DNS ci-dessous et enregistrez-le
Vous avez terminé
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.
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.)
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.
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
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
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
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
Fichiers de configuration
$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;
Mettre à jour la configuration
reboot
Désactiver rdnssd
systemctl disable --now rdnssd.service
Désactiver résolu
systemctl disable --now systemd-resolved.service
Fichiers de configuration
/etc/sysconfig/network/config
Désactiver netconfig
cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""
Mettre à jour la configuration
reboot
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
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é.
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.
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.
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:
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 .
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).
Il existe deux méthodes
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
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.
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 ..
dns-nameservers
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.
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).
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:
dns=dnsmasq
sur /etc/NetworkManager/NetworkManager.conf
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
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.