Tijd server
Hoe duur je PC ook was, je raakt het gevoel dat de interne klok niet goed
is maar niet kwijt. Na een paar dagen werken kan het een paar seconden er
naast zitten...
Nooit meer je klok instellen
Een goed werkende klok is noodzakelijk voor een computer in een netwerk.
Hoe kun je weten welke versie van een document de nieuwste is als je meer
dan 1 kopie krijgt?
Verder gebruiken veel beveiligings logs de timestamp (tijdstempel) bij de
controle of pakketten niet onderschept en (mogelijk) veranderd zijn.
Maar meestal is het teveel werk om iedere paar dagen de klok opnieuw in te
stellen, alleen maar omdat de fabrikant inferieure hardware heeft gebruikt
waarbij de klok te snel of te traag is na een korte tijd.
Een lastig probleem als niet enkele briljante programmeurs er een
oplossing voor hadden gevonden. Op het Internet zijn speciaal hiervoor
tijdservers te vinden. De serverklokken worden al-dan-niet direct
gecorrigeerd door een atoomklok en kunnen via een speciaal protocol andere
computers de tijd vertellen.
Dit is gecompliceerder dan het klinkt. Zo moet de informatie van de server
binnen een eindige tijd (de betekenis daarvan is bekend sinds Einstein
zijn relativiteitstheorie publiceerde) naar de client zijn overgebracht.
Om het zelfs nog lastiger te maken, moet je er ook nog aan denken dat het
Internet niet is ontworpen om altijd even snel te zijn...
Hoe precies de tijd informatie is, hangt sterk af van de gebruikte
tijdserver en kan tot op de microseconde nauwkeurig zijn.
Deze precisie is meestal alleen nodig voor onderzoeks-instituten die erg
nauwkeurige timestamps nodig hebben.
Voor de 'standaard' desktop PC volstaat een accuratie van een tiende
seconde. Daarom zijn de high-precision tijdservers (zgn Stratum-1-Server)
beveiligd met wachtwoorden, zodat niet iedereen deze servers kan overladen
met aanvragen.
Tijdservers die hun signaal van een stratum-1-server krijgen in plaats van
een atoomklok of GPS-signaal (zgn Stratum-2-Server) zijn meestal
publiekelijk beschikbaar (zonder wachtwoord beveiliging) en kunnen
gebruikt worden als tijdserver.
Een aantal tijdservers kun je vinden op:
Installatie
De benodigde software kun je vinden op www.ntp.org. Verder is er op moment van
schrijven een nieuwe versie van het transmissie protocol beschikbaar.
Pakketten als xntp3-x.xx gebruiken het oude protocol, nieuwe versies heten
ntp-4.0.*.tar.gz. De nieuwe versie 4 is achterwaards compatibel met de
'oude' versie, je kunt (en zou) de nieuwe versie gebruiken.
Veel distributies komen met een versie 3 ntp en door een recent ontdekte
security bug is het omslachtige werk van broncode compileren de moeite
waard.
Na downloaden en uitpakken van de broncode naar de /tmp-directory:
>> tar zxvf ntp-4.0.*.tar.gz -C /tmp/start je het configure-script:
>> cd /tmp/ntp-4.0.99k23/ >> ./configureAls dit script klaar is met zijn systeemcontrole, compileer je de broncode met
>> makeen kopieer je (niet per se nodig) naar de voorgedefieerde directories met
>> make installHet configuratie bestand - /etc/ntp.conf - zou in ieder geval de volgende regels moeten bevatten:
| /etc/ntp.conf |
server timeserver1.uni-sonstwo.de driftfile /etc/ntp.drift |
Het valt aan te raden om meer dan een tijdserver op te geven zodat de software voor zichzelf kan beslissen welke het meest accuraat is. Welke server gebruikt moet worden is een wetenschap op zich. Het beste kun je er een pakken die dicht bij je staat. Een selectie van vrij-toegankelijke Duitse tijdservers is bijvoorbeeld:
server ntp0.fau.de server ntps1-0.uni-erlangen.de server ntps1-1.uni-erlangen.de server ntps1-1.rz.Uni-Osnabrueck.deDit configuratiebestand stelt het programma in zodat het onmiddelijk kan worden gebruikt. Start (als root) het programma ntpd-subdirectory met de volgende opties:
>> cd ntpd >> ./ntpd -d -l/var/log/ntp.logJe zou een uitvoer als de volgende moeten krijgen:
| Messages |
create_sockets(123) interface |
Het logbestand (/var/log/ntp.log) zou iets als dit moeten bevatten:
ntpd[1733]: logging to file /var/log/ntp.log ntpd[1733]: ntpd 4.0.99k23 Sam Apr 14 22:06:04 CEST 2001 (1) ntpd[1733]: signal_no_reset: signal 13 had flags 4000000 ntpd[1733]: precision = 35 usec ntpd[1733]: kernel time discipline status 0040 ntpd[1733]: frequency initialized -26.854 from /etc/ntp.driftNa een korte tijd, zet ntpd de systeemtijd op de exacte waarde. Dit gebeurt in kleine stappen om problemen te voorkomen met gemiste of dubbele seconden.
Als het verschil tussen de precieze tijd en de systeemklok groter is dan 1000 seconden, neemt ntpd aan dat het probleem groter is dan alleen een slechte hardware klok en sluit het zichzelf af zonder de tijd in te stellen. Om ntpd te forceren zelfs de tijd in stellen als het verschil zo groot is, kun je de -g optie gebruiken.
Om de klok automatisch tijdens het opstarten goed te zetten, voeg je de volgende regel toe aan je /sbin/init.d/boot.local (pas wel het pad aan aan jouw systeem):
/usr/local/ntp-4.0.99k23/ntpd/ntpd -g -l/var/log/ntp.logof bouw een init-script. Met SuSE 7.0 zou er het als volgt uit kunnen zien:
| /sbini/init.d/ntpd |
. /etc/rc.status
. /etc/rc.config
base=${0##*/}
link=${base#*[SK][0-9][0-9]}
test $link = $base && START_FOO=yes
test "$START_FOO" = yes || exit 0
rc_reset
case "$1" in
start)
echo -n "Starting service nptd"
startproc /pfad/zu/ntp-4.0.99k23/ntpd/ntpd -g -l/var/log/ntp.log
# Onthoudt de status en wees verbose
rc_status -v
;;
stop)
echo -n "Shutting down service foo"
## Stop daemon met killproc(8) en als dit faalt, echo de return
## waarde.
killproc -TERM /pfad/zu/ntp-4.0.99k23/ntpd/ntpd
# Onthoudt status en wees verbose
rc_status -v
;;
restart)
## Als de eerste OK verloopt en start de tweede, als de eerste
## faalde, geef dan de return waarde.
$0 stop && $0 start
# Onthoudt status en wees stil
rc_status
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
rc_exit
|
NTP in netwerken
In grotere netwerken heeft het geen nut om voor ieder werkstation de tijd
te halen van een officiële Stratus-2-Server. De server zou al snel
overbelast raken. Het is aan te raden een server in het lokale netwerk op
te zetten en die dan te gebruiken (een zgn. Stratus-3)tijdserver.
Iedere computer met ntpd kan door anderen worden gebruikt als
tijdserver.
In grote netwerken kan het nuttig zijn om meer dan 1 tijdserver op te zetten die hun tijd van verschillende stratus-2- (of zelfs Stratus-1-) servers betrekken om zo de betrouwbaarheid te vergroten.
Wil je bijvoorbeeld in je lokale netwerk de computer met het IP 192.168.0.1 als tijdserver gebruiken, dan hoeft /etc/ntpd.conf op de client alleen deze computer als server te bevatten:
| /etc/ntpd.conf |
server 192.168.0.1 driftfile /etc/ntp.drift |
De officiële Stratus-2-Server wordt zo ontlast terwijl iedere client nog steeds een accurate tijd krijgt.