Après avoir mis à jour /etc/network/interfaces
avec quelque chose de très similaire à ci-dessous, comment puis-je obtenir /etc/resolv.conf
pour mettre à jour? J'ai essayé (en tant que root) resolver -u
, service networking restart
mais ils ne fonctionnaient pas. J'ai également corrigé le lien symbolique pour resolv.conf
et essayé à nouveau resolver -u
. Finalement, frustré, j’ai redémarré, ce qui a résolu le problème en reconstruisant /etc/resolv.conf
.
Ubuntu 12.04, serveur 64 bits, tous les derniers correctifs installés.
Exemple /etc/network/interfaces
:
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
service networking restart
n'est pas toujours un moyen fiable de mettre toutes les interfaces à niveau.
La commande resolvconf -u
met à jour uniquement resolv.conf
à partir de la base de données propre à resolvconf. Vous devez mettre à jour la base de données.
Pour mettre à jour la base de données, vous devez appeler resolvconf avec l'option -a
ou -d
. Cela se produit dans les coulisses lorsque vous exécutez ifup ou ifdown. Donc, normalement, comme pour toute autre modification apportée à /etc/network/interfaces
, pour activer les modifications apportées aux options dns- *, vous devez désactiver l'interface en question et la réactiver. Ou vous pouvez redémarrer.
Si vous souhaitez modifier une interface sans la supprimer (peut-être parce que vous administrez la machine à distance et que vous êtes connecté via cette interface, natch), vous pouvez obtenir le même résultat en exécutant resolvconf directement à partir de la ligne de commande. Cela nécessite un peu plus de connaissance de la sémantique de resolvconf. Supposons que la strophe/e/n/i pertinente est
iface IIII FFFF static
address ...
...
dns-nameservers X.X.X.X Y.Y.Y.Y
dns-search SSSS
où FFFF est une famille d'adresses ("inet" ou "inet6").
Pour activer ces options dns- *, exécutez resolvconf comme suit (oui, avec des lignes nouvelles dans la chaîne acheminée vers resolvconf).
echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | Sudo resolvconf -a IIII.FFFF
Pour la strophe donnée dans la question, ce serait la suivante.
echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | Sudo resolvconf -a eth0.inet
Consultez la page de manuel resolvconf (8) et le paquet resolvconf README (/usr/share/doc/resolvconf/README.gz) pour plus d'informations.
Bien que la page de manuel ne soit pas installée par défaut, elle est documentée via l'option de mise à jour des scripts, il suffit d'exécuter:
Sudo resolvconf -u
Pour ceux d'entre vous qui gèrent vos serveurs à distance, vous pouvez:
dns-nameservers
dans /etc/network/interfaces
# ifdown eth01; ifup eth01
Notez que cela doit être sur une ligne divisée avec; (le séparateur de ligne de commande linux). Vous ne devriez même pas perdre votre connexion actuelle. L'exception fait une faute de frappe dans le fichier d'interfaces. Si cela se produit, ifup
échouera et vous devrez disposer d'un accès physique ou d'une autre connexion ethxx
name__.
service resolvconf restart
va régénérer le fichier /etc/resolv.conf
sans soucis.
Réponse simple:
Installez simplement resolvconf. apt install resolvconf
Ensuite, ifup eth0
met à jour le DNS dans etc/resolv.conf
, conformément à la ligne dns-nameservers
dans /etc/network/interfaces
.
Cette réponse est similaire à celle ci-dessus, mais utilise l'exemple de configuration des questions pour répondre à la question. De plus, cela explique pourquoi les deux commandes sont nécessaires.
Éditer /etc/network/interfaces
:
iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-search example.com
dns-nameserver 192.168.3.45
dns-nameserver 192.168.8.10
Ces modifications ne seront effectuées que si vous redémarrez ou rechargez le fichier de configuration:
Pour mettre à jour le fichier d'interface en direct, il est nécessaire d'exécuter la commande suivante:
echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | Sudo resolvconf -a eth0.inet
Cela permet une mise à jour de l'interface sans redémarrage ni rechargement.
Toutefois, les modifications de commande ci-dessus seront perdues après un redémarrage si les modifications dans /etc/network/interfaces
ne sont pas apportées.
A propos, la dernière réponse de BDenis dans cette liste fonctionne réellement à la place de la dernière commande en analysant le fichier /etc/network/interfaces
et en canalisant ces lignes dans la commande Sudo resolvconf -a eth0
C'est en fait la moitié de la réponse et un très bon exemple d'analyse inline sed. Si vous voulez voir comment cela fonctionne, exécutez simplement la première partie de la commande et regardez-la analyser le fichier /etc/network/interfaces
et cracher toutes les informations nécessaires pour exécuter la commande Sudo resolvconf -a eth0
:
sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'
Notez que cela produirait le même résultat que la commande:
echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"
Si le fichier /etc/network/interfaces
est configuré avec ces informations:
iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-search example.com
dns-nameserver 192.168.3.45
dns-nameserver 192.168.8.10
Le 18.04, fonctionne comme suit de manière fiable (exécuté en tant que root):
systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking
Important: Assurez-vous d'avoir le paquet resolvconf
installé.
Cela ne semble pas être le cas par défaut, et sans elle, certaines modifications (!) De /etc/network/interfaces
sont ignorées en silence (par exemple, dns-*
).
Sur la version de bureau d'Ubuntu 18.04, où il n'y a pas de service networking
, et resolvconf
n'est pas installé par défaut, j'ai réussi à régénérer resolv.conf
en redémarrant network-manager
:
Sudo service network-manager restart
Cela a fonctionné pour moi:
sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces | resolvconf -a eth0.inet && resolvconf -u
Ajuste en accord.