¿Cómo agrego un servidor DNS a través de resolv.conf?

207

¿Es /etc/resolv.confinútil en Ubuntu 12.04 LTS (Precise Pangolin)?

Veo que la información del servidor DNS se almacena en NetworkManager ahora. La nmcliherramienta de línea de comandos puede enumerar eso por usted.

Si deseo agregar un servidor DNS más , ¿lo agregaré /etc/resolv.confusando la resolvconfayuda del paquete?

PnotNP
fuente
2
Creo que el comando mencionado anteriormente debería ser nm-tool, no nmcli.
Jesse Glick

Respuestas:

139

Si /etc/resolv.confcontiene, nameserver 127.0.0.1entonces agregar entradas a /etc/resolvconf/resolv.conf.d/tailrealmente no hará nada útil.

Si está utilizando NetworkManager, debe agregar estáticamente direcciones de servidor de nombres mediante el indicador de red : Editar conexiones ... | Editar ... | Configuración de IPv4 | Servidores DNS adicionales .

Si realmente desea agregar más entradas /etc/resolv.conf, cree una /etc/resolvconf/resolv.conf.d/taily agréguelas allí.

Al igual que con todas las versiones de Ubuntu, se recomienda leer las Notas de la versión de Ubuntu, disponibles aquí:

Las secciones Escritorio e Infraestructura común contienen un enlace a

Stgraber
fuente
1
@stgraber, comente sobre el enfoque alternativo que encontré y publiqué a continuación. ¿Cómo se compara con agregar un /etc/resolvconf/resolv.conf.d/tailarchivo o usar Network Manager? Gracias.
Randall Cook,
3
@stgraber ¿Qué recomiendas para Ubuntu Server? He notado en su blog y comentarios que Network-Manger parece ser la mejor manera de administrar esto, pero hacer una instalación de network-manager en mi sistema instalaría un montón de cosas que no necesito (es decir, cosas de GUI )
Avery Chan
1
¿Qué tal agregar entradas a /etc/resolvconf/resolv.conf.d/head (según su blog)?
Sup
3
@AveryChan, use el "tercer enfoque" sugerido por @ randallcook, solo agregue dns-nameserversa su sección eth0 en /etc/network/interfaces.
Sr.
1
/etc/resolvconf/update.d/libcen el servidor Ubuntu 14.04.1: # Set TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no # to allow additional nameserver addresses to be listed in # resolv.conf after an initial loopback address 127.* or ::1. ( configúrelo /etc/default/resolvconf, como las líneas 23 y 24 del /etc/resolvconf/update.d/libcprograma.
immeëmosol
134

Encontré otro enfoque aquí que implica agregar una línea como la siguiente para /etc/dhcp/dhclient.conf:

prepend domain-name-servers x.x.x.x, y.y.y.y;

Del mismo modo, encontré un tercer enfoque aquí que implica agregar líneas a /etc/network/interfaces:

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

Actualización: Aquí está la documentación oficial para el tercer enfoque.

Randall Cook
fuente
18
He votado a favor porque third approaches, con mucho, la forma más sencilla de hacerlo.
Billy Moon
1
@billy No pude lograr que el tercer método funcionara ... solo el primero que aparece aquí, editando dclient.conf, funcionó para mí.
Jeff Atwood
99
Nota: La edición de dhclient.conf solo tiene algún efecto si se usa dhclient (¡y lo usan tanto ifup como NetworkManager!) La edición / etc / network / interfaces solo tiene algún efecto si se usa ifup. La configuración de las conexiones de NetworkManager usando el editor de conexiones de NetworkManager solo tiene algún efecto si se usa NetworkManager.
jdthood
1
Si no me equivoco, el tercer enfoque agrega otro servidor de nombres DESPUÉS de los devueltos por DHCP. Si quiere que ocurra primero, entonces una de las otras opciones es más apropiada. Yo solía /etc/resolvconf/resolv.conf.d/head(después de superar el engañoso comentario "NO EDITAR" allí :))
starfry
1
@ Mr.Hyde, esos no son comandos de línea de comando, son líneas para agregar a / etc / network / interfaces.
Randall Cook, el
91

Parece que estás hablando del paquete resolvconf.

Instale el paquete resolvconf .

correr

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head

La parte superior del archivo es una advertencia aterradora. El archivo /etc/resolv.conf se genera automáticamente a partir del contenido de este archivo; la advertencia está ahí, por lo que se colocará en /etc/resolv.conf cuando se genere /etc/resolv.conf. Al final del archivo, agregue

nameserver <ip_of_nameserver>

Presione Ctrl xy responda sí para guardar el archivo. Para terminar, regenere /etc/resolv.conf para que los cambios se apliquen ahora:

sudo resolvconf -u

Luego verifique el contenido de /etc/resolv.conf para ver que la línea que agregó ahora está allí. Además, seguirá estando allí la próxima vez que su máquina se inicie o se reinicie su servicio de red, lo que ocurra primero.

Azendale
fuente
La información sobre la advertencia de archivo es justo lo que necesitaba. ¡Tenía la impresión de que no debería editar el archivo! ¡Gracias!
Xunnamius
¡Esta es la mejor respuesta para mí!
Siwei Shen 申思维
31

A continuación, le mostraré la mejor manera que he encontrado desde que ejecuté la edición de Ubuntu Server y uso ifup en lugar de NetworkManager.

En realidad para mí lo hicieron más fácil :) al ponerlo todo en el archivo / etc / network / interfaces. Las mismas configuraciones que habría escrito en resolv.conf ahora pueden estar en el mismo archivo que las configuraciones de su adaptador de red como en el siguiente ejemplo:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 75.75.75.75 75.75.76.76
        dns-search local

Espero que esto ayude y lo haga más fácil para mí, ahora podemos crear direcciones IP estáticas y agregar servidores de nombres y dominios DNS en un solo archivo :)

Joseph Mituzas
fuente
1
Gracias. Este también se ha convertido en mi método favorito. Una nota fuera de tema: no es necesario especificar las direcciones de 'red' y 'difusión' ya que se calculan automáticamente a partir de la 'dirección' y la 'máscara de red'. Todo lo que realmente necesita son 'dirección', 'máscara de red' y 'puerta de enlace'.
Martijn Heemels
Esta es la respuesta más limpia. Solo asegúrese de deletrear las palabras clave dns- * correctamente. Los "dns-nameservers" mal escritos fueron mi problema real.
John McGehee
18

El mío está ejecutando Ubuntu Server 12.04. Realicé los siguientes cambios y reinicié el servidor (por lo general, esto se puede hacer solo desactivando la interfaz de red, es decir, ifdown eth0o ifup eth0).

En el archivo /etc/resolvconf/resolv.conf.d/baseagregué las siguientes entradas:

nameserver 8.8.8.8
nameserver 8.8.4.4

¡Espero que lo de arriba ayude!

Don Chai
fuente
12

Puede usar NetworkManager como se indica en la respuesta de Frank, pero si prefiere editar manualmente /etc/resolv.conf, puede hacerlo eliminándolo (en realidad es un enlace simbólico) y luego creando un nuevo archivo sin formato con el contenido que desee. La resolvconfutilidad solo escribe en el archivo /run/resolvconf/resolv.conf.

Jase
fuente
9

Nota: Esta respuesta fue para una versión bastante diferente, previa a la fusión de la Pregunta, con un enfoque solo en pre-pendiente de un servidor de nombres deseado.

Esto funciona antes de 12.04:

Editar /etc/dhcp3/dhclient.confy agregar:
prepend domain-name-servers 127.0.0.1;

(De hecho, esta línea ya está presente; todo lo que necesita hacer es descomentarla).

belacqua
fuente
¿Funciona esto si no tiene ninguna dirección asignada por DHCP?
Azendale
Si desea obtener más información sobre la configuración de dhclient, puede hacerlo man dhclient.confpara acceder a la página de manual de dhclient. (Esto no es una respuesta a la pregunta de Azendale.)
Christian Skjødt
Esta respuesta es completamente incorrecta. En primer lugar, el remitente de la pregunta desea agregar la dirección de un servidor de nombres externo, no la dirección 127.0.0.1. El configurador de interfaz para una interfaz externa no es el lugar para agregar una dirección para un servidor de nombres interno. Segundo, el archivo está en / etc / dhcp, no en / etc / dhcp3. En tercer lugar, desde Ubuntu 12.04, estas cosas se configuran utilizando resolvconf.
jdthood
1
En primer lugar, la pregunta original fue dramáticamente cambiada por la fusión del moderador, por lo que mi respuesta, por supuesto, parece extraña. El archivo dhcp3 era la ubicación cuando respondí esto en 2011 , e incluso si no es ideal, funcionó. He usado esta solución en varias máquinas. Obviamente, cambiaría la dirección de bucle invertido a la que desea anteponer. Supongo que la mayoría de la gente sabe qué es un loopback, incluso si no han leído RFC6890.
belacqua
@jdthood ¿Por qué no agrega su propia respuesta? Personalmente, no estaba familiarizado con la forma de hacer las cosas bsd-ish resolvconf. Preferí el enfoque directo /etc/resolv.conf, y no estoy seguro de cuál es la ventaja del nuevo sistema Rube Goldberg. (Del mismo modo con / etc / motd).
belacqua
7

resolvconfes inútil Estoy en un servidor Linux y mi dirección IP es estática y mis servidores DNS son estáticos. No necesito resolvconfni NetworkManager .

Mantenerlo simple es mi política cuando trabajo en un servidor. Cuanto menos complejidad, más fácil será administrar / arreglar cuando las cosas se rompan.

Así que lo hice aptitude purge resolvconfy me aseguré manualmente de que /etc/resolv.confno sea un enlace simbólico y simplemente creé un archivo estático. En caso de que un programa intente cambiar el archivo, lo hice chattr +i(inmutable) /etc/resolv.confcomo medida de precaución.

marca
fuente
44
Como resolvconf es parte del sistema base, al eliminarlo está solicitando problemas en el futuro, en el momento de la actualización.
jdthood
3
Estoy de acuerdo con el comentario y la respuesta: considere cuántos problemas ha causado esto, y cuántas horas de soporte se han dedicado a solucionar este "problema", y cuánto personal de TI ha dedicado tiempo a buscar respuestas. Lo simple es lo mejor: no necesito que mis servidores cambien el DNS a algo que no quiero.
Mei
6

La mayor parte de lo anterior supone que tiene un sistema inmaculado, pero la realidad a menudo es que ha estado instalando diferentes clientes dhcp, deshabilitado el administrador de red en ciertas versiones anteriores de Ubuntu, etc. Puede valer la pena saber lo siguiente. He estado usando dnsmasq por un tiempo, pero lo desinstalé. Actualmente mi sistema tenía los siguientes contenidos /etc/resolv.conf(que es un enlace simbólico /run/resolvconf/resolv.confen mi sistema):

cat /etc/resolv.conf
# 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

No importa con qué frecuencia ejecuto sudo resolvconf -uo sudo dpkg-reconfigure resolvconfno actualizó el servidor de nombres a los que configuré en el NetworkManager. La información que resolvconf utiliza del NetworkManager estaba presente:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8

Sin embargo, resulta que si hay varios archivos en este directorio, es posible que este archivo no se use en absoluto. El culpable fue un archivo no eliminado con la desinstalación de dnsmasq:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1

Solo eliminar este archivo (y ejecutarlo sudo resolvconf -udespués) resolvió mis problemas de dns:

cat /etc/resolv.conf                        
# 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.4.4
nameserver 8.8.8.8 

Espero que esto también ayude a otros con la depuración (las complejas interacciones entre todas estas diferentes herramientas de red). Si usa, resolvconfasegúrese de correr ls /run/resolvconf/interfacespara ver qué hay allí.

Anne van Rossum
fuente
1
Gracias, esto fue de gran ayuda. Primero probé las respuestas más votadas y ninguna parecía funcionar. No tenía ningún archivo adicional en el /run/resolvconf/interface/directorio, pero mi NetworkManagerarchivo necesitaba algo de amor. Su respuesta me ayudó a resolver este problema.
mason81
4

Acabo de eliminar un enlace /etc/resolv.confy creé un archivo regular con las direcciones de los servidores de nombres. Funciona, y no veo ninguna razón para usar esa construcción bastante extraña que los desarrolladores de Ubuntu han creado.

Ivan
fuente
1
Sí, no soy fanático de este tipo de cambio que afecta a los servidores, agrega complejidad y opacidad. Este es un comportamiento central que no debería cambiar de una versión a otra.
belacqua
Esta respuesta tiene 5 años y, en mi humilde opinión, sigue siendo el mejor de todos los enumerados. Es simple, rápido y efectivo. ¿Hay alguna desventaja?
Craig S. Anderson
3

Puede editar la conexión "AUTO ETH0" o el nombre que utilice para conectarse en NM. Puede hacer esto haciendo clic derecho en NM y seleccionando "Editar conexiones ...". En la pestaña IPv4, puede seleccionar "Solo direcciones automáticas (DHCP)" como "Método" y NM le permitirá configurar las direcciones del servidor de nombres manualmente, incluso las direcciones se entregan a través de DHCP.

Frank Barcenas
fuente
3

Agregando mi parte a la lista ya larga, aquí hay otra forma (probado en 12.04):

Edite /run/resolvconf/interface/NetworkManagerpara satisfacer sus necesidades. Aquí hay un ejemplo:

search foobar.com example.com
nameserver 192.168.1.1

Luego, como se indicó para la mayoría de los otros ejemplos, haga a sudo resolvconf -u. Ahora encontrarás tu resolv.confaspecto así:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Todavía no me gusta la forma en que se implementa ahora (parece que Ubuntu necesita un servicio para cada cliente), y preferiría un plano resolv.confseguro. Pero este enfoque parece ser el mejor compromiso para mí hasta ahora. El "localhost-NS" agregado no debería doler demasiado.

Izzy
fuente
2

Lo arreglé cambiando el orden de las fuentes. Moví la dnsfuente antes mdnsen /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Puede mantener su configuración y seguir utilizando el servidor de almacenamiento en caché local de esta manera.

Dan B
fuente
en lugar de agregar entradas, arregle el sistema que está roto y proporcionándole la información que realmente desea. +1.
nelaaro
2

Qué tal si:

sudo dpkg-reconfigure resolvconf

Antes de eso, use Network Manager para cambiar la dirección DNS y cambie el Método a

Solo direcciones automáticas (DHPC)

Luego ejecute el comando anterior y reinicie. Eso hizo la solución para mí.

Adige72
fuente
2
vi /etc/network/interfaces


This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The primary network interface
allow-hotplug eth0


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0         <<----- change this comment with the #
iface eth0 inet dhcp
Roy Rogers
fuente
2

Esta es una pregunta muy popular, con una colección de posibles respuestas estándar, todas las cuales, en mi opinión, son bastante extravagantes. Por mi parte, siempre he tenido problemas para hacer que Ubuntu respete la configuración de DNS que configuré en NetworkManager, en particular la configuración de servidores DNS estáticos con "direcciones automáticas (DHCP) solamente", y hoy finalmente descubrí qué estaba REALMENTE EQUIVOCADO.

El problema está en la interacción entre resolvconf y NetworkManager. resolvconf tiene este archivo llamado /etc/resolvconf/interface-order. Al menos en mis sistemas, NetworkManager no está en este archivo en absoluto (excepto que está cubierto por el comodín * al final). Entonces, lo que sucede es que el informe más reciente de dhclient a resolvconf tiene prioridad sobre cualquier cosa que NetworkManager tenga que decir.

Por lo tanto, al menos en mi caso, la respuesta real fue agregar

NetworkManager

en o cerca de la parte superior de /etc/resolvconf/interface-order.

(Sí, sé que muchas personas simplemente dicen "desinstalar resolvconf", lo que me parece una mala idea en sí misma. Pero más que eso, al menos astuto y xenial consideran resolvconf como una parte vital del sistema [es decir, ubuntu -minimal depende de ello], por lo que sería difícil mantener su sistema en un estado coherente y actualizado sin resolvconf).

Si lo solicito, puedo proporcionar más detalles sobre cómo resolví esto. ( EDITAR : aparentemente no lo hice cuando me lo pidieron, lo siento. En este momento no recuerdo muchos más detalles de lo que digo a continuación :) En pocas palabras, reemplacé el ejecutable resolvconf con un envoltorio de shell a su alrededor. que volcó sus argumentos, entrada, salida y stderr a los archivos; y agregó set -x a los scripts de actualización de resolvconf.

( EDITAR : puedo decir que lo que quiero decir con la primera parte es que usé sudo para mover el ejecutable resolvconf real, que se puede encontrar usando el comando which o el comando type. Luego crea un script de shell que finalmente solo ejecuta el movido resolvconf, pero también hace eco de los argumentos de algún archivo, y utiliza la redirección de shell para enviar stdin, stdout y stderr a varios otros archivos. No recuerdo dónde están los "scripts de actualización de resolvconf" y no puedo verificarlos fácilmente. Creo muchos geeks de Linux pueden entender lo que quiero decir; tal vez algún buen samaritano proporcionará aún más detalles en un comentario).

Steven Collins
fuente
Por favor, " brinde más detalles sobre cómo lo
resolvió
1

Para cambiar DNS, siga las instrucciones en: https://developers.google.com/speed/public-dns/docs/using

  1. Ir a la red

  2. Seleccione la conexión para la que desea configurar el DNS.

  3. Para cambiar la configuración de una conexión inalámbrica, seleccione la pestaña Inalámbrica, luego seleccione la red inalámbrica adecuada.

  4. Haga clic en la flecha (derecha) y en la ventana que aparece, seleccione la pestaña Configuración de IPv4 o Configuración de IPv6.

  5. Si el método seleccionado es Automático (DHCP), abra el menú desplegable y seleccione solo las direcciones Automáticas (DHCP). Si el método se establece en otra cosa, no lo cambie.

  6. En el campo Servidores DNS, ingrese las direcciones IP de DNS, separadas por una coma

Ferroao
fuente
0

0.Agregue DNS temporal. Edite /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1.Instale o actualice resolvconf.

root@ubuntu:~# apt-get install resolvconf -y

2.Agregue su servidor de nombres en /etc/resolvconf/resolv.conf.d/tail

nameserver 4.4.4.4
nameserver 8.8.8.8

3. Reinicie su máquina.

xiaoliuzi
fuente