Qu'est-ce qui écrase /etc/resolv.conf à chaque démarrage?

23

On m'a donné les fichiers pour un mini linux, qui démarre directement dans firefox. Cela fonctionne pour tout ce qu'il devrait faire, seulement que je n'ai pas de connexion Internet.

Nous avons 3 serveurs DNS dans le réseau, qui fonctionnent tous. Je peux aussi les cingler. Mais lorsque j'essaye ping google.deou wget google.dej'obtiens une bad addresserreur.

nslookup google.de fonctionne pour une raison quelconque.

J'ai suivi le problème jusqu'à ce que resolv.confle système démarré n'ait pas le même contenu que celui resolv.confque j'ai mis dans le .isofichier.

J'ai essayé de comprendre tous les facteurs qui entrent dans la création et la modification resolv.conf. Je ne suis pas sûr d'avoir tout compris, mais je n'ai certainement pas trouvé ma solution là-bas.

Donc, comme dernier effort, j'ai essayé de rendre le resolv.conffichier immuable en utilisant

:~# chattr +i /etc/resolv.conf

Lors de la reconstruction et du redémarrage à ma grande surprise, mon fichier a été renommé resolv.conf~et à sa place était le même fichier standard qui me hante.

Le contenu du fichier me fait croire qu'il obtient les informations du réseau lui-même. Lors du démarrage de la .isoVirtualbox sans accès Internet, mon fichier est conservé tel quel.

J'ai essayé de changer /etc/dhcp/dhclient.confpour ne pas obtenir les informations sur le net, en supprimant domain-name-serveret domain-name-searchde la requestpartie du fichier.

Cela n'a pas fonctionné malheureusement.

Je n'ai pas le NetworkManager installé. L'iso est basé sur Ubuntu 14.04.

Il manque probablement des informations vitales. Je suis heureux de vous le fournir.

MISE À JOUR:

Je pense avoir trouvé le fichier qui efface resolv.conf.

Il semble que /usr/share/udhcpc/default.script

#!/bin/sh

# udhcpc script edited by Tim Riker <[email protected]>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ - n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
    deconfig)
        /bin/ifconfig $interface 0.0.0.0
        for i in /etc/ipdown.d/*; do
            [ -e $i ] && . $i $interface
        done
        ;;

    renew|bound)
        /bin/ifconfig $interface $ip $BROADCAST $NETMASK

        if [ -n "$router" ] ; then
            echo "deleting routers"
            while route del default gw 0.0.0.0 dev $interface ; do
                :
            done

            metric=0
            for i in $router ; do
                route add default gw $i dev $interface metric $((metric++))
            done
        fi

        echo -n > $RESOLV_CONF # Start ----------------  
        [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
        for i in $dns ; do
            echo adding dns $i
            echo nameserver $i >> $RESOLV_CONF
        done
        for i in /etc/ipup.d/*; do
            [ -e $i ] && . $i $interface $ip $dns 
        done # End ------------------
        ;;
esac

exit 0

Cela fait partie du udhcpcprogramme. Un petit client DHCP, qui fait partie debusybox

Enquêtera plus avant.


MISE À JOUR2 ET SOLUTION:

J'ai commenté la partie (#Start to #End), qui écrase apparemment le /etc/resolv.conffichier et bien sûr. C'était le coupable. Un script obscur a donc causé tous ces ennuis.

J'ai changé la question pour refléter ce qui devait être connu pour résoudre mon problème, il serait donc plus facile à trouver pour les personnes ayant le même problème et je pourrais donc accepter une réponse.

Merci pour l'aide ici à comprendre les choses.

Minix
la source
1
La définition de l'indicateur immuable sur resolv.conf ne fonctionne pas comme prévu car le fichier n'a pas été modifié. L'entrée de répertoire dans / etc a été modifiée lors du changement de nom du fichier. Vous devez définir / etc pour qu'il soit immuable - quelque chose que vous ne voulez vraiment pas faire.
doneal24
@ DougO'Neal je vois. Merci pour l'information.
Minix

Réponses:

24

1) Vous ne devez pas mettre à jour manuellement votre resolv.conf, car toutes les modifications seront écrasées par les données fournies par votre serveur DHCP local. Si vous souhaitez qu'il soit statique, exécutez sudo dpkg-reconfigure resolvconfet répondez «non» aux mises à jour dynamiques. Si vous souhaitez y ajouter de nouvelles entrées, les modifier /etc/resolvconf/resolv.conf.d/baseet les exécuter sudo resolvconf -u, il ajoutera vos entrées et celles du serveur DHCP.

2) Essayez de modifier vos / etc / network / interfaces et ajoutez-y vos entrées, comme

auto eth0 
iface eth0 inet dhcp 
dns-search google.com 
dns-nameservers dnsserverip 

puis redémarrez /etc/init.d/networking restartou sudo ifdown -aetsudo ifup -a

3) Votre système utilise udhcp qui est un très petit programme client DHCP. Le client udhcp négocie un bail avec le serveur DHCP et notifie un ensemble de scripts lorsqu'un bail est obtenu ou perdu. Vous pouvez en savoir plus sur son utilisation ici ou simplement modifier ce script (comme vous l'avez fait).

kirill-a
la source
1
J'ai ajouté les entrées dans le /etc/resolvconf/resolv.conf.d/baseet j'ai couru resolvconf -u. Cela n'a pas fonctionné, malheureusement.
Minix
Avez-vous essayé d'exécuter sudo dpkg-reconfigure resolvconf? Après avoir exécuté resolvconf -u, vos entrées n'étaient pas dans le fichier de résultats? Comment les avez-vous ajoutés, comme "nameserver 127.0.0.1" ou "search google.com"?
kirill-a
J'ai couru dpkg-reconfigure resolvconf. Les entrées n'étaient pas là. Et j'ai des entrées avec nameserver ipet search domain.
Minix
Non, l'exécution dpkg-reconfigure resolvconfn'ajoutera pas d'entrées, mais vous pouvez désactiver les mises à jour automatiques. Si vous désactivez les mises à jour, vous pouvez modifier resolv.conf manuellement et il ne doit pas être remplacé.
kirill-a
Mon mauvais pour le formuler si maladroitement, je répondais à votre commentaire phrase par phrase. Après l'exécution, resolvconf -ules entrées n'ont pas été ajoutées.
Minix
4

J'ai rencontré ça aussi. Commenter domain-name-serverne l'a pas corrigé non plus.

De plus, je n'utilise pas resolvconf, tout simplement /etc/resolv.conf.

Je n'ai pas essayé d'utiliser chattr +ipour verrouiller resolv.confcar cela semble trop hacky. De plus, je veux que Puppet puisse modifier resolv.confsi nécessaire.

La meilleure solution que j'ai trouvée remplace le comportement par défaut de l' dhclientutilisation de ses crochets documentés.

Créez un nouveau fichier /etc/dhcp/dhclient-enter-hooks.d/nodnsupdateavec le contenu suivant:

#!/bin/sh
make_resolv_conf() {
    :
}

Rendez ensuite le fichier exécutable:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Maintenant, lorsque dhclient s'exécute - soit au redémarrage, soit lorsque vous l'exécutez manuellement sudo ifdown -a ; sudo ifup -a- il charge ce script nodnsupdate. Ce script remplace une fonction interne appelée make_resolv_conf()qui écraserait normalement resolv.confet ne fait rien.

Cela a fonctionné pour moi sur Ubuntu 12.04.

richardkmiller
la source
N'a pas fonctionné sur Ubuntu 18.04 :( a /etc/resolv.confété remplacé après le redémarrage.
Dan Dascalescu
3

Ubuntu 16.04 Si les interfaces réseau de votre instance de serveur sont contrôlées par DHCP, le programme dhclient écrasera votre /etc/resolv.conffichier à chaque redémarrage du service réseau.

Vous pouvez résoudre le problème en éditant le /etc/dhcp/dhclient.conffichier et en ajoutant « annulent et remplacent » les déclarations de noms de domaine , domaine recherche et domain-name-serveurs comme suit:

supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;

Dans ce cas particulier, le serveur de noms est situé à "192.168.56.103" et le nom de domaine est "local.com"

Notez que chaque ligne se termine par un point-virgule et que le nom de domaine est placé entre guillemets.

Sand1512
la source
Malheureusement, cela n'a pas fonctionné sur Ubuntu 18.04. Après le redémarrage, a /etc/resolv.confété remplacé par 127.0.0.53.
Dan Dascalescu
Peut-être que vous pouvez essayer ce askubuntu.com/questions/1031279/…
Sand1512
Vérifiez également si vous exécutezdnsmasq
Sand1512
0

allez dans ce répertoire:

  cd /etc/resolvconf/resolv.conf.d

Ouvrez le fichier nommé head et insérez-y les adresses IP ou les noms DNS. Ouvrez le fichier nommé tail et placez-y le domaine. Redémarrez.

user245423
la source
Ce répertoire n'existe pas par défaut sur Ubuntu 18.04. Avez-vous besoin d'installer un service qui le crée?
Dan Dascalescu
0

Dans Azure VMs /etc/resolv.conf n'est pas directement modifiable.

Essayez d'ajouter les DNS complets dans vos fichiers de configuration réseau / etc / sysconfig / network-scripts / ifcfg-eth0 et ainsi de suite comme ci-dessous:

DOMAINE = exemple.com

DNS1 = 10. . . *
DNS2 = 10. . . *
DNS3 = 10. . . *

et redémarrez le service réseau après avoir enregistré les fichiers. vous verrez que la configuration sera également ajoutée dans le fichier resol.conf également.

Krishan
la source
0

Pour que les modifications liées au DNS soient resolv.confpermanentes, vous devez modifier le fichier de configuration DHCP nommé dhclient.conf. Vous pouvez trouver le fichier dans /etc/dhcp/dhclient.conf.

Ouvrez le fichier pour le modifier (n'oubliez pas d'utiliser sudo). Vous verrez des lignes comme celles-ci:

#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;

Supprimez le «#» précédent et utilisez les serveurs de nom de domaine et / ou de nom de domaine souhaités. Sauvegarde le. Maintenant, les modifications liées au DNS seront permanentes.

Les crédits vont à: https://itsfoss.com/resolvconf-permanent-ubuntu/

MAChitgarha
la source
Cette réponse avait déjà été donnée 2 ans plus tôt .
Dan Dascalescu
0

Utilisez la commande ci-dessous pour empêcher le resolv.conf ou tout fichier de remplacer après le redémarrage

chattr -V + i nom de fichier par exemple chattr -V + i /etc/resolv.conf

Pour annuler la modification, utilisez la commande ci-dessous:

chattr -i filename - pour réactiver l'insertion dans le fichier

chattr (Change Attribute) est un utilitaire Linux en ligne de commande qui est utilisé pour définir / annuler certains attributs d'un fichier dans le système Linux pour sécuriser la suppression ou la modification accidentelle de fichiers et dossiers importants, même si vous êtes connecté en tant qu'utilisateur root.

Ashish Jain
la source
Je crois que l'utilisateur dans la question a effectivement essayé chattr, mais a observé que cela n'avait aucun effet.
Kusalananda
Cela fonctionnera à coup sûr, L'option que l'utilisateur a essayé est de modifier le fichier et non de le rendre immuable
Ashish Jain
Veuillez exécuter la commande avec sudo chattr -V + i nom de fichier par exemple sudo chattr -V + i /etc/resolv.conf
Ashish Jain
-1

Sur Ubuntu 18.04 à l'aide de NetworkManager. Vous devez supprimer le fichier «resolv.conf» et laisser NetworkManager en générer un pour vous.

Pour supprimer le fichier dans le type de terminal sudo rm -f /etc/resolv.conf; cela supprimera le fichier pour vous.

Redémarrez le système et NetworkManager générera un fichier resolv.conf pour vous.

mabvutosicho
la source