Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ
îðèãèíàëüíîãî äîêóìåíòà
: http://www.arcetri.astro.it/irlab/doc/library/linux/AppLinux/al123.htm
Äàòà èçìåíåíèÿ: Tue Sep 21 18:08:44 1999 Äàòà èíäåêñèðîâàíèÿ: Sat Dec 22 13:23:29 2007 Êîäèðîâêà: Ïîèñêîâûå ñëîâà: http astrokuban.info astrokuban |
La sigla DHCP sta per Dynamic Host Configuration Protocol, e identifica un protocollo attraverso il quale un gruppo di nodi puÐ essere configurato in modo automatico e dinamico, per ciÐ che riguarda la sua connessione nella rete.
Per comprendere il problema, si immagini un ufficio con una rete locale chiusa, in cui si vogliono poter collocare dei nodi senza troppi problemi, e soprattutto senza dover stabilire prima gli indirizzi IP e i nomi corrispondenti.
Per attuare questo meccanismo attraverso il protocollo DHCP, occorre un server che sia in grado di rispondere a una richiesta del genere, e dei client in grado di fare tale richiesta adeguandosi alla risposta ricevuta.
Quando un client contatta un server DHCP per la priva volta, tra i due viene concordato un tempo di validitÞ per la configurazione assegnata al client. CiÐ permette al client di mantenere quella configurazione per un certo tempo, senza che questa debba essere necessariamente ridefinita ogni volta che lo si riavvia. Questo tempo viene indicato con il termine lease, ed Õ compito del server tenere memoria dei nodi che possono trovarsi nella rete di sua competenza; i client dovranno richiedere ogni volta al server i dati per la loro configurazione, ma almeno si cerca di fare in modo che questi restino uguali per il tempo di lease, che deve essere configurato in modo conveniente in base alle caratteristiche della rete. *1*
Il client che tenta di contattare un server DHCP deve utilizzare una chiamata circolare. Per questo, i kernel utilizzati nei client, e quello del server, devono essere stati predisposti opportunamente.
IP: multicasting ( 19.2.7) Y
Si verifica facilmente che sia disponibile questa caratteristica attraverso ifconfig
, dando una configurazione transitoria a un'interfaccia, e quindi visualizzando il suo stato come nel caso seguente:
#
ifconfig eth0
[Invio]
eth0 Link encap:Ethernet HWaddr 00:A0:24:77:49:97 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:87 errors:0 dropped:0 overruns:0 Interrupt:12 Base address:0xff80 |
In questo caso si vede apparire la parola MULTICAST
, che rappresenta l'attivazione della modalitÞ corrispondente, e ciÐ risolve ogni dubbio.
Un server DHCP potrebbe avere qualche difficoltÞ a funzionare correttamente con GNU/Linux. Il server DHCP deve essere in grado di trasmettere dei pacchetti all'indirizzo IP 255.255.255.255, corrispondente idealmente a «tutti i nodi». PuÐ darsi che per poterlo fare, si debba creare un instradamento apposito, su tutte le interfacce di rete attraverso cui il server deve essere raggiungibile e con cui deve poter rispondere.
#
route add
-
host 255.255.255.255 dev eth0
#
route add
-
host 255.255.255.255 dev eth1
L'esempio, in particolare, mostra l'instradamento attraverso le interfacce eth0
e eth1
.
*2*
Nelle versioni 2.2.* del kernel Linux, potrebbe essere necessario abilitare la funzionalitÞ di IP boot agent, attraverso un comando simile a quello seguente:
#
echo 1 > /proc/sys/net/ipv4/ip_bootp_agent
Teoricamente, dovrebbe essere possibile fare in modo che il server DHCP riceva le richieste dei client anche se queste devono attraversare dei router. In pratica, ciÐ richiede che i router siano in grado di trasferire tali richieste, oppure che presso di loro sia presente un servizio intermedio di relay. Comunque, si tratterebbe di una politica amministrativa discutibile.
In generale, il server DHCP dovrebbe essere collocato nella rete fisica che si trova a servire, e le richieste dei client non dovrebbero poter attraversare i router.
L'utilizzo del protocollo DHCP puÐ costituire un problema serio di sicurezza, e in questo senso, sarebbe meglio se i router non fossero in grado di trasferire le connessioni con questo protocollo. |
Normalmente, il protocollo DHCP utilizza la porta 67 UDP, che di solito Õ denominata bootps
. Nel file /etc/inetd.conf
dovrebbe essere presente una riga simile a quella seguente, commentata nello stesso modo.
#bootps dgram udp wait root /usr/sbin/tcpd bootpd |
Si tratta della possibile attivazione del servizio BOOTP, che in condizioni normali si evita di abilitare. Se perÐ fosse abilitata, questo andrebbe in conflitto con i demoni usati per il DHCP, sia nel nodo del server che in quelli dei client.
Attraverso il protocollo DHCP, i client possono ricevere una serie di informazioni utili a definire la loro collocazione nella rete circostante. Il minimo indispensabile di tali informazioni Õ costituito normalmente dall'indirizzo IP e dalla maschera di rete. Dipende dalle caratteristiche del server la possibilitÞ di offrire informazioni aggiuntive. L'elenco seguente Õ solo un esempio delle informazioni che potrebbero essere date:
l'indirizzo IP e la maschera di rete;
l'indirizzo broadcast;
il nome del nodo e il dominio relativo;
l'indirizzo del router predefinito;
l'indirizzo del server DNS;
l'indirizzo del server di stampa;
il dominio NIS.
Il server DHCP che si trova di solito nelle distribuzioni GNU/Linux Õ quello la cui produzione Õ finanziata dal Internet Software Consortium. Viene fatta questa precisazione, perchÈ in seguito verrÞ mostrato l'utilizzo di un client di origine differente.
Questo server si compone del demone dhcpd
, il quale si avvale della configurazione contenuta nel file /etc/dhcpd.conf
, e utilizza il file /etc/dhcpd.leases
per annotare gli indirizzi concessi ai vari client, finchÈ questi restano validi. Quest'ultimo file, /etc/dhcpd.leases
, deve esistere (vuoto) prima che il demone possa essere avviato la prima volta.
Il problema di organizzazione del server si limita quindi alla configurazione del file /etc/dhcpd.conf
. Attualmente, questo tipo di server Õ in corso di sviluppo, e la documentazione relativa alla sua configurazione potrebbe essere un po' indietro rispetto alle effettive potenzialitÞ offerte.
dhcpd [<opzioni>] [<interfacce>...] |
dhcpd
Õ il demone attraverso cui si attiva il servizio DHCP. dhcpd
Õ in grado di offrire anche un servizio BOOTP, se la configurazione contiene le informazioni necessarie per la gestione di questo tipo di protocollo.
In generale, dhcpd
non richiede alcun argomento nella riga di comando, e in tal caso si limita a leggere la configurazione e a porsi in ascolto di tutte le interfacce in grado di gestire il multicast, funzionando come demone. L'indicazione di una o piÛ interfacce di rete, alla fine degli argomenti, permette di specificare dove dhcpd
deve porre la sua attenzione, ignorando le altre eventualmente presenti.
|
dhcpd
Õ normalmente in ascolto della porta UDP numero 67 (bootps
), e ciÐ puÐ essere cambiato attraverso questa opzione.
|
Permette di definire un file di configurazione alternativo a quello predefinito.
|
Permette di definire un file alternativo a quello predefinito per l'accumulo delle informazioni sui nodi che hanno ottenuto un indirizzo IP.
La configurazione con il file /etc/dhcpd.conf
permette di definire il funzionamento di dhcpd
, sia per la gestione del protocollo DHCP, che per BOOTP. Qui si intendono mostrare solo le direttive utili per il protocollo DHCP.
In questo file sono ammessi i commenti, preceduti dal simbolo #
e terminati dalla fine della riga in cui appaiono. õ consentito inoltre spaziare le direttive attraverso righe vuote o righe bianche, che vengono ignorate.
Le direttive sono organizzare in forma di struttura, in cui appare la dichiarazione di ciÐ a cui fa riferimento tale struttura, seguita dall'indicazione di una serie di parametri specifici, racchiusi tra parentesi graffe.
[<parametro-globale>;] [<parametro-globale>;] ... <dichiarazione> { [<parametro-specifico>;] ... [<sotto-dichiarazione> { [<parametro-piÛ-specifico>;] ... }] ... } ... |
Lo schema sintattico Õ un po' confuso a prima vista, ma significa che il file puÐ iniziare con una serie di direttive facoltative contenenti l'indicazione di alcuni parametri (si chiarirÞ in seguito cosa siano), il cui effetto ha valore globale, salvo la possibilitÞ di essere ofuscati da definizioni contrastanti all'interno di direttive di dichiarazione.
Il file deve contenere almeno una direttiva di dichiarazione che puÐ limitarsi a contenere dei parametri specifici, oppure puÐ inglobare delle sotto-dichiarazioni.
La cosa migliore, per cominciare, Õ introdurre un esempio. Si supponga di volere servire la rete locale 192.168.1.0/255.255.255.0, specificando che gli indirizzi da 192.168.1.100 a 192.168.1.199 possono essere gestiti per le attribuzioni dinamiche di indirizzi IP. Il file di configurazione puÐ limitarsi a contenere quanto segue:
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.199; } |
La direttiva di dichiarazione subnet
, come si puÐ intuire, Õ quella piÛ importante per la gestione del DHCP. Nella maggior parte dei casi, la configurazione si comporrÞ di una o piÛ direttive di questo tipo, contenenti probabilmente piÛ parametri di quanto visto nell'esempio.
Prima di mostrare piÛ in dettaglio le altre direttive, viene presentato un altro esempio, che potrebbe soddisfare le esigenze piÛ comuni di chi utilizza dhcpd
(a parte i valori particolari che sono stati indicati). Rispetto all'esempio precedente si nota la presenza di due intervalli di indirizzi IP da utilizzare per l'attribuzione automatica; per il resto, momentaneamente, dovrebbe essere intuitivo il significato.
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.149; range 192.168.1.200 192.168.1.249; default-lease-time 604800; # una settimana max-lease-time 2592000; # 30 giorni option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.1; option domain-name-servers 192.168.1.1, 192.168.1.2; option domain-name "brot.dg"; } |
Prima di proseguire, si osservi che i parametri sono terminati dal punto e virgola. õ ammesso indicare piÛ parametri sulla stessa riga, anche se in generale Õ preferibile evitarlo.
shared
|
Come si osserva dalla sintassi, una dichiarazione shared
Õ fatta per l'inclusione di altre dichiarazioni, e non solo parametri.
-
network
Permette di specificare una rete condivisa, nel senso di due o piÛ reti logiche che si trovano sulla stessa rete fisica. In questa situazione, Õ normale che questa direttiva includa l'indicazione di piÛ dichiarazioni subnet
, una per ogni rete logica. Il problema, semmai, Õ che quando si collocano dei nodi nuovi nella rete condivisa, non Õ possibile distinguere a quale delle reti logiche dovrebbero appartenere; di conseguenza, ottengono semplicemente il primo indirizzo libero nell'insieme globale.
group { [<parametro>;] ... <dichiarazione> { ... } ... } |
La dichiarazione group
serve solo a definire un raggruppamento di dichiarazioni, a cui attribuire una serie di parametri in modo predefinito. Evidentemente si tratta dei parametri che precedono le direttive delle dichiarazioni annidate.
subnet <indirizzo-di-rete> netmask <maschera-di-rete> { [<parametro>;] ... } |
La dichiarazione subnet
serve a contenere l'indicazione di parametri specifici per la sottorete. Permette di definire una sottorete, indicata attraverso l'indirizzo e la maschera di rete.
default |
Definisce il tempo predefinito per la scadenza dell'associazione tra nodo e indirizzo IP assegnato. Viene utilizzato se il client non richiede una durata differente.
max |
Definisce il tempo massimo per la scadenza dell'associazione tra nodo e indirizzo IP assegnato. Il client non puÐ ottenere un tempo maggiore (che comunque puÐ essere rinnovato).
range <indirizzo-ip-iniziale> <indirizzo-ip-finale>; |
Indica l'intervallo di indirizzi IP utilizzabili in modo dinamico. PiÛ intervalli separati possono essere indicati utilizzando piÛ volte questo tipo di parametro.
option subnet
|
Permette di specificare la maschera di rete, modificando eventualmente quanto stabilito in modo predefinito.
option broadcast
|
Permette di definire l'indirizzo broadcast.
option routers <indirizzo-ip-del-router>; |
Permette di indicare l'indirizzo IP del router predefinito.
option domain |
Permette di indicare un elenco di indirizzi di server DNS. Gli indirizzi sono separati attraverso una virgola.
option domain
|
Stabilisce il nome di dominio. Di solito si tratta del dominio della rete o della sottorete a cui si fa riferimento.
Nello stesso pacchetto del server DHCP descritto nelle sezioni precedenti, si trova normalmente il demone dhcrelay
. Questo Õ in grado di fungere da ripetitore per una richiesta fatta da un client DHCP, quando questa, diversamente, non puÐ attraversare un router.
All'inizio del capitolo si Õ accennato al fatto che sarebbe meglio evitare che un servizio DHCP possa superare i router; tuttavia, chi desidera utilizzare questa possibilitÞ lo puÐ fare attraverso questo programma.
dhcrelay [<opzioni>] <server-dhcp>... |
dhcrelay
Õ un demone in grado di ritrasmettere le richieste fatte da un client DHCP a un server che altrimenti non sarebbe raggiungibile. Nello stesso modo, le risposte vengono rinviate all'origine.
dhcrelay
non richiede configurazione; l'unica cosa indispensabile Õ l'indicazione di almeno un server DHCP alla fine della riga di comando.
|
Permette di specificare un numero di porta differente da quello standard (67).
|
Permette di indicare in modo esplicito un'interfaccia di rete da cui dhcrelay
puÐ aspettarsi delle richieste da parte di client DHCP. Per indicare piÛ interfacce, occorre usare piÛ volte questa opzione. Questa opzione Õ utile in particolare per escludere eventualmente un'interfaccia di una rete fisica su cui potrebbe esserci giÞ il server DHCP relativo, in grado di intervenire da solo.
Il client DHCP ha il compito di interpellare un server attraverso una chiamata circolare fatta nella rete fisica in cui si trova lo stesso client, e di ottenere da questo l'indicazione del numero IP da utilizzare, assieme ad altre informazioni di contorno eventuali. Successivamente, ha il compito di ripresentarsi presso il server periodicamente, per evitare che scada il tempo concesso per l'identificazione che gli Õ stata attribuita (lease).
Il problema maggiore, semmai, Õ fare in modo che il sistema presso cui Õ in funzione il client DHCP sia in grado di adeguarsi alle informazioni ottenute in questo modo. Non basta sapere quale indirizzo IP si puÐ utilizzare per una certa interfaccia di rete, occorre anche configurarla, e definire l'instradamento. A questo proposito, il client DHCP Õ un punto delicato, e la scelta, ammesso che ce ne sia piÛ di una, va fatta pensando all'integrazione con il proprio sistema.
Nelle distribuzioni GNU/Linux si trova normalmente il programma dhcpcd
che non fa parte dello stesso pacchetto del server giÞ descritto, ed Õ anche ciÐ che verrÞ presentato in questo capitolo.
dhcpcd [<opzioni>] [<interfaccia>] |
dhcpcd
Õ un demone in grado di compiere il ruolo di client DHCP. õ in grado di ottenere l'indicazione dell'indirizzo IP, della maschera di rete, dell'indirizzo del router, del server DNS oltre ad altre informazioni eventualmente fornite.
Il pregio principale di questo client Õ quello di essere capace di riconfigurare l'interfaccia di rete e di ridefinire l'instradamento in modo autonomo, senza richiedere la predisposizione di script appositi o di qualunque apparato di contorno.
Il limite di questo programma sta nel fatto di poter intervenire su una sola interfaccia di rete, che in modo predefinito Õ eth0
.
Per quanto riguarda l'informazione del DNS, dhcpcd
crea un file che riproduce il contenuto di /etc/resolv.conf
; si tratta di /etc/dhcpc/resolv.conf
. Per le altre informazioni, comprese quelle sull'interfaccia di rete e sull'instradamento, crea un altro file che ha l'aspetto di un pezzo di script di shell, che potrebbe essere utilizzato in qualche tipo di procedura di inizializzazione del sistema. Si tratta di /etc/dhcpc/hostinfo-
<interfaccia>.
|
Invia un segnale SIGTERM
al processo dhcpcd
in funzione attualmente.
|
Specifica il tempo di lease da richiedere al server. Il server potrÞ accettarlo o concedere un tempo inferiore, a seconda della sua configurazione.
#
dhcpcd
Avvia dhcpcd
in modo normale, come demone, allo scopo di ottenere un indirizzo per l'interfaccia eth0
.
#
dhcpcd eth1
Avvia dhcpcd
come demone, in modo da ottenere un indirizzo per l'interfaccia eth1
.
Se il server DHCP fornisce le indicazioni sui server DNS, ed eventualmente anche il dominio di competenza, dhcpcd
Õ in grado di creare il file /etc/dhcpc/resolv.conf
, il cui scopo Õ di sostituirsi a quello omonimo collocato nella directory /etc/
.
Se si vuole sfruttare questa opportunitÞ, conviene sostituire il file /etc/resolv.conf
con un collegamento simbolico a questo file generato da dhcpcd
.
#
mv /etc/resolv.conf /etc/resolv.conf.orig
#
ls
-
s /etc/dhcpc/resolv.conf /etc/resolv.conf
Il file /etc/dhcpc/hostinfo-
<interfaccia> viene creato da dhcpcd
per contenere tutte le informazioni riferite a un'interfaccia particolare. Per esempio, quando si interviene su eth0
, si otterrÞ il file /etc/dhcpc/hostinfo-eth0
.
Il contenuto del file Õ realizzato in modo da essere compatibile con gli script per una shell derivata da quella di Bourne (come Bash, o altre meno sofisticate), per cui Õ facile inglobare tale file in uno script di una qualche procedura.
---------------------------
Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ pluto.linux.it
1.) Il termine inglese fa intendere che il client «affitta» la sua posizione nella rete.
2.) Questo problema di GNU/Linux potrebbe essere risolto in modo piÛ elegante nel prossimo futuro.