[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 297.   Allineamento della data e dell'orario attraverso la rete

Il problema della sincronizzazione dell'orologio interno all'elaboratore con quello di altri nodi di rete può essere risolto almeno in due modi differenti: attraverso il protocollo TIME di Rdate e il protocollo NTP. Il protocollo NTP, a differenza di Rdate, si presta per la realizzazione di un sistema articolato di elaboratori che mantengono una sincronizzazione molto precisa tra di loro; in questo capitolo, il protocollo NTP viene visto solo per ottenere l'allineamento di un nodo di rete locale, con il quale si possono poi allineare gli altri nodi della propria rete, mentre si omette la descrizione della procedura necessaria a partecipare al sistema mondiale di gestione di questo servizio.

297.1   Rdate

Quasi tutti i nodi di rete hanno un orologio interno e offrono il servizio TIME attraverso la porta 37, come si vede dal file /etc/services:

time    37/tcp  timeserver
time    37/udp  timeserver

In un sistema Unix tipico, questo servizio è offerto direttamente dal supervisore dei servizi di rete e nel caso di Inetd, il file di configurazione /etc/inetd.conf contiene normalmente la riga seguente:

time            stream  tcp     nowait  root    internal

Come si può vedere, non viene avviato nessun demone esterno per la sua gestione.

Per attingere al servizio, si usa normalmente Rdate, con l'eseguibile rdate, che può prevedere la presenza di opzioni:

rdate [opzioni] nodo [porta]

In mancanza dell'indicazione del numero della porta da contattare presso il nodo remoto, si intende la porta 37; in mancanza di opzioni, si intende aggiornare l'orologio locale contestualmente all'interrogazione del servizio:

Opzione Significato mnemonico Descrizione
-p
print Si limita a visualizzare la data e l'orario dell'elaboratore remoto.
-s
set Si limita a impostare l'orologio locale con la data e l'orario dell'elaboratore remoto, senza visualizzare l'informazione.
-a
adjust Imposta l'orologio locale in modo graduale.

Generalmente, non ci si limita a utilizzare Rdate per allineare l'orologio dell'elaboratore locale con quello di un nodo di rete remoto, ma si provvede anche ad aggiornare l'orologio hardware di conseguenza, come mostra l'esempio seguente:

rdate dinkel.brot.dg[Invio]

Mon May 12 17:04:21 2003

clock -u -w[Invio]

Se al posto del programma clock si dispone di hwclock, l'aggiornamento dell'orologio hardware si ottiene così:

hwclock -u -w[Invio]

Come si vede, l'opzione -u implica che l'orologio hardware funzioni facendo riferimento al tempo universale.

Nella sezione successiva viene descritto l'uso del protocollo NTP; tuttavia, se dovesse risultare difficile ottenere accesso da un servente NTP pubblico, si può tentare di usare Rdate per ottenere l'ora esatta da un nodo, che si presume possa offrire un orario abbastanza esatto:

rdate time.ien.it[Invio]

297.2   NTP

Il protocollo NTP, Network time protocol consente di gestire una serie di nodi di rete in grado di sincronizzare tra loro l'orologio interno di ognuno.

La dipendenza dall'esterno per quanto riguarda la gestione degli orologi dei propri elaboratori, può costituire un problema di sicurezza. A questo proposito, il protocollo NTP offre anche la possibilità di utilizzare comunicazioni cifrate e altri sistemi di sicurezza, che comunque qui non vengono descritti.

Per l'accesso a un servente NTP in qualità di cliente e per la gestione di servente in proprio, si utilizza generalmente la «distribuzione NTP», (1) rappresentata in pratica da un pacchetto che dovrebbe chiamarsi Ntp, o qualcosa del genere. I componenti più importanti di questa distribuzione sono il demone ntpd (oppure xntpd) e il programma ntpdate.

Tabella 297.5. Elenco di nomi di dominio associati normalmente a serventi NTP accessibili senza autorizzazione.

Area Indirizzo
indirizzo generico
pool.ntp.org
Asia
asia.pool.ntp.org
Europa
europe.pool.ntp.org
Oceania
oceania.pool.ntp.org
America del nord
north-america.pool.ntp.org
Austria
at.pool.ntp.org
Australia
au.pool.ntp.org
Canada
ca.pool.ntp.org
Svizzera
ch.pool.ntp.org
Germania
de.pool.ntp.org
Danimarca
dk.pool.ntp.org
Spagna
es.pool.ntp.org
Finlandia
fi.pool.ntp.org
Francia
fr.pool.ntp.org
Italia
it.pool.ntp.org
Lussemburgo
lu.pool.ntp.org
Messico
mx.pool.ntp.org
Malaysia
my.pool.ntp.org
Olanda
nl.pool.ntp.org
Norvegia
no.pool.ntp.org
Nuova Zelanda
nz.pool.ntp.org
Filippine
ph.pool.ntp.org
Polonia
pl.pool.ntp.org
Svezia
se.pool.ntp.org
Slovenia
si.pool.ntp.org
Gran Bretagna
uk.pool.ntp.org
USA
us.pool.ntp.org

297.2.1   Accesso a un servente NTP

Per lo scopo di questo capitolo, si accede a un servente NTP solo per ottenere l'informazione sull'ora esatta. Questo si ottiene molto facilmente con il programma ntpdate, che è anche in grado di aggiustare l'orario del sistema. Tuttavia, prima di vedere come funziona, occorre sapere dove è possibile ottenere tale servizio e quali sono le regole di comportamento.

Trascurando i problemi legati alla gestione dei serventi NTP pubblici, quello che c'è da sapere è che questi sono organizzati in modo gerarchico a due strati. L'accesso ai serventi del primo strato è da escludere in generale, a meno che questo serva per gestire un servizio privato dal quale attingono un numero molto grande di altri clienti; l'accesso ai serventi del secondo strato è consentito quasi a tutti (ognuno ha però la sua politica) e in generale il risultato è accurato in modo più che sufficiente. Una volta chiarito che si accede di norma solo ai serventi di secondo livello, è opportuno sceglierne alcuni relativamente vicini (per quanto questo non sia indispensabile). L'elenco dei serventi NTP, con l'indicazione delle politiche rispettive, può essere trovato a partire dal sito <http://www.ntp.org>; tuttavia, per le esigenze dell'utente finale tipico, è sufficiente fare riferimento all'indirizzo pool.ntp.org.

L'indirizzo pool.ntp.org si traduce in una serie di indirizzi IP alternativi, organizzati in modo tale che la trasformazione dell'indirizzo in nome generi ogni volta un indirizzo differente.

Ai fini degli esempi che si vogliono mostrare, viene utilizzato ripetutamente l'indirizzo pool.ntp.org. A titolo di verifica si può controllare a cosa corrisponde; si potrebbe ottenere un elenco simile a quello che appare di seguito:

host pool.ntp.org[Invio]

pool.ntp.org has address 203.109.252.7
pool.ntp.org has address 206.168.231.98
pool.ntp.org has address 213.96.80.106
pool.ntp.org has address 213.239.193.168
pool.ntp.org has address 216.165.129.244
pool.ntp.org has address 24.34.79.42
pool.ntp.org has address 62.101.81.203
pool.ntp.org has address 62.212.114.68
pool.ntp.org has address 65.211.109.11
pool.ntp.org has address 69.17.92.121
pool.ntp.org has address 129.240.64.3
pool.ntp.org has address 130.60.7.44
pool.ntp.org has address 130.94.201.36
pool.ntp.org has address 198.144.202.250
pool.ntp.org has address 202.74.170.194

Per acquisire l'ora esatta da uno o più serventi NTP e per aggiustare di conseguenza l'orario del sistema locale, si può usare ntpdate:

ntpdate [opzioni] servente_ntp...

L'utilizzo di ntpdate è adatto particolarmente per gli elaboratori che sono connessi alla rete esterna solo saltuariamente, dal momento che si può effettuare l'allineamento esattamente nel momento in cui ciò è possibile. Con l'uso delle opzioni necessarie, si può evitare che ntpdate allinei l'orario del sistema, limitandosi a mostrare il risultato; in questi casi, può essere utilizzato anche dagli utenti comuni e non soltanto da root.

ntpdate non può essere avviato se è già in funzione il demone ntpd, o un altro analogo.

Tabella 297.7. Alcune opzioni della riga di comando di ntpdate.

Opzione Significato mnemonico Descrizione
-b
In condizioni normali, ntpdate può scegliere di aggiustare l'orario aggiungendo o sottraendo secondi, oppure intervenendo sulla frequenza della base dei tempi. Per evitare che venga scelta la seconda ipotesi, si utilizza questa opzione, che limita la possibilità alla modifica dell'orario senza altri interventi. In condizioni normali, dovrebbe essere preferibile l'uso di ntpdate con questa opzione.
-d
debug Invece di allineare l'orario del sistema, vengono mostrati i passi compiuti da ntpdate, a scopo diagnostico.
-q
query Invece di allineare l'orario del sistema, mostra solo il risultato dell'interrogazione dei serventi.
-s
syslog Invece di mostrare i messaggi sullo schermo, li devia nel registro del sistema, cosa che facilita l'utilizzo di ntpdate all'interno di script avviati automaticamente in circostanze determinate.

Gli esempi seguenti completano la descrizione del funzionamento di ntpdate.

297.2.2   Preparazione di un servente NTP per l'utilizzo locale

La preparazione di un servente NTP per offrire il servizio solo alla propria rete locale, senza pretendere di contribuire alla rete NTP pubblica, è un'operazione abbastanza semplice. In particolare, se il nodo di rete che svolge tale ruolo è connesso continuamente alla rete esterna, si può usare lo stesso demone ntpd per allineare l'orologio dell'elaboratore in cui si trova a funzionare, senza bisogno di utilizzare ntpdate, che tra le altre cose non può essere avviato se è già attivo il demone.

Il funzionamento del demone ntpd dipende dalla configurazione stabilita attraverso il file /etc/ntp.conf, mentre il programma ntpdate ignora questo file completamente.

Il file /etc/ntp.conf è il più importante per ciò che riguarda il funzionamento del demone ntpd. È composto da direttive che occupano ognuna una riga; i commenti sono preceduti dal simbolo # e nello stesso modo sono ignorate le righe bianche e quelle vuote. Senza entrare nel dettaglio delle varie direttive disponibili, viene descritto un esempio di massima.

# /etc/ntp.conf

logfile /var/log/xntpd
driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# Serventi
server pool.ntp.org
server pool.ntp.org
server pool.ntp.org

L'elenco seguente descrive alcune di queste direttive del file di configurazione.

Direttiva Descrizione
logfile file_delle_registrazioni
Con la direttiva logfile viene dichiarato il percorso del file delle registrazioni. Se non venisse utilizzata tale direttiva, i messaggi di questo tipo sarebbero diretti normalmente al registro del sistema. Nel caso dell'esempio, si fa riferimento al file /var/log/xntpd.
driftfile file_dello_scarto
Con la direttiva driftfile viene dichiarato il percorso del file utilizzato da ntpd per annotarsi lo scarto tra la frequenza dell'oscillatore locale e ciò che dovrebbe essere in realtà. Dal momento che ntpd deve poter cambiare nome al file e ricrearlo nuovamente, non può trattarsi di un collegamento simbolico. In generale, è sufficiente lasciare che sia ntpd a occuparsi di creare e gestire questo file.
statsdir directory_dei_file_statistici
Con la direttiva statsdir viene dichiarato il percorso di una directory all'interno della quale possono essere creati dei file di informazioni statistiche, dichiarati a loro volta attraverso le direttive statistics e filegen.
statistics tipo_statistica...
I tipi di informazioni statistiche che si vogliono accumulare sono definiti attraverso la direttiva statistics, per mezzo di parole chiave prestabilite: loopstats, peerstats e clockstats. In generale, conviene attivare la gestione di tutti i tipi di informazioni statistiche, così come si vede nell'esempio.
filegen tipo_statistica \
  \[file file] \
  \[type tipo_di_analisi] \
  \[enable|disable]
Per abbinare all'accumulo di un tipo di statistica un file vero e proprio, si utilizza la direttiva filegen. Nell'esempio vengono creati tre file, con il nome corrispondente al tipo di statistica di cui si occupano.
Per la precisione, la direttiva filegen serve anche per definire il modo in cui vanno gestite diverse generazioni dei file che vengono creati. In pratica, il tipo stabilito attraverso l'argomento dell'opzione type, permette di indicare con quale frequenza devono essere archiviati i file. L'esempio mostra la richiesta di utilizzare generazioni giornaliere (l'argomento day) e questo, salvo esigenze particolari, dovrebbe andare bene in generale.
server nodo [prefer]
Le direttive più importanti per lo scopo che ci si prefigge in questo capitolo, sono quelle che stabiliscono i nomi dei serventi di riferimento per ottenere le informazioni sull'orario. In generale, più sono questi serventi, meglio è.
Se uno di questi serventi viene considerato come quello più attendibile, si può aggiungere la parola chiave prefer, come si vede nello schema sintattico.

Il demone ntpd (oppure xntpd) serve da una parte per allineare continuamente l'orario del sistema locale, quando questo si trova connesso costantemente a una rete che gli consente di accedere ai suoi serventi di riferimento, in base alla configurazione del file /etc/ntp.conf, con le direttive server. Dall'altra parte, questo demone offre anche il servizio NTP, basandosi sull'orologio del sistema locale:

ntpd [opzioni]

In una rete chiusa, in cui non ci sia la possibilità di raggiungere altri serventi NTP, il demone ntpd può essere utile per allestire il proprio servizio NTP locale, in modo da assicurare la sincronizzazione degli altri elaboratori della propria rete.

All'interno di questi due estremi, in una rete in cui un nodo abbia saltuariamente accesso alla rete esterna, quel nodo può essere allineato (quanto possibile), al tempo di riferimento ottenuto dall'esterno, fungendo da servente locale per l'allineamento successivo della propria rete. Tuttavia, in questo caso si aggiunge il problema di procedere all'allineamento in base alle fonti esterne, esattamente nel momento in cui il collegamento è disponibile; ma per questo si utilizza prevalentemente il programma ntpdate, che però non può essere avviato quando il demone è già in funzione. Il problema viene riproposto in questo stesso capitolo.

Opzione Descrizione
-c file_di_configurazione
In generale, il file di configurazione utilizzato da ntpd è /etc/ntp.conf. Con questa opzione si può indicare un file differente, oppure si può confermare la collocazione standard, nel caso i sorgenti siano stati compilati indicando posizioni differenti.
-d
La presenza di questa opzione, che può essere indicata anche ripetutamente, aumenta il livello di dettaglio delle informazioni diagnostiche che si ottengono (nel registro del sistema o in un altro file stabilito in base alla configurazione).
-l file_delle_registrazioni
Equivalente alla direttiva logfile nel file di configurazione.
-f file_dello_scarto
Equivalente alla direttiva driftfile nel file di configurazione.
-s directory_dei_file_statistici
Equivalente alla direttiva statsdir nel file di configurazione.

L'esempio seguente mostra uno script molto semplificato per l'avvio e la conclusione del servizio NTP, attraverso il controllo del demone ntpd. In pratica, il demone viene avviato senza opzioni di alcun tipo, confidando che legga correttamente il file di configurazione.

#!/bin/sh

test -f /usr/sbin/ntpd || exit 0

case "$1" in
  start)
        echo -n "Avvio del servizio NTP: "
        /usr/sbin/ntpd
        echo
        ;;
  stop)
        echo -n "Disattivazione del servizio NTP: "
        killall ntpd
        echo
        ;;
  *)
        echo "Utilizzo: ntpd {start|stop}"
        exit 1
esac

Alcune distribuzioni GNU/Linux predispongono uno script del genere, in cui, prima dell'avvio del demone ntpd eseguono ntpdate per iniziare con un orologio già allineato. In generale, questa potrebbe essere una buona idea; tuttavia, se questo script viene avviato quando non si può accedere ai serventi NTP a cui si vuole fare riferimento, ntpdate blocca la procedura di avvio troppo a lungo.

Il pezzo di script che segue rappresenta proprio il caso in cui viene avviato anche ntpdate prima di mettere in funzione ntpd. Si osservi il fatto che nella riga di comando devono apparire i serventi NTP, perché il file di configurazione di ntpd non lo riguarda.

  start)
        echo -n "Avvio del servizio NTP: "
        /usr/sbin/ntpdate -b -s pool.ntp.org pool.ntp.org pool.ntp.org
        /usr/sbin/ntpd
        echo
        ;;

297.2.3   Gestire una rete locale collegata saltuariamente alla rete esterna

Da quanto scritto fino a qui, in questo capitolo dedicato a NTP, si dovrebbe riuscire già a immaginare in che modo ci si potrebbe comportare per allestire un servizio NTP locale, sfruttando un accesso esterno saltuario, per esempio attraverso una connessione PPP con una linea commutata (PSTN o ISDN). Di certo, conviene collocare il servente locale nell'elaboratore che compie saltuariamente questa connessione e che in quel momento ha un accesso normale all'esterno: nel momento in cui si può accedere alla rete esterna, si può utilizzare ntpdate per allineare l'orario dell'elaboratore stesso.

Come è già stato accennato, si pone un problema a causa del fatto che lo stesso elaboratore deve avere in funzione il demone ntpd, che impedisce l'avvio di ntpdate. Evidentemente, per risolvere il problema, occorre giocare sulla conclusione e riavvio del demone. La soluzione proposta è molto semplice: per prima cosa, lo script che avvia il demone ntpd nella procedura di inizializzazione del sistema, non deve comprendere anche l'avvio di ntpdate; quindi occorre predisporre l'avvio di ntpdate solo quando la connessione PPP è disponibile (capitolo 280 e successivi).

#!/bin/sh

/etc/init.d/ntpd stop
/usr/sbin/ntpdate -b -s pool.ntp.org pool.ntp.org pool.ntp.org
/etc/init.d/ntpd start

Quello che si vede è uno script molto semplice, il cui scopo è quello di disattivare il servizio NTP, richiamando lo script /etc/init.d/ntpd con l'argomento stop, prima di avviare ntpdate (eventualmente questo script potrebbe trovarsi in un'altra directory e anche il suo nome potrebbe essere differente). Dopo l'allineamento, il servizio NTP viene riavviato in modo analogo.

Per fare in modo che tutto avvenga automaticamente, questo script potrebbe essere avviato attraverso /etc/ppp/ip-up, che è un altro script avviato dal demone pppd ogni volta che si attiva una connessione PPP.

La predisposizione dei clienti della rete locale non dovrebbe costituire alcun problema: si dispone di un solo servente di riferimento e ci si può limitare a utilizzare ntpdate, eventualmente riavviandolo periodicamente attraverso Cron.

Si osservi che per l'aggiornamento dell'orario nell'ambito di una rete locale, può essere più conveniente l'uso di Rdate, che ha il vantaggio di non interferire con NTP.

297.3   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) NTP   software libero con licenza speciale


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome allineamento_della_data_e_dell_x0027_orario_attraverso_la_re.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!