En Linux, ¿cómo /etc/hosts
funcionan juntos y DNS para resolver los nombres de host a las direcciones IP?
- si se puede resolver un nombre de host
/etc/hosts
, ¿se aplica DNS después/etc/hosts
de resolver el nombre de host o trata la dirección IP resuelta/etc/hosts
como un "nombre de host" para resolver de forma recursiva? En mi navegador (firefox y google chrome), cuando agrego a
/etc/hosts
:127.0.0.1 google.com www.google.com
escribir www.google.com en la barra de direcciones de los navegadores y presionar enter no se conectará al sitio web. Después se quita esa frase de
/etc/hosts
, puedo conectar con el sitio web. ¿Significa que/etc/hosts
anula el DNS para resolver nombres de host?Después de volver a agregar la línea
/etc/hosts
, aún puedo conectarme al sitio web, incluso después de actualizar la página web. ¿Por qué no/etc/hosts
volver a presentar una solicitud para no poder conectarme al sitio web?
Gracias.
/etc/hosts
los servidores de nombres definidos localmente. Es bastante confuso presenciar la primera vez. (Mirándote, navegadores basados en cromo!)/etc/hosts
y los servidores DNS definidos por el sistema: ( github.com/Eloston/ungoogled-chromium ). Instalación en MacOS con Homebrew:brew cask install eloston-chromium
.Respuestas:
Esto está dictado por la configuración NSS (Name Service Switch), es decir
/etc/nsswitch.conf
, lahosts
directiva del archivo . Por ejemplo, en mi sistema:Aquí, se
files
refiere al/etc/hosts
archivo ydns
al sistema DNS. Y como puedes imaginar, lo que ocurra primero gana .Además, vea
man 5 nsswitch.conf
para tener más idea sobre esto.Como un aparte, para seguir los ordenamientos resolución anfitrión NSS, el uso
getent
conhosts
como base de datos, por ejemplo:fuente
systemd.resolver
afecta las resoluciones? ¿Dónde encajan NIS y LDAP en el sistema de resolución? ¿Qué orden sigue a un sistema MacOS o un sistema Windows?Para responder solo a su última pregunta:
/etc/hosts
no se aplica nuevamente de inmediato porquefirefox
está almacenando en caché el último nombre de host para el que obtuvogoogle.com
; si lo quieres para ir a buscar siempre de nuevo, usted tiene que fijarnetwork.dnsCacheExpiration
a0
enabout:config
. Más información (aunque un poco anticuada) aquí . Lo siento si esto es offtopic.Como nota al margen, muchos programas no usan el resolutor estándar (
getaddrinfo(3)
,getnameinfo(3)
[1]) porque es una mierda .Primero, la interfaz no es asíncrona; cualquier programa moderadamente complejo tendrá que generar un hilo separado haciendo solo el
getaddrinfo()
y luego inventar su propio protocolo para comunicarse con él (y ni siquiera entremosgetaddrinfo_a()
, que está enviando una señal al finalizar, por lo que es aún peor).En segundo lugar, la implementación del resolutor en
glibc
(la biblioteca estándar de C en Linux) es horrible, esperando que permita que atraiga objetos dinámicos aleatorios en el espacio de direcciones a través dedlopen()
su espalda, y que sea imposible contenerlo de ninguna manera o usarlo estáticamente ejecutables vinculados.Dado que muchos programas no utilizan el sistema de resolución normal de manera directa, sino que también no se molestan en replicar exactamente su comportamiento, y pasan por alto algunos o todos
/etc/resolv.conf
,/etc/hosts
,/etc/nsswitch.conf
o/etc/gai.conf
.[1] y ni siquiera mencione el no reentrante, solo ipv4
gethostbyname()
, que fue obsoleto desde hace siglos.fuente
google = GHBN("google.com"); facebook = GHBN("facebook.com")
puede terminar con ambosgoogle
yfacebook
contener la dirección defacebook.com
. Cuando las dos llamadas se realizan en subprocesos diferentes, es aún más divertido: puede terminar con una dirección que es mitad google y mitad facebook o basura completa.gethostbyname()
ahora?getaddrinfo
es la función estándar para eso, pero es en sí misma brokrn, como ya expliqué, por lo que no se usa como lo hacen los navegadores u otras aplicaciones de la vida real.El archivo
/etc/hosts
y el DNS no funcionan juntos. Proporcionan resoluciones independientes de nombres (nombres de red).El pegamento que los une está dentro
/etc/nsswitch.conf
de los sistemas Linux . En el/etc/netsvc.conf
caso de los servidores AIX, en el sistema para Windows y podría aparecer en la lista conlookupd -configuration
(buscar LookupOrder, similar a:)Cache FF DNS NI DS
en sistemas MacOS.El orden real se vuelve complejo y generalmente complicado, ya que cada servicio de resolución de nombres podría (y muchas veces lo hace) mirar dentro de otros niveles de resolución. Me gusta
dnsmasq
(un servidor DNS ligero en general127.0.0.1:53
, o::1:53
(o ambos)) generalmente lee e incluye el/etc/hosts
contenido del archivo. O comosystemd.resolver
(un solucionador básico que solo debe resolver nombres sin puntos comomycomputer
) llama directamente a las resoluciones DNS para nombres con puntos (mycomputer.here.dev.
) en algunas condiciones.En general, los servicios se llaman en orden y el primero que no falla gana y se acepta como la dirección correcta. El orden básico general es:
/etc/hosts
(archivo), mDNS (nombres sin puntos), DNS, NIS, NIS +, LDAP. En algunos sistemas Linux hay una resolución de último recurso para la computadorahostname
en el serviciomyhostname
Por ejemplo, en este sistema (desde
cat /etc/nsswitch
):Tenga en cuenta que los muy viejos (glibc 2.4 y anteriores)
order
de entrada set en/etc/host.conf
como:Solo se aplica al
/etc/hosts
servicio de nombres de archivos (archivo ).Los efectos en esta computadora cliente (linux) relacionados con NIS y LDAP son (generalmente) controlados por el servidor DNS utilizado (enlace, desvinculado, etc.).
entonces:
Ninguna.
Si se puede resolver un nombre de host
/etc/hosts
,DNS
no se aplica (si los archivos son anteriores a DNS).ni la dirección IP resuelta se trata como un "nombre de host".
Simplemente es: la dirección resuelta.
navegador
Un navegador podría usar cualquier método para resolver un nombre (después de haber verificado su caché de nombres resueltos). Solo si utiliza un método proporcionado por el sistema, se aplica el orden indicado anteriormente. El navegador, como cualquier programa, podría elegir contactar a cualquier servidor DNS directamente.
Si el orden del sistema lo ha hecho
/etc/hosts
antesDNS
, significa que una entrada en ese archivo tendrá prioridad sobre elDNS
servicio de resolución.Entonces:
Sí (si el navegador usa la resolución proporcionada por el sistema).
Solo hasta que el caché interno del navegador se borre (o se agote el tiempo de espera) para ese nombre específico, ese nombre se buscará nuevamente fuera del navegador.
Si el navegador tiene un nombre resuelto en su caché, el navegador lo usa nuevamente.
Use esto para borrar el caché .
O simplemente cierre (espere un momento) y reinicie el navegador.
fuente