¿Cómo obtengo resolvconf para regenerar resolv.conf después de cambiar / etc / network / interfaces?

77

Después de actualizar /etc/network/interfaces con algo muy similar a la siguiente, ¿cómo obtengo /etc/resolv.conf para actualizar? Intenté (como root) resolver -u , service networking restart pero no funcionaron. También arreglé el enlace simbólico para resolv.conf y probé resolver -u nuevamente. Finalmente, frustrado, reinicié, lo que solucionó el problema reconstruyendo /etc/resolv.conf .

Ubuntu 12.04, servidor de 64 bits, todos los últimos parches instalados.

Ejemplo /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
    
pregunta nslntmnx 03.12.2012 - 12:59

9 respuestas

94

service networking restart no siempre es una forma confiable de bajar todas las interfaces.

El comando resolvconf -u solo actualiza resolv.conf de la propia base de datos de resolvconf. Necesita actualizar la base de datos.

Para actualizar la base de datos debe llamar a resolvconf con la opción -a o -d . Eso sucede detrás de escena cuando ejecuta ifup o ifdown. Por lo tanto, normalmente, como con cualquier otro cambio en /etc/network/interfaces , para activar los cambios a las opciones dns- * tienes que bajar la interfaz en cuestión y volver a hacerlo. O puede reiniciar.

Si desea realizar cambios en una interfaz sin detenerla (quizás porque está administrando la máquina de forma remota y está conectado a través de esa interfaz, natch), puede obtener el mismo resultado ejecutando resolvconf directamente desde la línea de comando. . Esto requiere un poco más de conocimiento de la semántica de resolvconf. Supongamos que la estrofa / e / n / i relevante es

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS

donde FFFF es una familia de direcciones ("inet" o "inet6").

Para activar estas opciones dns- *, ejecute resolvconf de la siguiente manera (sí, con nuevas líneas en la cadena canalizada a resolvconf).

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF

Para la estrofa dada en la pregunta, esta sería la siguiente.

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

Consulte la página del manual resolvconf (8) y el archivo README del paquete resolvconf (/usr/share/doc/resolvconf/README.gz) para obtener más información.

    
respondido por el jdthood 03.12.2012 - 19:23
20

Aunque la página de manual no está instalada por defecto, está documentada a través de la opción de scripts de actualización, solo ejecuta:

sudo resolvconf -u
    
respondido por el user267617 10.04.2014 - 21:32
3

Para aquellos de ustedes que administran sus servidores de forma remota, pueden:

  1. actualiza la línea dns-nameservers en /etc/network/interfaces
  2. # ifdown eth01; ifup eth01

Observe que esto tiene que estar en una línea dividida con; (el separador de línea de comandos de Linux). Ni siquiera deberías perder tu conexión actual. La excepción es crear un error tipográfico en el archivo de interfaces. Si esto sucede ifup fallará y tendrá que tener acceso físico u otra conexión ethxx .

    
respondido por el sparky 23.01.2015 - 23:14
2

service resolvconf restart regenerará el archivo /etc/resolv.conf sin mucho alboroto.

    
respondido por el Kamran 10.02.2016 - 14:03
0

Esta respuesta es similar a la anterior pero usa la configuración de ejemplo de preguntas para responder la pregunta. Además, esto explica por qué ambos comandos son necesarios.

Editar /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

Estos cambios no se llevarán a cabo a menos que reinicies o recargues el archivo de configuración:

Para actualizar el archivo de interfaces en vivo, es necesario ejecutar el siguiente comando:

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

Esto permite una actualización de la interfaz sin un reinicio o recarga.

Sin embargo, los cambios de comando anteriores se perderán después de un reinicio si los cambios en el /etc/network/interfaces no se realizan.

Por cierto, la última respuesta de BDenis en esta lista realmente funciona en lugar del último comando al analizar el archivo /etc/network/interfaces y conectar esas líneas al comando sudo resolvconf -a eth0 . Es en realidad la mitad de la respuesta y un muy buen ejemplo de análisis de sed en línea. Si desea ver cómo funciona, ejecute la primera parte del comando y observe cómo analiza el archivo /etc/network/interfaces y escupir toda la información necesaria para ejecutar el comando sudo resolvconf -a eth0 :

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

Observe que esto produciría la misma salida que el comando:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

Siempre que el archivo /etc/network/interfaces esté configurado con esta información:

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
    
respondido por el user3199107 22.06.2015 - 21:37
0

Respuesta simple:

Simplemente instale resolvconf. apt install resolvconf

Después de eso, ifup eth0 actualiza el dns en etc/resolv.conf , de acuerdo con la línea dns-nameservers en /etc/network/interfaces .

    
respondido por el trogne 02.05.2017 - 23:14
0

Esto funcionó para mí:

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

Ajuste en consecuencia.

    
respondido por el jbgeek 07.09.2017 - 23:21
0

El 18.04, el siguiente funciona confiablemente (se ejecuta como root):

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

Importante: asegúrese de tener el paquete resolvconf instalado.
No parece ser por defecto, y sin él algunos (!) Cambios de /etc/network/interfaces se ignoran silenciosamente (por ejemplo, dns-* ).

    
respondido por el Raphael 09.05.2018 - 11:49
-3

También puedes probar este comando:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet
    
respondido por el BDenis 09.10.2014 - 13:07

Lea otras preguntas en las etiquetas