GNU/Linux >> Tutoriales Linux >  >> Linux

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

Esto está dictado por la configuración de NSS (Conmutador de servicio de nombres), es decir, /etc/nsswitch.conf hosts del archivo directiva. Por ejemplo, en mi sistema:

hosts:    files mdns4_minimal [NOTFOUND=return] dns

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

Además, consulte man 5 nsswitch.conf para tener más idea sobre esto.

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

getent hosts example.com

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

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

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 entremos en getaddrinfo_a() , que está enviando una señal al finalizar, por lo que es aún peor).

En segundo lugar, la implementación del solucionador en glibc (la biblioteca C estándar en Linux) es horrible, esperando que lo dejes extraer objetos dinámicos aleatorios en el espacio de direcciones a través de dlopen() a sus espaldas, y haciendo que sea imposible contenerlo de alguna manera o usarlo en ejecutables vinculados estáticamente.

Dado que muchos programas no usan el resolver estándar directamente, 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 gethostbyname() no reentrante y solo ipv4 , que estaba en desuso desde hace mucho tiempo.


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 de /etc/nsswitch.conf para sistemas linux. En /etc/netsvc.conf para servidores AIX, en el sistema para Windows y podría aparecer en la lista con lookupd -configuration (busque LookupOrder, similar a:Cache FF DNS NI DS ) en sistemas MacOS.

El orden real se vuelve complejo y, por lo general, intrincado, 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 generalmente en 127.0.0.1:53 o ::1:53 (o ambos)) generalmente 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 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 existe una resolución de último recurso para la computadora hostname en el servicio myhostname

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

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

Tenga en cuenta que el muy antiguo (glibc 2.4 y anterior) order entrada establecida en /etc/host.conf como:

order hosts,bind,nis

Solo se aplica a los archivos (archivo /etc/hosts ) servicio de nombres.

Los efectos en esta computadora cliente (Linux) relacionados con NIS y LDAP son (generalmente) controlados por el servidor DNS utilizado (vinculado, desvinculado, etc.).

entonces:

  1. Si un nombre de host se puede resolver en /etc/hosts, ¿se aplica DNS después de /etc/hosts para resolver el nombre de host o trata 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 , el DNS no se aplica (si los archivos son anteriores a DNS).

ni es la dirección IP resuelta tratada 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 aplicará el orden dado anteriormente. El navegador, como cualquier programa, podría 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 sobre 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, por lo que no puedo 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á fuera del navegador nuevamente.

Si el navegador tiene un nombre resuelto en su caché, el navegador lo utiliza de nuevo.

Use esto para borrar el caché.

O simplemente cierre (espere un momento) y reinicie el navegador.


Linux
  1. Cómo recuperarse de una entrada raíz eliminada en archivos /etc/shadow y/o /etc/passwd en CentOS / RHEL 6

  2. Los cambios manuales realizados en /etc/hosts o /etc/sysconfig/network-scripts/ifcfg-* se pierden

  3. CentOS / RHEL:cómo recuperarse de un archivo /etc/passwd eliminado

  4. ¿Cuál es la conexión entre los directorios /etc/init.d y /etc/rcX.d en Linux?

  5. ¿Cómo puedo revertir un chmod en el directorio etc?

La forma correcta de editar archivos /etc/passwd y /etc/group en Linux

¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

¿Cómo se actualiza /etc/motd?

CentOS / RHEL 7:cómo recuperarse de una entrada raíz eliminada en archivos /etc/shadow y/o /etc/passwd

Comprender los archivos /proc/mounts, /etc/mtab y /proc/partitions

Cómo configurar /etc/issues para mostrar la dirección IP de eth0