Comment conserver les options de resolv.conf telles que la rotation, le délai d'expiration dans CentOS?

9

CentOS effacera toutes les modifications manuelles apportées /etc/resolv.confpériodiquement. Les valeurs par défaut sous Linux sont médiocres en termes de basculement dans un délai raisonnable (interroger les serveurs de noms dans le même ordre à chaque fois, délai d'expiration de 5 secondes, 2 tentatives).

Par conséquent, le premier DNS de votre resolv.confest essentiellement un chemin critique. S'il échoue, vous pouvez regarder 10 secondes avant de basculer.

Ces valeurs par défaut sont modifiables (voir la page de manuel resolv.conf ), mais comment des modifications peuvent-elles être rendues permanentes dans CentOS et persister pendant les redémarrages, etc.?

Adam C
la source

Réponses:

12

La réponse se trouve dans /sbin/dhclient-script:

if [ -n "${RES_OPTIONS}" ]; then
    echo "options ${RES_OPTIONS}" >> ${rscf}
fi

Mais, il n'est pas très évident où vous pouvez définir RES_OPTIONSpour que le script le récupère - certaines choses comme le domaine de recherche peuvent être définies dans le ifcfg-ethXfichier, mais les options du résolveur sont définies ailleurs. Le fichier que vous voulez est en fait /etc/sysconfig/network. Pour définir les options pertinentes, ajoutez quelque chose comme cette ligne à ce fichier:

RES_OPTIONS="rotate timeout:1 retries:1"

Cela définira le délai d'expiration sur 1 seconde, utilisera une seule nouvelle tentative et indiquera au client de faire pivoter ses résolveurs par demande au lieu de parcourir la liste de manière séquentielle à chaque fois.

Si vous souhaitez que les modifications prennent effet immédiatement, lancez une service network restartcommande et découvrez votre nouvelle /etc/resolv.confdans toute sa splendeur. Voici à quoi ressemblait le mien lors du test:

# cat /etc/resolv.conf 
; generated by /sbin/dhclient-script
search example.com
options rotate timeout:1 retries:1
nameserver 10.1.1.2
nameserver 10.1.1.1
Adam C
la source
1

La réponse acceptée est lors de l'utilisation de scripts de mise en réseau hérités. Si vous utilisez NetworkManager, vous n'en aurez peut-être même pas /etc/sysconfig/network, et si vous le faites, il ne sera toujours pas utilisé pour les connexions gérées par NetworkManager .

Si vous utilisez NetworkManager :

Pour ajouter des options, par exemple en ajoutant rotateà bond0:

nmcli con mod bond0 +ipv4.dns-options rotate

Pour supprimer cette option:

nmcli con mod bond0 -ipv4.dns-options rotate

Il +est également bon de changer les options; NetworkManager est suffisamment intelligent pour détecter les options existantes et les mettre à jour. Par exemple, en modifiant la valeur du délai d'attente:

root@debian:~# nmcli con show bond0 |grep ipv4.dns-options
ipv4.dns-options:                       "rotate,timeout:5"
root@debian:~# nmcli con mod bond0 +ipv4.dns-options timeout:3
root@debian:~# nmcli con show bond0 |grep ipv4.dns-options
ipv4.dns-options:                       "rotate,timeout:3"

Cela signifie que la valeur est ignorée pour la suppression et n'est même pas nécessaire. Pour supprimer le délai d'expiration:

nmcli con mod bond0 -ipv4.dns-options timeout

Cela fonctionnera également avec une valeur de délai d'attente, mais cette valeur sera ignorée , donc la suppression timeout:5supprimera également toute autre valeur de délai d'attente.

NB: En examinant cela, je suis tombé sur un bogue connexe qui a été corrigé dans network-manager v1.14.6 , v1.15.2-dev et v1.16 . Si vous rencontrez un problème, vérifiez d' abord la version de votre gestionnaire de réseau .

Thomas Guyot-Sionnest
la source
1
Lorsque vous ajoutez une nouvelle réponse à une ancienne réponse acceptée, il est judicieux de noter l'âge d'une question et d'une réponse. Ce qui est considéré comme héritage maintenant ne l'était pas nécessairement il y a plus de 4 ans lorsque la question a été posée. Plutôt que de marquer comme hérité, si vous avez noté quand les valeurs par défaut ont changé (quelle version CentOS - 8 peut-être?), Puis avez ajouté vos informations, ce serait une réponse beaucoup plus utile. Vous pouvez également demander à nouveau et répondre à votre propre version (pour les versions CentOS plus récentes ou lorsque vous utilisez Network Manager par exemple) et lier à cette ancienne version pour référence.
Adam C
L'ancienne méthode est peut-être encore valable ... NetworkManager existe depuis longtemps, mais vous pouvez toujours configurer l'ancienne méthode dans Debian et CentOS.
Thomas Guyot-Sionnest
0

Si vous devez le faire avec des fichiers plats plutôt qu'avec des nmclicommandes (comme avec un outil de gestion de configuration), Red Hat fournit une autre solution.

Créez un script /etc/NetworkManager/dispatcher.d/15-resolvqui copie une personnalisation /etc/resolv.confen place.

#!/bin/bash
#
# Description : script to override default resolv.conf file
# with customized file.
cp -f /etc/resolv.conf.custom /etc/resolv.conf

Après avoir redémarré NetworkManager, ce script sera exécuté, en remplaçant le fichier par le vôtre.

https://access.redhat.com/solutions/61921

Aaron Copley
la source
0

Vous pouvez dire à NetworkManager de ne pas gérer le /etc/resolv.conffichier tous ensemble.

  1. Créez le /etc/NetworkManager/conf.d/90-dns-none.conffichier avec le contenu suivant:

    [main]
    dns=none
    
  2. Rechargez le service NetworkManager:

    systemctl reload NetworkManager
    

La documentation dont il s'agit a une deuxième solution qui consiste à remplacer /etc/resolv.confpar un lien symbolique vers votre fichier.

Lisez ceci: 22. Configuration manuelle du fichier /etc/resolv.conf

Aaron Copley
la source
-1

Ajoutez simplement

resolv_conf_options=rotate\ timeout:1\ retries:1

dans ton resolvconf.conf

Evgeny F
la source
Vous êtes sûr que c'est une option dans CentOS (vous avez un lien vers des documents / quelque chose pour le montrer)? Je le vois comme une option FreeBSD et Ubuntu mais je ne le trouve pas dans CentOS
Adam C
Cela fait partie du package openresolv
Evgeny F
1
cela ne semble pas être un package standard, donc pas vraiment une option pour CentOS, en particulier dans les environnements contrôlés, pas une mauvaise option ailleurs cependant
Adam C
-3

J'ai rencontré le même problème la dernière fois avec mon nouveau VPS Linux souscrit. Comment je l'ai résolu était d'utiliser la commande chattr + i pour rendre le fichier immuable. Accédez simplement au dossier / etc et exécutez-le après avoir apporté les modifications nécessaires au fichier resolv.conf:

chattr + i resolv.conf

Si vous souhaitez rétablir le paramètre, procédez comme suit:

chattr -i resolv.conf

Ligne directrice complète pour votre référence: http://boxtutor.com/fix-etcresolv-conf-is-not-saving-after-server-reboot/

Chuichi
la source
Ce serait un problème potentiel ici car il ne serait alors pas en mesure de détecter les modifications apportées aux serveurs de noms à partir de DHCP - cela ne changerait pas souvent, mais je voudrais quand même que cela fonctionne
Adam C