¿Cómo incluyo líneas en resolv.conf que no se perderán al reiniciar?

174

Finalmente he migrado a 12.04 desde 7.10. Tengo una última parte para completar, pero estoy perplejo. Estoy usando Puppet en cada servidor, y en el pasado he incluido una dirección de servidor de nombres y un nombre de dominio de búsqueda para el puppetmaster en resolv.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

En 12.04 resolv.conf se sobrescribe cuando se reinicia. No puedo usar una IP estática para estos, por lo que usar las interfaces / etc / network / para ayudarme es un punto nulo.

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1

¿Hay alguna manera de obtener resolvconf para manejar esto en la cabeza, la cola o la base? Si es así, ¿hay algún ejemplo que pueda usar para modificar mi servidor?

Cualquier ayuda es muy apreciada.

Sam
fuente
2
resolvconf es un mal software, simplemente elimínelo y administre /etc/resolv.conf de la manera anterior.
hombre de bronce

Respuestas:

134

Probablemente sea mejor que su servidor DNS pueda resolver 'títere' a la dirección correcta, y que su servidor DHCP entregue la dirección del servidor de nombres DNS y la lista de búsqueda o de lo contrario (si tiene direcciones IP estáticas) para tener algo como lo siguiente en / 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

Pero si desea hacerlo a través de los archivos de configuración resolvconf, querrá editarlo /etc/resolvconf/resolv.conf.d/base. En ese archivo, ingrese su información como lo haría en resolv.conf.

nameserver 192.168.1.XXX

Luego dile a resolvconf que se regenere resolv.conf.

sudo resolvconf -u
tgm4883
fuente
13
Aunque esta respuesta tiene votos, y la primera parte es más o menos correcta, la segunda parte de la respuesta es incorrecta. (1) No No poner una línea de "búsqueda" en /etc/resolvconf/resolv.conf.d/head. Si coloca una línea de "búsqueda" allí, esta línea se ignorará si resolvconf incluye una línea de "búsqueda" en la parte dinámica del archivo resolv.conf. El solucionador glibc ignora todos excepto la última línea de "búsqueda" o "dominio". Ver resolv.conf (5). (2) Si se cambia la configuración de resolvconf, no debe reiniciar el trabajo resolvconf sino simplemente ejecutar una actualización, "resolvconf -u".
jdthood
1
He eliminado la línea. La otra opción sería usar cola en lugar de cabeza.
tgm4883
66
@tishma: Hola. Primero, para evitar cualquier malentendido: nada escribe en los archivos base, head o tail. Nada escribe en ningún archivo en /etc/resolvconf/resolv.conf.d/ en tiempo de ejecución. Resolvconf lee estos archivos, que reúne su contenido en el archivo que escribe --- /run/resolvconf/resolv.conf --- al que apunta el enlace simbólico /etc/resolv.conf. Segundo, sobre qué hacer después de cambiar las opciones dns- * en / etc / network / interfaces. No , no correr "/etc/init.d/networking reinicio"; eso ahora está en desuso. En su lugar, desactiva la interfaz en cuestión y vuelve a activarla.
jdthood el
44
En 14.04 esta respuesta no hizo nada para mí.
Jay Sullivan
2
Si todo lo demás falla ... $ sudo resolveconf -u no pareció cambiar las cosas para mí, reinició la máquina, presto.
MSpreij
35

Creo que la respuesta es verificar su /etc/dhcp/dhclient.conf, es decir, no solicitarlo dns-nameserversa su cliente dhcp .

Luego actualice su /etc/network/interfaces

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

Luego resolv.conf, se configurará automáticamente de la manera que lo desee.

Agregue al dns-searchy luego ejecute un /etc/init.d/networking restart (a pesar de que este script está en desuso, todavía funciona).

Jamin
fuente
55
dhclient gobierna sobre cualquier configuración resolvconf, por lo que esta debería ser la mejor respuesta.
Alex R
66
/etc/init.d/networking restartNo funcionó en mi máquina, pero sudo ifdown -ay luego lo sudo ifup -ahizo. (Además, me tomó un poco darme cuenta de que tenía que reemplazarlo dnsserveripcon algo así 8.8.8.8; me siento un poco tonto)
Jason Gross,
intentarsystemctl restart networking.service
Pavel Sayekat
20

Esto probablemente se deba a la configuración de DHCP cuando instaló Ubuntu por primera vez. Pruebe este proceso de 3 pasos para manejar este problema de configuración automática.

primero

Edite la configuración de su interfaz, que se encuentra en: /etc/network/interfaces

Agregue esta línea a continuación iface lo inet loopback:

dns-nameservers yourdns youraltdns

Como ejemplo para Google DNS, es posible que desee utilizar esto:

dns-nameservers 8.8.8.8 8.8.4.4

Segundo

Edite su archivo de configuración de DHCP, ubicado en:

/etc/dhcp/dhclient.conf

Marque la sintaxis como un comentario utilizando #en cada línea o simplemente elimine cada servidor de nombres de solicitud. En 16.04, es posible que no se le solicite realizar ningún cambio aquí.

Tercero

Reinicie su red usando este comando:

/etc/init.d/networking restart

En 16.04:

sudo ifdown -a
sudo ifup -a
astrajingga
fuente
3
/etc/init.d/networking restartNo funcionó en mi máquina, pero sudo ifdown -ay luego lo sudo ifup -ahizo.
Jason Gross
¡Esto es simple y funciona aunque sea un poco hacky! ¡El problema con cosas como ubuntu es tener 1000 formas de hacer una cosa!
Willa O Ng'wana
Y luego puede verificar que /etc/resolv.conf contenga esas 2 nuevas entradas DNS en las primeras líneas útiles.
ROMANIA_engineer
8

Por favor, mire resolvconfla página del manual. Puede forzar la inclusión de ciertas configuraciones de DNS creando, por ejemplo /etc/resolvconf/resolv.conf.d/base:

  /etc/resolvconf/resolv.conf.d/base
          File containing basic resolver information.  The lines  in  this
          file  are  included in the resolver configuration file even when
          no interfaces are configured.

Hay otros archivos especiales (cabeza y cola), estos pueden ayudarlo a lograr lo que desea.

roadmr
fuente
44
Puede agregar líneas a /etc/resolvconf/resolv.conf.d/base, pero dado que cada servidor de nombres es accesible a través de una interfaz y es accesible solo cuando esa interfaz está activa, lo mejor es asociar la información del servidor de nombres con esa interfaz. Si la interfaz está configurada con ifup, esto significa: coloque la información en las líneas "dns-search" y "dns-nameservers" en / etc / network / interfaces stanzas. Si la interfaz se configura a través de DHCP, esto significa: configurar el servidor DHCP para proporcionar nombres de búsqueda y direcciones de servidor de nombres a los clientes. Etc. Utilice el archivo "base" solo como un truco temporal o como último recurso.
jdthood
Sí. Agregué "nameserver 1.2.3.4" en /etc/resolvconf/resolv.conf.d/base
Bastión
8

Como muchas otras respuestas indican, esto tiene que ver con la resolvconfinstalación en su sistema.

Entonces, la mejor manera de mantener algo resolv.confque no se perderá al reiniciar es incluirlo en los archivos de configuración resolvconf que se encuentran en:

/etc/resolvconf/resolv.conf.d/

Ahí va el headarchivo. Lo que pones allí se escribirá en la parte superior de/etc/resolv.conf

Entonces todo irá a algo como esto:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u
Juan Javier Triff Cabanas
fuente
Esta es la respuesta correcta real! ¡Finalmente!
user77232
6

Para mí, las respuestas anteriores fueron inadecuadas por las siguientes razones:

  • No estoy usando resolvconf, simplemente /etc/resolv.conf.
  • Usar chattr +ipara bloquear resolv.confparece demasiado hacky. Necesito que Puppet sea libre de hacer cambios cuando sea necesario.
  • AFAIK, la edición /etc/network/interfacesno evita que resolv.confse sobrescriba; simplemente especifica los servidores de nombres que deben escribirse. Para mí, especificar los servidores de nombres no era el punto. Estoy tratando de configurar options timeout:1y options attempts:1en mi resolv.confarchivo.

La mejor solución que encontré anula el comportamiento predeterminado de dhclientusar sus ganchos documentados.

Cree un nuevo archivo en /etc/dhcp/dhclient-enter-hooks.d/nodnsupdatecon los siguientes contenidos:

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

Luego haga que el archivo sea ejecutable:

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

Ahora, cuando se ejecuta dhclient, ya sea al reiniciar o cuando se ejecuta manualmente sudo ifdown -a ; sudo ifup -a, carga este script nodnsupdate. Este script anula una función interna llamada make_resolv_conf()que normalmente sobrescribiría resolv.confy, en cambio, no hace nada.

Esto funcionó para mí en Ubuntu 12.04.

richardkmiller
fuente
1
Funciona bien en Debian 8. ¡Solución elegante!
Artur Bodera
1
solo para completar: la página de manual dhclient-script contiene la información sobre la secuencia de comandos de configuración de red del cliente DHCP mencionada y la respuesta anterior.
hecke
Esto no funcionó en 16.04, agregué cosas a /etc/network/interfaces.d también, sin efecto, agregué una anulación vacía de make_resolv_conf recomendado aquí, sin efecto ... pero no modifiqué / etc / dhcp / dhclient.conf: ¿realmente necesito modificar un archivo de configuración estático para solucionar esto?
silverjam
3

Esto puede ser una peculiaridad extraña en mi máquina, pero alguien más podría tener el mismo caso de esquina.

Intenté numerosas formas de incluir mis servidores de nombres de ISP en /etc/resolv.conf sin éxito:

  • Los incluí /etc/network/interfacesy reinicié las redes. No aparecieron en /etc/resolv.conf.

  • Los puse /etc/resolv.confexplícitamente, pero por supuesto se sobrescribieron. Aparecieron /run/resolvconf/interface/eth0.inet, pero nunca llegaron /etc/resolv.conf.

  • Intenté configurar resolvconf para actualizaciones dinámicas. Ningún cambio.

Finalmente leí en alguna parte que si la máquina local (127.0.0.1) aparece en /etc/resolv.confcualquier otro servidor de nombres no está incluido.

En su desesperación, he editado /run/resolvconf/interface/lo.named, eliminado la única línea en el mismo ( nameserver 127.0.0.1) y reiniciado: ifdown eth0 && ifup eth0.

¡/etc/resolv.conf incluyó mis servidores de nombres de ISP por primera vez! Corrí service network-manager restartpara ver si era estable y /etc/resolv.conftodavía incluye mis servidores de nombres ISP. Reinicia sólo para asegurarse y que sigue allí , pero /run/resolvconf/interface/lo.named consiguió restablecer a: nameserver 127.0.0.1.

Curiosamente, reiniciar las redes aún funciona: /etc/resolv.conftodavía contiene mis servidores de nombres de ISP. No puedo explicar esto (¿alguien puede hacerlo?) Pero esto podría ayudar a alguien atrapado en el mismo lugar.

usuario297954
fuente
Esto es probablemente causado por dnsmasq. Simplemente puede eliminarlo usando apt-get remove dnsmasqo actualizar config en /etc/dnsmasq.conf.
Tombart
2

agregue su servidor de nombres al archivo /etc/resolvconf/resolv.conf.d/head. El archivo contiene un mensaje que recibió:

ese archivo debería verse así después de agregar 8.8.8.8

root@hvnatvcc: ~ # cat /etc/resolvconf/resolv.conf.d/head 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
HVNSweeting
fuente
3
Agregar líneas a /etc/resolvconf/resolv.conf.d/head es una solución deficiente, incluso peor que agregar líneas a /etc/resolvconf/resolv.conf.d/base. La solución correcta para las interfaces configuradas usando ifup es agregar líneas "dns-search" y "dns-nameservers" a las estrofas en / etc / network / interfaces. Vea también mis comentarios sobre las otras respuestas.
jdthood
3
Es lo único que realmente funcionó para mí ... y parece difícil entender por qué ninguna de las soluciones "correctas" está funcionando.
silverjam
1

agregar en la última línea, por ejemplo:

nameserver 8.8.8.8

Abre una terminal y escribe

sudo chattr +i /etc/resolv.conf

el + i se encarga de que el archivo no se restablezca en un arranque.

Para deshacer lo anterior

sudo chattr -i /etc/resolv.conf

Para más

man chattr
tanmay.01
fuente
1

Las otras soluciones no me funcionaron en mi sistema Fedora 20. Mi problema particular era que la línea de "búsqueda" en /etc/resolv.conf se estaba sobrescribiendo. Esto es lo que lo solucionó. (Esto supone que NetworkManager está produciendo la línea search rn.yourcompany.com y desea que sea search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1.Utilice el comando "ifconfig" para averiguar qué interfaz es de interés:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

Conviértase en root y cambie al directorio de dispositivos de red de configuración del sistema:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. Use su editor disponible favorito para agregar una Domainlínea con los dominios adicionales para buscar:

DOMAIN="yourcompany.com intnet.yourcompany.com"

Guardar, cerrar sesión y volver a iniciar sesión. NetworkManager ahora debería tener la línea en \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com
CBI
fuente
3
No para llover en tu desfile, pero esto es Ask Ubuntu, por lo que Fedora está fuera de tema.
Flimm
1

Agregar entradas en /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

y ejecuta el siguiente comando

sudo resolvconf -u
siz
fuente
0

Si está utilizando DHCP, edite /etc/dhcp/dhclient.confpara agregar servidores DNS adicionales:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

El cliente DHCP sobrescribe el dns-nameserversen etc/network/interfacesy creo que en /etc/resolvconf/resolv.conf.d/basetambién.

Esto funcionó para mí en el servidor Ubuntu 14.04.3.

Vea el Wiki de Debian NetworkConfiguration para más detalles.

Kevin S. Miller
fuente
0

Simplemente haga una copia de seguridad de resolve.conf y elimine el paquete resolvconf y edite el archivo /etc/resolv.conf a lo que desee.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Deberíamos tener derecho a elegir no usar software malo como resolvconf.

Por cierto, el campo de búsqueda en /etc/resolv.conf es inútil.

hombre de bronce
fuente
0

Uso resolvconfy desactivación systemd-resolved.service(esto funciona para mí ubuntu 19.04):

  1. Instalar en pc resolvconf

    sudo apt install resolvconf
    
  2. Agregar servidores de nombres

    Abre /etc/resolvconf/resolv.conf.d/basecon tu editor de texto, yo uso vim.

    sudo vim /etc/resolvconf/resolv.conf.d/base
    

    luego, agregue los servidores de nombres dentro del archivo abierto, por ejemplo:

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. Actualización resolv.conf

    sudo resolvconf -u
    
  4. Deshabilitar systemd-resolved.servicey reiniciar. nameserver 127.0.0.53No se escribe /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

¡Hecho!

Fuente

Bania J. Fonseca
fuente
¿Podría especificar para qué versión de Ubuntu hizo esto? La pregunta original se refiere a ubuntu 12.04, desde hace mucho tiempo en desuso.
Marc Vanhoomissen
0

Encontré esto la solución más simple. Si usted tiene resolv.confy resolvconfarchivos van a pisar el uno al otro. Debe eliminar el resolv.confarchivo que se obtiene y sobrescribir cada vez que reinicia.

Ponga la nameserver 1.1.1.1 1.0.0.1parte inferior del archivo resolvconf y luego ejecute

sudo rm /etc/resolv.conf

Para deshacerse del archivo. Luego reinicie y todo funcionará.

Irv
fuente
0

Mi solución el 12.04:

Noté que si agrega el dns-nameserver en interfaces que no toman los servidores de resolución de nombres

página del manual resolvconf

Para que resolv.conf no cambie cuando editamos manualmente, haga esto en la terminal:

sudo resolvconf –disable-updates

después:

sudo resolvconf -a eth0 # or your network interface

luego edite manualmente /run/resolvconf/resolv.confagregando un máximo de dos servidores DNS.

Luego reinicie el servicio:

sudo /etc/init.d/networking restart
enlinea777
fuente
44
Esta no es la forma correcta de resolver el problema.
jdthood
1
@jdthood como alguien navegando por esto, ¿puedes explicar por qué esta no es la forma correcta? Me parece lógico, pero no sé nada de esto.
ErikPerik
-1

Solo pon un

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

comando en su /etc/network/interfacesconfiguración. luego reinicie su red.

deberia de funcionar.

tesar
fuente
-2

Esa configuración se declara en /etc/default/bind9

RESOLVCONF=no|yes

no = no aplique la condición en elinit.d bind9

, u otro valor = anularresolv.conf

Este problema se soluciona cuando instala bind9y no le importa verificar todas las confs.

usuario147967
fuente