Comment est-ce que resolvconf régénère resolv.conf après avoir changé / etc / network / interfaces?

77

Après avoir mis à jour /etc/network/interfaces avec quelque chose de très similaire à ci-dessous, comment puis-je mettre à jour /etc/resolv.conf ? J'ai essayé (en tant que root) resolver -u , service networking restart mais ils n'ont pas fonctionné. J'ai également corrigé le lien symbolique pour resolv.conf et essayé à nouveau resolver -u . Enfin, dans ma frustration, 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
    
posée nslntmnx 03.12.2012 - 13:59
la source

9 réponses

93

service networking restart n'est pas toujours un moyen fiable de réduire toutes les interfaces.

La commande resolvconf -u ne met à jour que resolv.conf de la propre base de données de 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 directement resolvconf à 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 de nouvelles lignes dans la chaîne redirigé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 le suivant.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Pour plus d’informations, consultez la page de manuel resolvconf (8) et le fichier README du package resolvconf (/usr/share/doc/resolvconf/README.gz).

    
réponse donnée jdthood 03.12.2012 - 20:23
la source
20

Bien que la page de manuel ne soit pas installée par défaut, elle est documentée via l’option de scripts de mise à jour, exécutez simplement:

sudo resolvconf -u
    
réponse donnée user267617 10.04.2014 - 23:32
la source
3

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

  1. met à 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'interface. Si cela se produit, ifup échouera et vous devrez avoir un accès physique ou une autre connexion ethxx .

    
réponse donnée sparky 24.01.2015 - 00:14
la source
2

service resolvconf restart régénérera le fichier /etc/resolv.conf sans trop de bruit.

    
réponse donnée Kamran 10.02.2016 - 15:03
la source
0

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.

Modifier /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 n’auront lieu 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.

Cependant, les modifications de commande ci-dessus seront perdues après un redémarrage si les modifications du /etc/network/interfaces ne sont pas apportées.

Au fait, la dernière réponse de BDenis dans cette liste fonctionne en fait à 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 . analyse en ligne sed. Si vous voulez voir comment cela se passe, lancez la première partie de la commande et regardez-la analyser le fichier /etc/network/interfaces et crache 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"

À condition que le fichier /etc/network/interfaces soit 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
    
réponse donnée user3199107 22.06.2015 - 23:37
la source
0

Réponse simple:

Installez simplement resolvconf. apt install resolvconf

Après cela, ifup eth0 met à jour les dns dans etc/resolv.conf , en fonction de la ligne dns-nameservers dans /etc/network/interfaces .

    
réponse donnée trogne 03.05.2017 - 01:14
la source
0

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

Ajustez en conséquence.

    
réponse donnée jbgeek 08.09.2017 - 01:21
la source
0

Le 18.04, ce qui suit fonctionne de manière fiable (exécutez en tant que root):

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

Important: assurez-vous que le package resolvconf est installé.
Cela ne semble pas être par défaut, et sans (!) Les changements de /etc/network/interfaces sont ignorés silencieusement (par exemple dns-* ).

    
réponse donnée Raphael 09.05.2018 - 13:49
la source
-3

Vous pouvez aussi essayer cette commande:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet
    
réponse donnée BDenis 09.10.2014 - 15:07
la source

Lire d'autres questions sur les étiquettes