GNU/Linux >> Linux Esercitazione >  >> Linux

In che modo `/etc/hosts` e DNS lavorano insieme per risolvere i nomi host in indirizzi IP?

Questo è dettato dalla configurazione NSS (Name Service Switch), cioè /etc/nsswitch.conf hosts del file direttiva. Ad esempio, sul mio sistema:

hosts:    files mdns4_minimal [NOTFOUND=return] dns

Qui, files si riferisce al /etc/hosts file e dns fa riferimento al sistema DNS. E come puoi immaginare, chi arriva per primo vince .

Inoltre, vedi man 5 nsswitch.conf per avere più idee su questo.

Per inciso, per seguire gli ordini di risoluzione degli host NSS, usa getent con hosts come database, ad esempio:

getent hosts example.com

Per rispondere solo alla tua ultima domanda:/etc/hosts non si applica di nuovo immediatamente perché firefox sta memorizzando nella cache l'ultimo nome host ottenuto per google.com; se vuoi che venga recuperato sempre di nuovo, dovrai impostare network.dnsCacheExpiration a 0 in about:config . Maggiori informazioni (anche se un po' obsolete) qui. Scusa se questo è fuori tema.

Come nota a margine, molti programmi non usano il resolver standard (getaddrinfo(3) , getnameinfo(3) [1]) perché fa schifo .

Innanzitutto, l'interfaccia non è asincrona; qualsiasi programma moderatamente complesso dovrà generare un thread separato facendo solo il getaddrinfo() e poi inventare un proprio protocollo per comunicare con esso (e non entriamo nemmeno in getaddrinfo_a() , che sta inviando un segnale al termine, quindi è anche peggio).

In secondo luogo, l'implementazione del resolver in glibc (la libreria C standard in Linux) è orribile, si aspetta che tu lasci che estragga oggetti dinamici casuali nello spazio degli indirizzi tramite dlopen() alle tue spalle e rendendo impossibile contenerlo in alcun modo o utilizzarlo in eseguibili collegati staticamente.

Poiché molti programmi non utilizzano direttamente il risolutore standard, non si preoccupano nemmeno di replicarne esattamente il comportamento e ignorano alcuni o tutti /etc/resolv.conf , /etc/hosts , /etc/nsswitch.conf o /etc/gai.conf .

[1] e non menzionare nemmeno gethostbyname() non rientrante, solo ipv4 , che è stato deprecato da secoli.


Il file /etc/hosts e il DNS non funzionano insieme. Forniscono risoluzioni indipendenti di nomi (nomi di rete).

Il collante che li unisce è all'interno di /etc/nsswitch.conf per sistemi Linux. In /etc/netsvc.conf per i server AIX, nel sistema per Windows e potrebbe essere elencato con lookupd -configuration (cerca LookupOrder, simile a:Cache FF DNS NI DS ) nei sistemi MacOS.

L'ordine effettivo diventa complesso e solitamente contorto poiché ogni servizio di risoluzione dei nomi potrebbe (e molte volte lo fa) guardare all'interno di altri livelli di risoluzione. Come dnsmasq (un server DNS leggero generalmente a 127.0.0.1:53 o ::1:53 (o entrambi)) di solito legge e include il /etc/hosts contenuto del file. O come systemd.resolver (un risolutore di base che dovrebbe risolvere solo nomi senza punti come mycomputer ) chiama direttamente le risoluzioni DNS per i nomi puntati (mycomputer.here.dev. ) in determinate condizioni.

In genere i servizi vengono chiamati in ordine e il primo che non fallisce vince ed è accettato come indirizzo corretto. L'ordine di base generale è:/etc/hosts (file), mDNS (nomi senza punti), DNS, NIS, NIS+, LDAP. In alcuni sistemi Linux esiste una soluzione di ultima istanza per il computer hostname nel servizio myhostname

Ad esempio, in questo sistema (da cat /etc/nsswitch ):

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname

Si noti che il molto vecchio (glibc 2.4 e precedenti) order voce impostata in /etc/host.conf come:

order hosts,bind,nis

Si applica solo ai file (file /etc/hosts ) servizio nomi.

Gli effetti su questo computer client (linux) relativi a NIS e LDAP sono (solitamente) controllati dal server DNS utilizzato (bind, unbound, ecc.).

quindi:

  1. Se un nome host può essere risolto in /etc/hosts, il DNS si applica dopo /etc/hosts per risolvere il nome host o trattare l'indirizzo IP risolto da /etc/hosts come un "nome host" per risolvere in modo ricorsivo?

Nessuno.

Se un nome host può essere risolto in /etc/hosts , il DNS non si applica (se files è prima di DNS).

è l'indirizzo IP risolto trattato come un "nome host".

È semplicemente:l'indirizzo risolto.

browser

Un browser potrebbe utilizzare qualsiasi metodo per risolvere un nome (dopo aver controllato la cache dei nomi risolti). Solo se utilizza un metodo fornito dal sistema, si applica l'ordine sopra indicato. Il browser, come qualsiasi programma, potrebbe scegliere di contattare direttamente qualsiasi server DNS.

Se l'ordine di sistema ha /etc/hosts prima di DNS , significa che una voce in quel file avrà la precedenza su DNS servizio di risoluzione.

Quindi:

  1. ... Significa che /etc/hosts sovrascrive il DNS per la risoluzione dei nomi host?

Sì (se il browser utilizza la risoluzione fornita dal sistema).

Perché /etc/hosts non funziona presentare nuovamente domanda, in modo che non riesca a collegarmi al sito web?

Solo fino a quando la cache interna del browser non viene cancellata (o scade il timeout) per quel nome specifico, quel nome verrà nuovamente cercato al di fuori del browser.

Se il browser ha un nome risolto nella sua cache, il browser lo utilizza di nuovo.

Usalo per svuotare la cache.

O semplicemente chiudi (aspetta qualche istante) e riavvia il browser.


Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Creare un file host specifico per l'utente per completare /etc/hosts?

  3. Come monitorare i file /etc/shadow e /etc/passwd per le modifiche con Auditd?

  4. comando grpck – Rimuove le voci danneggiate o duplicate nei file /etc/group e /etc/gshadow.

  5. Come migrare un server DNS BIND su un nuovo hardware?

Il modo giusto per modificare i file /etc/passwd e /etc/group in Linux

CentOS / RHEL 7:come recuperare dalla voce di root eliminata nei file /etc/shadow e/o /etc/passwd

CentOS / RHEL:come recuperare dal file /etc/passwd cancellato

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

/etc/passwd mostra l'utente in un gruppo, ma /etc/group no

come modificare /etc/hosts dagli script di shell?