web-dev-qa-db-fra.com

Comment faire en sorte que resolvconf régénère resolv.conf après avoir modifié / etc / network / interfaces?

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
89
nslntmnx

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.

104
jdthood

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
23
user267617

Pour ceux d'entre vous qui gèrent vos serveurs à distance, vous pouvez:

  1. mettre à jour la ligne dns-nameservers dans /etc/network/interfaces
  2. # 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 ethxxname__.

5
sparky

service resolvconf restart va régénérer le fichier /etc/resolv.conf sans soucis.

2
Kamran

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.

1
trogne

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
1
user3199107

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-*).

0
Raphael

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
0
Ruslan

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.

0
jbgeek