¿Cómo persistir las opciones resolv.conf como rotar, tiempo de espera en CentOS?

9

CentOS eliminará cualquier cambio manual realizado /etc/resolv.confperiódicamente. Los valores predeterminados en Linux son pobres en términos de conmutación por error en un tiempo razonable (consulta los servidores de nombres en el mismo orden cada vez, 5 segundos de tiempo de espera, 2 reintentos).

Por lo tanto, el primer DNS en su resolv.confes esencialmente ruta crítica. Si falla, puede mirar 10 segundos antes de fallar.

Estos valores predeterminados son modificables (consulte la página del manual resolv.conf ), pero ¿cómo se pueden hacer cambios permanentes en CentOS y persistir durante los reinicios, etc.?

Adam C
fuente

Respuestas:

12

La respuesta se puede encontrar en /sbin/dhclient-script:

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

Pero, no es terriblemente obvio dónde se puede configurar RES_OPTIONSpara que el script lo recoja: algunas cosas como el dominio de búsqueda se pueden configurar en el ifcfg-ethXarchivo, pero las opciones de resolución se establecen en otro lugar. El archivo que quieres es de hecho /etc/sysconfig/network. Para configurar las opciones relevantes, agregue algo como esta línea a ese archivo:

RES_OPTIONS="rotate timeout:1 retries:1"

Eso establecerá el tiempo de espera en 1 segundo, use un solo reintento y dígale al cliente que gire sus resolvers por solicitud en lugar de ir secuencialmente por la lista cada vez.

Si desea que los cambios surtan efecto de inmediato, emita un service network restartcomando y revise su nuevo /etc/resolv.confen todo su esplendor. Así es como se veía el mío al probar esto:

# 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
fuente
1

La respuesta aceptada es cuando se usan scripts de redes heredados. Si usa NetworkManager, es posible que ni siquiera lo tenga /etc/sysconfig/network, y si lo hace, aún no se usará para las conexiones administradas por NetworkManager .

Si usa NetworkManager :

Para agregar opciones, por ejemplo, agregar rotatea bond0:

nmcli con mod bond0 +ipv4.dns-options rotate

Para eliminar esa opción:

nmcli con mod bond0 -ipv4.dns-options rotate

También +es bueno cambiar las opciones; NetworkManager es lo suficientemente inteligente como para detectar opciones existentes y actualizarlas. Por ejemplo, cambiando el valor del tiempo de espera:

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"

Esto significa que el valor se ignora para eliminar y ni siquiera es necesario. Para eliminar el tiempo de espera:

nmcli con mod bond0 -ipv4.dns-options timeout

También funcionará con un valor de tiempo de espera, pero ese valor se ignorará , por lo que eliminar timeout:5también eliminará cualquier otro valor de tiempo de espera.

NB: Al investigar esto, me encontré con un error relacionado que se corrigió en network-manager v1.14.6 , v1.15.2-dev y v1.16 . Si encuentra algún problema, compruebe primero la versión de su administrador de red .

Thomas Guyot-Sionnest
fuente
1
Al agregar una nueva respuesta a una vieja respuesta aceptada, es una buena idea tener en cuenta la antigüedad de una pregunta y una respuesta. Lo que se considera legado ahora no era necesariamente así hace más de 4 años cuando se hizo la pregunta. En lugar de etiquetar como heredado, si observara cuándo cambiaron los valores predeterminados (¿qué versión de CentOS - 8 quizás?) Y luego procedió a agregar su información, sería una respuesta mucho más útil. Alternativamente, vuelva a preguntar y responda su propia versión (para las versiones más recientes de CentOS o cuando use Network Manager, por ejemplo) y vincule a esta versión anterior como referencia.
Adam C
Sin embargo, la antigua forma puede ser válida ... NetworkManager ha existido durante mucho tiempo, pero aún puede configurar la antigua forma en Debian y CentOS.
Thomas Guyot-Sionnest
0

Si necesita hacer esto con archivos planos en lugar de nmclicomandos (como con una herramienta de administración de configuración) Red Hat proporciona otra solución.

Cree un script /etc/NetworkManager/dispatcher.d/15-resolvque copie una costumbre /etc/resolv.confen su lugar.

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

Después de reiniciar NetworkManager, se ejecutará este script, reemplazando el archivo con el suyo.

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

Aaron Copley
fuente
0

Puede decirle a NetworkManager que no administre el /etc/resolv.confarchivo por completo.

  1. Cree el /etc/NetworkManager/conf.d/90-dns-none.confarchivo con el siguiente contenido:

    [main]
    dns=none
    
  2. Vuelva a cargar el servicio NetworkManager:

    systemctl reload NetworkManager
    

La documentación de la que proviene tiene una segunda solución que consiste en reemplazar /etc/resolv.confcon un enlace simbólico a su archivo.

Lea esto: 22. Configuración manual del archivo /etc/resolv.conf

Aaron Copley
fuente
-1

solo agrega

resolv_conf_options=rotate\ timeout:1\ retries:1

en tus resolvconf.conf

Evgeny F
fuente
¿Seguro que es una opción en CentOS (tiene un enlace a documentos / algo para mostrarlo)? Lo veo como una opción de FreeBSD y Ubuntu, pero no lo encuentro en CentOS
Adam C
Es parte del paquete openresolv
Evgeny F
1
eso no parece ser un paquete estándar, por lo que no es realmente una opción para CentOS, especialmente en entornos controlados, aunque no es una mala opción en otro lugar
Adam C
-3

Enfrenté el mismo problema la última vez con mi nuevo VPS de Linux suscrito. Lo que resolví fue usar el comando chattr + i para hacer que el archivo sea inmutable. Simplemente vaya a la carpeta / etc y ejecútelo después de haber realizado los cambios necesarios en el archivo resolv.conf:

chattr + i resolv.conf

Si desea revertir la configuración, simplemente haga esto:

chattr -i resolv.conf

Guía completa para su referencia: http://boxtutor.com/fix-etcresolv-conf-is-not-saving-after-server-reboot/

Chuichi
fuente
Eso sería un problema potencial aquí porque sería incapaz de detectar cambios en los servidores de nombres de DHCP; no cambiaría con frecuencia, pero aún así quisiera que funcionara
Adam C