Overal de juiste tijd met NTP
08-05-2004
Ben je het beu om geregeld de klok van je servers en clients gelijk te zetten ? Of vind je het vervelend emails te krijgen met een foute verzendtijd en wil je ervoor zorgen dat jouw mails een juiste tijdsaanduiding gebruiken ?
In dit artikel zetten we een NTP tijdsserver op die als referentieklok voor je bedrijfs- of thuisnetwerk kan fungeren.
Werking NTP
Voor we aan de configuratie van de NTP server beginnen, bekijken we even de werking van NTP en structuur van het NTP servernetwerk.
Het NTP servernetwerk bestaat uit een hiëarchie van servers die NTP diensten leveren. Aan de top van de serverhiëarchie bevinden zich de stratum 1 servers, deze hebben een directe verbinding met een externe preciesieklok of ontvangen bijvoorbeeld via een antenne een accuraat tijdssignaal. Deze tijdsbronnen behoren tot stratum 0.
Hoe verder de servers verwijderd zijn van de preciesieklokken hoe hoger hun stratum. De stratum 2 servers maken dus gebruik van stratum 1 servers, enzovoort.
Om ervoor te zorgen dat de publieke NTP servers niet overbelast raken wordt er verwacht van de gebruikers van de tijdsdiensten dat zij niet al hun clients rechtstreeks laten synchroniseren met de publieke servers. Daarom beschrijft dit artikel hoe je een NTP server opzet die de publieke servers gebruikt als tijdsbron en op zijn beurt NTP diensten aanbiedt aan alle clients op zijn bedrijfs- of thuisnetwerk.
De netwerktrafiek die door de NTP veroorzaakt wordt is minimaal. Een tijdspakket is 90 bytes groot en wordt maximaal 1 keer per minuut en minimaal 1 keer per 17 minuten verstuurd. Een NTP service kan dus zonder problemen opgezet worden op een reeds behoorlijk bezette server.
Setup server
De NTP server die we in dit artikel opzetten is NTP client van 2 publiek beschikbare stratum 2 NTP servers en hij is NTP server voor ons private netwerk. Het private netwerk uit het voorbeeld gebruikt een 24 bits adres range uit de gereserveerde IP 4 adressen ( 192.168.1.0/24 ). Het IP adres van de NTP server is 192.168.1.1
Als de NTP server achter een firewall zit moet je ervoor zorgen dat de firewall NTP pakketten (UDP poort 123) doorlaat naar en van de NTP server.
Voor we aan de setup van de NTP server kunnen beginnen moeten we ten minste 2 geschikte NTP servers vinden. Rekening houdend met de filosofie van het publieke NTP server netwerk is het dus aangewezen om de NTP servers van je provider te gebruiken. Indien je provider deze dienst niet aanbiedt kan je een tweetal stratum 2 servers zoeken in de lijst die beschikbaar is bij het Network Time Protocol project. Hou er wel rekening mee dat sommige NTP service providers vragen om hen te verwittigen als je hun NTP servers gebruikt. In de voorbeeld configuratie die in dit artikel uitgewerkt wordt gebruiken we de NTP servers van de Europese Gemeenschap. Deze servers hebben een open access policy wat wil zeggen dat ze vrij gebruikt mogen worden.
De eerste stap in het opzetten van de NTP server is natuurlijk het installeren van de ntp software. De meeste hedendaagse Linux distributies en Unices hebben reeds standaard de NTP server software beschikbaar. Als dit niet het geval is of indien je de laatste versie van NTP wil gebruiken kan je de software downloaden vanaf de site van het Network Time Protocol project. De onderstaande voorbeeld configuratie uit dit artikel is getest met versie 4.1.2 van de ntp package maar zou ook moeten werken met versie 3.x.x .
restrict default ignore restrict 195.13.23.5 nomodify notrap server 195.13.23.5 restrict 195.13.1.153 nomodify notrap server 195.13.1.153 restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap restrict 127.0.0.1 server 127.127.1.0 fudge 127.127.1.0 stratum 10 driftfile /etc/ntp/drift
Om misbruiken van onze NTP server te beperken wordt er een toegangscontrole op IP niveau ingesteld. Er zijn op gebied van security meer mogelijkheden maar dit valt buiten de scope van dit artikel.
Een eigenaardigheid van de NTP configuratie is dat zowel toelatingen als verboden door het keyword restrict worden aangegeven.
De restrict regel op lijn 1 geeft onze default policy aan : alle NTP paketten negeren. Deze regel wordt uiteraard versoepeld op lijn 3 en 5 voor de stratum NTP servers die we zelf gebruiken als referentie voor onze eigen NTP server en voor onze lokale NTP clients op lijn 8
Op lijn 4 en 6 zijn de stratum 2 NTP servers aangegeven. In dit geval zijn de IP adressen gebruikt aangezien dit verzocht wordt door beheerders van de NTP servers. Sommige NTP service aanbieders vragen om een DNS naam te gebruiken, lees daarom bij het selecteren van de NTP server steeds de gebruiksregels.
Op lijnen 10, 11 en 12 wordt de locale klok gedefinieerd als derde tijdsbron (met een hoog stratum nummer) zodat bij uitval van de publieke NTP servers toch nog voor een tijdssynchronisatie kan gezorgd worden. De tijd is in dat geval misschien minder accuraat maar de tijden van de clients lopen wel gelijk, wat in vele gevallen voldoende kan zijn. Indien de NTP server reeds langere tijd gelopen heeft zal de drift van de lokale klok (opgeslagen in /etc/ntp/drift, zie lijn 13) voldoende gekend zijn zodat ook bij langdurige uitval van de internetconnectie de netwerktijd behoorlijk accuraat blijft.
Het IP adres dat gebruikt wordt voor de locale klok (127.127.1.0) is een pseudo IP adres. NTP gebruikt voor elke referentieklok een pseudo IP adres dat aangeeft welk type klok het is en welke driver erbij hoort. Meer info over de pseudo IP adressen en de referentieklok device drivers vind je in het Reference Clock Drivers document.
Na het opstarten van de ntp daemon met bovenstaand configuratiebestand kan men gebruik maken van een aantal tools om de status van de tijdssynchronisatie na te kijken. Een handige tool is ntpq. Deze laat toe om via het peers commando na te kijken welke NTP servers er gebruikt worden, wat de referentieserver voor deze NTP servers zijn, wat hun stratum is, wanneer ze nog eens gepold zullen worden enz...
Net na het opstarten van de ntp daemon geeft het ntpq peers volgende output :
$ ntpq
ntpq> peers
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp1.belbone.be ntp0.belbone.be 2 u 8 64 1 9.413 -1.830 0.008
ntp2.belbone.be ntp0.belbone.be 2 u 3 64 1 35.201 -21.424 0.008
LOCAL(0) LOCAL(0) 10 l - 64 0 0.000 0.000 4000.00
De stratum 2 NTP servers worden bij het opstarten om de minuut (64 seconden) gepolled en er is nog geen system NTP server gekozen.
Als de ntp server een tijd draait zou je een output zoals deze in onderstaand kader moeten krijgen.
ntpq> peers
remote refid st t when poll reach delay offset jitter
==============================================================================
+ntp1.belbone.be Time1.Stupi.SE 2 u 441 1024 377 13.767 -4.360 5.509
*ntp2.belbone.be Time2.Stupi.SE 2 u 442 1024 377 34.995 -19.720 45.905
LOCAL(0) LOCAL(0) 10 l 31 64 377 0.000 0.000 0.004
De drie tijdsservices staan gespecifieerd, inclusief de lokale klok. De stratum 2 servers van de Europese Gemeenschap gebruiken momenteel blijkbaar NTP servers van stupi.se als system server.
Aangezien de NTP server reeds een hele tijd loopt is het poll interval 1024 seconden wat overeenkomt met het maximum poll interval van 17 minuten. De volgende poll zal binnen 441 en 442 seconden gebeuren.
Het asterisk symbool (*) geeft aan welke NTP server de system NTP server is. Het plus teken (+) geeft aan welke NTP server(s) in aanmerking komen als system NTP server. De ntp software zal continue evalueren welke NTP server het best presteert en dus de system NTP server wordt.
Het type veld (tussen stratum en when) geeft aan welk type NTP server het is. In ons geval zijn het lokale klok (l) en 2 unicast (u) servers. Het is namelijk ook mogelijk om multicast en broadcast NTP services op te zetten maar hiervoor verwijs ik naar de documentatie van het Network Time Protocol project.
Client configuraties
NTP clients kunnen zowel werkstations, servers als andere apparatuur zijn zoals bijvoorbeeld routers en switches. De term client heeft hier dus enkel betrekking op hun functie in het NTP netwerk.
Linux en Unix clients
Het /etc/ntp.conf bestand voor de Linux en UNIX NTP clients is grotendeels gelijk aan dit van onze NTP server.
restrict default ignore restrict 192.168.1.1 nomodify notrap server 192.168.1.1 restrict 127.0.0.1 server 127.127.1.0 fudge 127.127.1.0 stratum 10 driftfile /etc/ntp/drift
Als server wordt nu echter verwezen op lijn 4 naar de eigen NTP server. Verder ontbreekt ook de sectie waar NTP requests voor het eigen netwerk toegelaten worden.
Windows clients
In XP kan je de NTP servers instellen door op de tijd te klikken in de launcher en de NTP server te configureren in het dialoogvenster.
Er bestaan ook verschillende third party NTP clients voor Windows. Aan te raden zijn :
- NetTime : Open Source Client, gemakkelijk te configureren en heeft een autoconfigure optie waar hij zelf op zoek gaat naar beschikbare NTP servers
- AutoMachron : vrije maar niet open source licentie, werkt op alle Windows versies vanaf Windows 95 en is zeer eenvoudig in gebruik
Macintosh clients
Mac OS X gebruikt ntpd voor tijdssynchronisatie, de instellingen kunnen via de System Preferences aangepast worden. De NTP server kan ingesteld worden vanuit de Network Time tab van het Date & Time menu.
Voor Mac OS 8 en 9 ga je via het Date & Time Control Panel, je selecteert Use a Network Time Server en vult de gegevens van de NTP server in via het dialoog venster van de Server Options knop.