web-dev-qa-db-fra.com

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

On m'a donné les fichiers d'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 en essayant de ping google.de ou wget google.de J'ai un bad address Erreur.

nslookup google.de fonctionne pour une raison quelconque.

J'ai suivi le problème jusqu'à mon resolv.conf sur le système démarré n'ayant pas le même contenu que le resolv.conf que j'ai mis dans le .iso fichier.

J'ai essayé de comprendre tous les facteurs qui entrent dans la création et la modification de 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 faire le resolv.conf fichier immuable utilisant

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

Lors de la reconstruction et du redémarrage à ma grande surprise, mon fichier a été renommé en 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 .iso dans Virtualbox sans accès à Internet, mon fichier est conservé tel quel.

J'ai essayé de changer /etc/dhcp/dhclient.conf pour ne pas obtenir les informations du net, en supprimant domain-name-server et domain-name-search à partir de la partie request 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 programme udhcpc. Un petit client DHCP, qui fait partie de busybox

Enquêtera plus avant.


MISE À JOUR2 ET SOLUTION:

J'ai commenté la partie (#Start to #End), qui écrase apparemment le /etc/resolv.conf fichier 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 réellement être connu pour résoudre mon problème, il serait donc plus facile de trouver pour les personnes ayant le même problème et donc je pourrais accepter une réponse.

Merci pour l'aide ici à comprendre les choses.

29
Minix

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 resolvconf et répondez "non" aux mises à jour dynamiques. Si vous souhaitez y ajouter de nouvelles entrées, modifiez /etc/resolvconf/resolv.conf.d/base et courir 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 restart ou Sudo ifdown -a et Sudo ifup -a

3) Votre système utilise dhcp 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 lire plus sur son utilisation ici ou simplement éditer ce script (comme vous l'avez fait).

27
kirill-a

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.conf fichier à chaque redémarrage du service réseau.

Vous pouvez résoudre le problème en modifiant le /etc/dhcp/dhclient.conf fichier et en ajoutant des instructions "remplacent" pour nom-domaine, recherche-domaine et serveurs-nom-domaine 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.

5
Sand1512

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

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

Je n'ai pas essayé d'utiliser chattr +i Pour verrouiller resolv.conf Car il semble trop hacky. De plus, je veux que Puppet puisse modifier resolv.conf Si nécessaire.

La meilleure solution que j'ai trouvée remplace le comportement par défaut de dhclient en utilisant ses hooks documentés.

Créez un nouveau fichier dans /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate Avec 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 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.conf Et ne fait rien.

Cela a fonctionné pour moi sur Ubuntu 12.04.

4
richardkmiller

Pour effectuer les modifications liées au DNS dans resolv.conf permanent, 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/

1
MAChitgarha

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.

0
user245423

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.

0
mabvutosicho

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

chattr -V +i filename e.g chattr -V +i /etc/resolv.conf

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

chattr -i filename - to re-enable insert to the file

chattr (Changer l'attribut) 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 accidentelle ou la modification de fichiers et dossiers importants, même si vous êtes connecté en tant que un utilisateur root.

0
Ashish Jain

Dans les machines virtuelles Azure /etc/resolv.conf n'est pas directement modifiable.

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

DOMAIN=example.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.

0
Krishan