Come rendere accessibile una macchina dalla LAN usando il suo nome host


120

Ecco i dettagli della macchina a cui voglio accedere usando il suo nome host:

$ hostname
hostname
$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   hostname.company.local  hostname

È un'installazione Debian 6 (Squeeze) predefinita, quindi non ho ancora giocherellato con nulla.

Questo è ciò che ottengo da una macchina (che esegue Debian Unstable) cercando di accedere alla macchina sopra:

$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local

È necessario fare qualcosa sul client (la macchina su cui si esegue ping) o su una macchina che il client consulta. Qual è il sistema operativo sul client? Qual è la sua configurazione DNS?
Gilles,

Che cos'è una configurazione DNS? Vedi anche post aggiornato.
Tshepang,

1
La mia risposta è il tipo di cose che stavi cercando? In tal caso, la domanda deve essere semplificata: chi conosce pinge /etc/hostsnon comunque il DNS?
Gilles,

Molte grazie. Dai un'occhiata. Oh, ed è più un articolo che una risposta :)
tshepang,

3
La risposta è "installa e configura dnsmasq". Fatto. :)
Warren Young,

Risposte:


145

Su Internet, comprese le reti locali, le macchine si chiamano per indirizzo IP . Per accedere alla macchina B dalla macchina A usando il nome della macchina B, la macchina A deve avere un modo per mappare il nome di B al suo indirizzo IP. Esistono tre modi per dichiarare i nomi delle macchine su A:

  • un file hosts . Questo è un semplice file di testo che mappa i nomi agli indirizzi.
  • il sistema dei nomi di dominio (DNS) . Questo è il metodo utilizzato su Internet globale. Ad esempio, quando carichi questa pagina in un browser, la prima cosa che fa il tuo computer è fare una richiesta DNS per conoscere l'indirizzo di unix.stackexchange.com.
  • altri database di nomi come NIS , LDAP o Active Directory . Questi vengono utilizzati in alcune reti aziendali, ma non molto spesso (molte reti che utilizzano NIS, LDAP o AD per i database degli utenti utilizzano DNS per i nomi dei computer). Se la tua rete utilizza una di queste, hai un amministratore di rete professionale e dovresti chiedergli cosa fare.

Ci sono molti modi in cui questi possono funzionare nella pratica; è impossibile coprirli tutti. In questa risposta, descriverò alcune situazioni comuni.

File host

Il metodo del file hosts ha il vantaggio di non richiedere alcun metodo speciale. Può essere complicato se si dispone di più macchine, poiché è necessario aggiornare ogni macchina quando cambia il nome di una macchina. Non è adatto se l'indirizzo IP di B è assegnato in modo dinamico (in modo da ottenerne uno diverso ogni volta che ti connetti alla rete).

Un file hosts è un semplice elenco di linee che associano i nomi agli indirizzi IP. Sembra così:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

Sui sistemi unix, il file hosts è /etc/hosts. Su Windows, lo è c:\windows\system32\drivers\etc\hosts. Quasi tutti i sistemi operativi che è possibile connettersi a Internet hanno un file simile; Wikipedia ha un elenco .

Per aggiungere una voce per B nel file hosts di A:

  1. Determinare l'indirizzo IP di B. Su B, eseguire il comando ifconfig(se il comando non viene trovato, provare /sbin/ifconfig). L'output conterrà righe come questa:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab
              inet addr:10.3.1.42  Bcast:10.3.1.255  Mask:255.255.255.0
    

    In questo esempio, l'indirizzo IP di B è 10.3.1.42. Se ci sono più inet addr:linee, scegli quella corrispondente alla tua scheda di rete, mai la lovoce o un tunnel o voce virtuale.

  2. Modifica il file hosts su A. Se A esegue un sistema unix, dovrai modificarlo /etc/hostscome superutente; vedi Come posso eseguire un comando come amministratore di sistema (root) .

DHCP + DNS su reti domestiche o di piccoli uffici

Questo metodo è di gran lunga il più semplice se si dispone dell'attrezzatura necessaria. Devi solo configurare un dispositivo e tutti i tuoi computer conosceranno i nomi degli altri. Questo metodo presuppone che i tuoi computer ottengano i loro indirizzi IP tramite DHCP , che è un metodo che consente ai computer di recuperare automaticamente un indirizzo IP quando si connettono alla rete. Se non sai cos'è il DHCP, probabilmente lo fanno.

Se la tua rete ha un router di casa , è il posto migliore per configurare i nomi per le macchine connesse a quel router. Innanzitutto, è necessario capire l' indirizzo MAC di B. Ogni dispositivo di rete ha un indirizzo MAC univoco. Su B, esegui il comando ifconfig -a(se il comando non viene trovato, prova /sbin/ifconfig -a). L'output conterrà righe come questa:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab

In questo esempio l'indirizzo MAC è 01:23:45:67:89:ab. Devi scegliere la linea HWaddr che corrisponde alla porta di rete connessa al router tramite un cavo (o la scheda wifi se sei connesso tramite wifi). Se hai più voci e non sai quale sia, collega il cavo e vedi quale dispositivo di rete riceve un indirizzo IP ( inet addrriga appena sotto).

Ora, nell'interfaccia web del router, cerca un'impostazione come "DHCP". Il nome e la posizione dell'impostazione dipendono completamente dal modello di router, ma la maggior parte ha un set simile di impostazioni di base. Ecco come appare su un firmware Tomato :

screenshot di pomodoro

Immettere l'indirizzo MAC, un indirizzo IP e il nome desiderato. Puoi scegliere qualsiasi indirizzo IP nell'intervallo di indirizzi della tua rete locale. La maggior parte dei router domestici è preconfigurata per un intervallo di indirizzi nel formato 192.168. x . y o 10. x . y . z . Ad esempio, sul router Tomato mostrato sopra, nella scheda "Rete", c'è un'impostazione "indirizzo IP router" con il valore 10.3.0.1 e un'impostazione "subnet mask" con il valore 255.255.255.0, il che significa che i computer sono accesi la rete locale deve avere un indirizzo nel modulo 10.3.0. z . C'è anche una gamma di indirizzi per gli indirizzi DHCP assegnati automaticamente (10.3.0.129–10.3.0.254); per il tuo indirizzo DHCP assegnato manualmente, scegline uno che non rientri in questo intervallo.

Ora collega B alla rete e dovrebbe ottenere l'indirizzo IP specificato e sarà raggiungibile con il nome specificato da qualsiasi macchina della rete.

Crea il tuo server DNS con Dnsmasq

Se non si dispone di un router domestico abilitato, è possibile impostare la stessa funzionalità su qualsiasi macchina Linux. Spiegherò come usare Dnsmasq per configurare il DNS . Esistono molti altri programmi simili; Ho scelto Dnsmasq perché è facile da configurare e leggero (è quello che utilizza il router Tomato sopra illustrato, ad esempio). Dnsmasq è disponibile sulla maggior parte delle distribuzioni Linux e BSD per PC, server e apparecchiature di rete.

Scegli un computer sempre acceso, con un indirizzo IP statico e che esegua una sorta di Linux o BSD; chiamiamolo S (per server). Su S, installa il dnsmasqpacchetto (se non è già lì). Di seguito suppongo che il file di configurazione sia /etc/dnsmasq.conf; la posizione può variare in base alla distribuzione. Ora devi fare diverse cose.

  • Di 'a Dnsmasq di fornire i nomi dei tuoi host oltre a quelli che ottiene da Internet. Il modo più semplice è inserire i nomi e gli indirizzi IP in /etc/hosts(vedere la sezione "File Hosts" sopra) e assicurarsi che /etc/dnsmasq.confla no-hostsdirettiva non sia decommentata. (Le righe che iniziano con una #sono commentate.) Puoi inserire i nomi in un altro file; se lo fai, metti una linea addn-hosts=/path/to/hosts/filein /etc/dnsmasq.conf.
  • Spiega a Dnsmasq come ottenere gli indirizzi IP per i nomi delle macchine su Internet.

    • Se usi Debian, Ubuntu o un derivato, installa il resolvconfpacchetto. Nella maggior parte dei casi, tutto funzionerà immediatamente.
    • Se l'amministratore di rete o il tuo ISP ti hanno fornito gli indirizzi dei server DNS, inseriscili /etc/dnsmasq.conf, ad esempio:

      server=8.8.8.8
      server=8.8.4.4
      
    • Se non sai quali sono le tue attuali impostazioni DNS, cerca nel file /etc/resolv.conf. Se si vede una linea come nameserver 8.8.8.8, mettere una linea server=8.8.8.8in /etc/dnsmasq.conf. Dopo aver modificato /etc/dnsmasq.conf, riavvia Dnsmasq. Il comando per farlo dipende dalla distribuzione; possibilità tipiche includono restart dnsmasqo /etc/init.d/dnsmasq restart.

  • Di 'a S di usare il servizio Dnsmasq per tutte le richieste di nome host. Modifica il file /etc/resolv.conf(come root), rimuovi ogni nameserverriga e inserisci nameserver 127.0.0.1invece.
    • Se stai usando resolvconf su Debian o Ubuntu, /etc/resolv.confpotrebbe non essere ottimale se hai installato il resolvconfpacchetto con la rete attiva e funzionante. Assicurarsi che i file base, heade tailnella /etc/resolvconf/resolv.conf.d/directory non contengono nameserverle voci, quindi eseguire resolvconf -u(come root).
  • Di 'alle altre macchine di usare S come server DNS. Modifica /etc/resolv.confe sostituisci tutte le nameserverrighe con una singola in nameserver 10.3.0.2cui 10.3.0.2 è l'indirizzo IP di S (vedi sopra per come trovare l'indirizzo IP di S).

È inoltre possibile utilizzare Dnsmasq come server DHCP , in modo che le macchine possano ottenere automaticamente l'indirizzo corrispondente al loro nome. Questo va oltre lo scopo di questa risposta; consultare la documentazione di Dnsmasq (non è difficile). Si noti che su una determinata rete locale può esistere un solo server DHCP (l'esatta definizione di rete locale va oltre lo scopo di questa risposta).

Nomi su Internet globale

Finora ho assunto una rete locale. E se vuoi dare un nome a una macchina che si trova in un angolo diverso del mondo? Puoi comunque utilizzare una qualsiasi delle tecniche sopra descritte, ad eccezione del fatto che le parti che coinvolgono DHCP sono applicabili solo all'interno di una rete locale. In alternativa, se le macchine hanno indirizzi IP pubblici, è possibile registrare il proprio nome pubblico per loro. (Puoi anche assegnare un indirizzo IP privato a un nome pubblico; è meno comune e meno utile, ma non ci sono difficoltà tecniche.)

Ottieni il tuo nome di dominio

Puoi ottenere il tuo nome di dominio e assegnare indirizzi IP ai nomi host all'interno di questo dominio. È necessario registrare il nome di dominio con un provider di nomi di dominio; questo in genere costa $ 10– $ 15 / anno (per i domini più economici). Utilizzare l'interfaccia Web del provider del nome di dominio per assegnare gli indirizzi ai nomi host.

DNS dinamico

Se le macchine dispongono di un indirizzo IP dinamico, è possibile utilizzare il protocollo DNS dinamico per aggiornare l'indirizzo IP associato al nome della macchina quando l'indirizzo cambia. Non tutti i provider di nomi di dominio supportano DNS dinamico, quindi acquista prima di acquistare. Per uso personale, No-IP fornisce un servizio DNS dinamico gratuito, se si utilizzano i propri domini (ad es example.ddns.net.).


Crea il tuo server DNS con Dnsmasq: come posso dire ad un'altra macchina di usare S, quando l'altra macchina ha Windows installato
Radu Rădeanu,

@Radu È possibile modificare i server DNS associati a una connessione tramite il pannello di controllo da qualche parte. Penso che sia necessario recuperare le proprietà di connessione dell'interfaccia di rete.
Gilles,

Ho aggiunto c: \ windows \ system32 \ drivers \ etc \ hosts e funziona. Grazie!
Radu Rădeanu,

Mi stavo togliendo i capelli cercando questo e l'ho trovato nel router come mi hai suggerito. Grazie per le informazioni dettagliate!
Jason Turan,

Se si tratta di una rete aziendale, devo dirlo al reparto infrastrutture. per aggiungere il mio mac linux all'elenco dei server DNS, giusto?
WesternGun

24

Usa DNS multicast (mDNS). Questo è un protocollo a configurazione zero che funziona su sottoreti LAN. Nessun server richiesto. Utilizza il .localTLD (che è quello che già usi).

Perché stai chiedendo, tutto il resto sembra eccessivo. Se non lo fosse, probabilmente non te lo chiederesti.


1
mDNS non sembra essere supportato su Windows senza installare qualcosa su ogni finestra di Windows.
Zitrax,

1
@Zitrax Un buon punto (questo è comunque un sito * nix). Informazioni rilevanti per l'installazione di Windows sono disponibili qui - relativamente semplici.
TNE

3
Aka Zeroconf o Bonjour. Fornito da avahipacchetti. Puoi interrogare la tua rete tramite avahi-browse -alrad esempio.
DanMan,

4
vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";

e

/etc/init.d/networking restart

Devo eseguirlo sul client o sull'host?
Tshepang,

Il primo bit verrebbe eseguito sul server DHCP (e si vorrebbe eseguire service restart dhcpd). La seconda parte verrebbe eseguita sul client, e sulla maggior parte delle distro ora dovrebbe essere eseguito come service networking restart.
Caleb,

Come ricordo, devo solo eseguirlo sul lato client ..
LanceBaynes,

3

I computer non solo sanno magicamente quali nomi host appartengono a quali destinatari IP. Anche su localhost, esiste una sorta di ricerca.

Sarà necessario configurare gli altri sistemi per utilizzare un tipo di servizio di ricerca dei nomi. Questo può essere /etc/hostssul client, su ldap, su nsswitch o sui normali server DNS. Uso binde inserisco tutte le macchine locali all'interno di un dominio locale, quindi lo faccio servire DNS per quel sito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.