En Linux, ¿cómo /etc/hostsfuncionan 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/hostsde resolver el nombre de host o trata la dirección IP resuelta/etc/hostscomo 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.comescribir 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/hostsanula 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/hostsvolver a presentar una solicitud para no poder conectarme al sitio web?
Gracias.

/etc/hostslos servidores de nombres definidos localmente. Es bastante confuso presenciar la primera vez. (Mirándote, navegadores basados en cromo!)/etc/hostsy 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, lahostsdirectiva del archivo . Por ejemplo, en mi sistema:Aquí, se
filesrefiere al/etc/hostsarchivo ydnsal sistema DNS. Y como puedes imaginar, lo que ocurra primero gana .Además, vea
man 5 nsswitch.confpara tener más idea sobre esto.Como un aparte, para seguir los ordenamientos resolución anfitrión NSS, el uso
getentconhostscomo base de datos, por ejemplo:fuente
systemd.resolverafecta 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/hostsno se aplica nuevamente de inmediato porquefirefoxestá 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.dnsCacheExpirationa0enabout: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.confo/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 ambosgoogleyfacebookcontener 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?getaddrinfoes 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/hostsy el DNS no funcionan juntos. Proporcionan resoluciones independientes de nombres (nombres de red).El pegamento que los une está dentro
/etc/nsswitch.confde los sistemas Linux . En el/etc/netsvc.confcaso 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 DSen 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/hostscontenido 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 computadorahostnameen el serviciomyhostnamePor ejemplo, en este sistema (desde
cat /etc/nsswitch):Tenga en cuenta que los muy viejos (glibc 2.4 y anteriores)
orderde entrada set en/etc/host.confcomo:Solo se aplica al
/etc/hostsservicio 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,DNSno 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/hostsantesDNS, significa que una entrada en ese archivo tendrá prioridad sobre elDNSservicio 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