Saltar al contenido

¿Cómo funcionan `/ etc / hosts` y DNS para resolver nombres de host en direcciones IP?

Esta es la contestación más correcta que encomtrarás aportar, pero primero obsérvala pausadamente y analiza si se puede adaptar a tu proyecto.

Solución:

Esto es dictado por la configuración NSS (Name Service Switch), es decir /etc/nsswitch.conf archivo hosts directiva. Por ejemplo, en mi sistema:

hosts:    files mdns4_minimal [NOTFOUND=return] dns

Aquí, files se refiere a /etc/hosts archivo, y dns se refiere al sistema DNS. Y como puedes imaginar lo que ocurra primero gana.

Ver también man 5 nsswitch.conf para tener más idea de esto.


Aparte, para seguir los pedidos de resolución de host NSS, utilice getent con hosts como base de datos, por ejemplo:

getent hosts example.com

Para responder solo a su última pregunta: /etc/hosts no se aplica de nuevo inmediatamente porque firefox está almacenando en caché el último nombre de host que obtuvo google.com; si quieres que siempre vuelva a buscarlo, tendrás que configurar network.dnsCacheExpiration para 0 en about:config. Más información (aunque un poco desactualizada) aquí. Lo siento si esto es fuera de tema.


Como nota al margen, muchos programas no utilizan el solucionador estándar (getaddrinfo(3), getnameinfo(3) [1]) porque apesta.

Primero, la interfaz no es asincrónica; cualquier programa moderadamente complejo tendrá que generar un subproceso separado haciendo solo el getaddrinfo() y luego inventar su propio protocolo para comunicarse con él (y ni siquiera entremos en getaddrinfo_a(), que está enviando un señal al finalizar, es aún peor).

En segundo lugar, la implementación del resolutor en glibc (la biblioteca C estándar en linux) es horrible, esperando que le permita extraer objetos dinámicos aleatorios al espacio de direcciones a través de dlopen() a sus espaldas, y haciendo imposible contenerlo de ninguna manera o usarlo en ejecutables vinculados estáticamente.

Dado que muchos programas no utilizan directamente el solucionador estándar, tampoco se molestan en replicar su comportamiento exactamente e ignoran algunos o todos los /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 obsoleta desde hace siglos.

El archivo /etc/hosts y el DNS no funcionan juntos. Proporcionan resoluciones independientes de nombres (nombres de redes).

El pegamento que los une está dentro /etc/nsswitch.conf para sistemas linux. En /etc/netsvc.conf para servidores AIX, en el sistema para Windows y podría aparecer con lookupd -configuration (busque 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. Igual que dnsmasq (un servidor DNS ligero generalmente en 127.0.0.1:53, o ::1:53 (o ambos)) por lo general lee e incluye el /etc/hosts contenido del archivo. O como systemd.resolver (un solucionador básico que solo debería resolver nombres sin puntos como mycomputer) llama directamente a las resoluciones de DNS para nombres con puntos (mycomputer.here.dev.) bajo 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 computadora. hostname en el servicio myhostname

Por ejemplo, en este sistema (de cat /etc/nsswitch):

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

Tenga en cuenta que los muy antiguos (glibc 2.4 y anteriores) order entrada establecida en /etc/host.conf como:

order hosts,bind,nis

Aplicar solo a los archivos (archivo /etc/hosts) servicio de nombres.

Los efectos en esta computadora cliente (linux) relacionados con NIS y LDAP están (generalmente) controlados por el servidor DNS utilizado (vincular, desvincular, etc.).

asi que:

  1. Si un nombre de host se puede resolver en / etc / hosts, ¿se aplica el DNS después de / etc / hosts para resolver el nombre de host o tratar la dirección IP resuelta por / etc / hosts como un “nombre de host” para resolver de forma recursiva?

Ninguno.

Si un nombre de host se puede resolver en /etc/hosts, los DNS no se aplica (si los archivos están antes de DNS).

ni es la dirección IP resuelta tratada como un “nombre de host”.

Simplemente es: la dirección resuelta.

navegador

Un navegador puede 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 aplicará el orden indicado anteriormente. El navegador, como cualquier programa, puede optar por contactar directamente con cualquier servidor DNS.

Si la orden del sistema tiene /etc/hosts antes de DNS, significa que una entrada en ese archivo tendrá prioridad DNS servicio de resolución.

Entonces:

  1. … ¿Significa que / etc / hosts anula el DNS para resolver nombres de host?

Sí (si el navegador utiliza la resolución proporcionada por el sistema).

Por qué no /etc/hosts aplicar de nuevo, de modo que no pueda conectarme al sitio web?

Solo hasta que se borre la memoria caché interna del navegador (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.

Sección de Reseñas y Valoraciones

Recuerda que tienes concesión de reseñar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *