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:
- 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:
- … ¿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ó.