Tijdserver

Introductie

Begin Oktober 2019 gaf Job Snijders op #nlnog aan dat hij een tijdserver over had, om precies te zijn een Meinberg M300. Ik had op dat moment geen enkel idee wat voor hardware dit precies is en hoe een dergelijke server precies werkt, dus ik vond dat een zeer goede reden om die daarom over te nemen. Begin November 2019 heb ik de tijdserver dan ook daadwerkelijk ontvangen. Hoe ik die tijdserver ondertussen gebruik en wat mijn ervaringen er nu mee zijn is te vinden op deze pagina.

Inhoudsopgave

Globale werking

Het is om heel veel redenen belangrijk om een correcte tijd te hebben op een computer systeem. En als je meerdere computersystemen beheerd is het belangrijk om die tijd op al die systemen gelijk te hebben (naar mijn mening is het belangrijker om dezelfde tijd te hebben dan de correcte tijd, mits dat niet teveel afwijkt van de correcte tijd).Om dat te bewerkstelligen is het handig om een tijdserver in je netwerk te hebben en al je systemen daarmee te laten syncroniseren. Hier zijn heel veel verschillende manieren voor om dat voor elkaar te krijgen en ik gebruik dus dedicated hardware hiervoor, een Meinberg M300 zoals in de introductie reeds genoemd.

Om een zo precies mogelijke tijd te kunnen geven naar de rest van je netwerk moet de tijdserver zo dicht mogelijk bij een zeer precieze bron voor de tijd zitten. Een van de meest precieze tijdbronnen die de mensheid heeft zijn atoomklokken. Nu is het zeer lastig om dat zelf in huis te gaan zetten, dus moet je gebruik gaan maken van de atoomklok van iemand anders. Gelukkig zijn die makkelijk te vinden. Tijd is namelijk ook superbelangrijk voor de bekende navigatiesystemen GPS, Glonass, Galileo en Baidu (deze systemen zijn respectievelijk van de Verenigde Staten van Amerika, Rusland, Europa en China). Dus in de satelieten die ze rond de aarde geschoten hebben zit een atoomklok. En in de signalen die ze naar de aarde sturen zit de tijd exact verwerkt. Als je dus die signalen kan voeren aan een tijdserver, dan kan die op basis daarvan bepalen hoe laat het is en dat aan alle clients vertellen.

Hoe dichter een tijdserver bij een atoomklok staat, hoe preciezer de tijd is die hij door geeft. Je kan de ene tijdserver namelijk ook laten syncen met een andere tijdserver. Dat kan handig zijn in grote bedrijfsnetwerken. Dan zet je bijvoorbeeld een hoofdtijd server weg in het datacentrum, en zet je een tijdserver weg in elk kantoorgebouw van het bedrijf. Daardoor kunnen alle desktop PCs gewoon syncen met een server die lokaal staat en hoeft dat allemaal niet het campusnetwerk over. Maar er zit wel meer latency tussen de desktops en de hoofdtijdserver, en een extra apparaat, wat ook weer gevoelig is voor storingen en configuratiefouten. Daarom is er een getal in het leven geroepen wat aangeeft hoe dicht een tijdserver bij een tijdbron zit. Dit getal heet "stratum", en hoe lager het is, hoe dichterbij de tijdsbron. Stratum is altijd een geheel getal. Stratum 0 is de tijdbron zelf, stratum 1 is de tijdserver die daar direct gebruik van maakt. Als je dus de tijd uit GNSS (een satelietnavigatiesysteem) haalt, dan is het GNSS-systeem de stratum 0, en de tijdserver waarmee je dat doet is stratum 1. Om weer even terug te gaan naar het bedrijfsnetwerk: de hoofdtijdserver is dus een stratum 1 server, en alle servers in de gebouwen zijn stratum 2 servers. Als de stratum te hoog word, dan is een server niet meer te vertrouwen. Boven een stratum van 5 zou ik een server niet meer gebruiken. Het stratum getal kan maximaal 16 zijn, dus als mijn tijdserver ziet dat er iets mis is, dan past hij zelf z'n stratum aan naar 16, zodat de clients op zoek gaan naar andere tijdsbronnen.
Zelf maak ik gebruik van een GNSS ontvanger die twee systemen ondersteund: GPS en Glonass. Deze ontvanger hang ik direct aan mijn tijdserver en daarmee heb ik dus een stratum 1 server draaien waar al mijn systemen gebruik van kunnen maken.

Fysieke plaatsing

De server staat gewoon bij mij thuis. Ik heb erover gedacht om deze in het datacentrum te plaatsen, maar dat is zeer lastig. Omdat ik gebruik maak van GNSS heeft mijn ontvanger open zicht naar de hemel nodig. Dat is wel te realiseren in een datacentrum (dan moet de GNSS ontvanger op het dak van het datacentrum gezet worden en moeten ze een kabel naar het rack aanleggen waar ik de server opgehangen heb). Omdat dit teveel gedoe is, heb ik hem maar thuis weggelegd. Hier kan ik simpel de GPS ontvanger buiten hangen. Iets wat ik dan ook gedaan heb:
GNSS ontvanger buiten
Het zwarte kastje wat je ziet is de GNSS ontvanger. Om dit voor elkaar te krijgen heb ik de kabel van de ontvanger door het luchtrooster gevoerd wat ook duidelijk zichtbaar is op de foto.

Vanaf de straat is deze ontvanger nauwelijks te zien gelukkig:
Gehele raam GNSS ontvanger
De ontvanger zit aan de linker kant van het luchtrooster. Dit luchtrooster is het grijze ding aan de bovenkant van het rechterraam. Als je goed kijkt zie je de GNSS ontvanger op de foto.

Vanaf binnen in de ontvanger wel goed te zien buiten:
GNSS ontvanger vanaf binnen
Het zwarte kastje net buiten, onder het luchtrooster is de ontvanger. Hier is die dus prima te zien, maar dat is niet erg. Ook zie je hier de kabel die naar binnen komt, vanaf de ontvanger. Deze loopt nog wat verder door de kamer heen natuurlijk:
De kabel door de kamer
Vanaf de vensterbank zie je de kabel naar beneden gaan. Dat is goed, want mijn tijdserver ligt op de grond. En daar moet de ontvanger natuurlijk op aangesloten zijn.

De standaard opstelling waarin mijn server ligt is de volgende:
Tijdserver op de grond
De dunne zwarte kabel die je helemaal rond ziet gaan is de kabel van de GNSS ontvanger. Deze kabel is 5 meter lang, maar de tijdserver ligt binnen de 5 meter van de gps ontvanger af, dus die kabel is een beetje te lang en ligt dus gewoon op de server. De aansluiting op de tijdserver zelf zit aan de rechterkant, ongeveer halverwege. Precies onder de lus van de kabel zie je een klein goudkleurig stukje. Dat is de connector op de tijdserver zelf.
Aan de rechterkant, bovenaan de foto zie je een grote zwarte kabel aangesloten zijn op de tijdserver. Dit is simpelweg de stroomkabel. Standaard 230V uit een stopcontact, weinig spannends dus.
Helemaal onderaan, aan de rechterkant zie je nog een blauwe kabel aangesloten zijn. Dat is de netwerkaansluiting. Dit is een standaard UTP kabel. De andere kant van de kabel gaat naar een simpele unmanaged switch op m'n bureau en vanaf daar naar de rest van m'n netwerk thuis (wat wel managed is verder, met UniFi). De gele kabel die je langs de muur ziet lopen is de uplinkkabel van die unmanaged switch naar de rest van m'n netwwerk.
Daarnaast zie je ook nog een groene gloed weerspiegelen op m'n bureau. Dit is het licht wat uit de status LEDs komt van de tijdserver. En het is allemaal groen, dus het is allemaal goed. Er zit ook een alarm-LED in dat groepje en die geeft rood licht. Dus die is nu echt niet aan, en alles is dus prima. Ook zit er een display op de tijdserver. Als die aan is, dan reflecteerd dat ook op m'n bureau, want dat display zit direct naast de status-LEDs. Het display is nu dus uit. Is ook logisch, want ik hoef niets te configureren nu op het apparaat, ik kan alles doen via de webinterface.

Zoals je kan zien loopt de GNSS ontvanger kabel van buiten naar binnen. Dit wil zeggen dat ik het luchtrooster waar dit doorheen loopt niet meer kan sluiten. Nu is dat normaal geen probleem. Behalve in de winter, dan komt de koude lucht van buiten makkelijk binnen. En mijn bureau staat direct onder het raam waar de kabel doorheen loopt. Dus dat maakt het vrij koud om te werken achter m'n bureau. Maar daar werk ik toch vrij zelden de laatste tijd, dus met dit nadeel is prima te leven.

Monitoring

Het is erg fijn dat mijn tijdserver aangesloten is en het ook lijkt te doen. Het is echter veel belanrijker dat ik in de gaten houd dat de server het ook blijft doen. Voor dit doel ondersteund de server het SNMP protocol, wat gebruikt kan worden voor allerlei gegevens. Om dit effectief uit te kunnen lezen heb ik mijn Zabbix installatie zo geconfigureerd dat hij de volgende gegevens uit de tijserver haalt:

Ik krijg ook pushberichten op m'n telefoon als er iets echt mis is. Dit is het geval in de volgende situaties:

Al deze situaties wil ik weten, want dan is er zeer waarschijnlijk iets mis. De eerste drie meldingen kunnen makkelijk tegelijkertijd binnen komen, want als er te weinig satelieten gebruikt kunnen worden, dan gaat de synchronisatie ook niet meer goed werken. Maar het kan ook zijn dat het zich van mijn GNSS ontvanger geblokkeerd word om de een of andere reden. Dat krijg ik dan te horen via melding 2 en/of 3.
Als er geen SNMP data meer binnen komt dan is er iets mis met mijn netwerk thuis, of de server CPU load is te hoog om nog te kunnen reageren op SNMP requesets. Beide zijn gevallen die ik wil weten want dat moet opgelost worden.
Als het stratum getal iets anders word dan 1, dan kan hij geen gebruik meer maken van de GNSS ontvanger en gaat hij synchroniseren met een andere tijdserver. De SIDN heeft in Nederland ook een tijdserver draaien: TimeNL, en die gebruik ik als fallback. Als mijn tijdserver daar gebruik van gaat maken, dan word het ineens een stratum 2 server, en dan wil ik weten wat er aan de hand is. Als ook het syncen met TimeNL niet lukt, dan wordt het een stratum 16 server, en dat wil ik al helemaal weten waarom dat het geval is.
En uiteraard wil ik weten wanneer de server gereboot word. Als ik het zelf trigger, dan weet ik dat het gebeurd en negeer ik de melding gewoon. Als het onverwacht gebeurd kan dat duiden op problemen met de server en moet ik dat gaan onderzoeken.

Zoals je ziet gebruik ik niet alle data die ik uit de server haal om een pushbericht naar m'n telefoon te sturen. Dat komt omdat ik met Grafana een dashboard heb gebouwd waarmee de huidige status van de server te zien is. Dit geeft dus allerlei zinnige grafieken, en daar staat alle bovenstaande informatie wel gewoon op. Dit Grafana dashboard is op de volgende URL te vinden: https://grafana.cybertinus.nl/timserver

Op deze manier probeer ik een stabiele stratum 1 server te maken voor mijn eigen netwerk, en ook voor enkele anderen.

Gebruik maken van mijn tijdserver

Ik draai de tijdserver gewoon bij mij thuis. Dit hangt achter een relatief trage XS4ALL VDSL internet connectie. En daar moet mijn eigen verkeer als ik thuis ben ook nog overheen. Daarom voeg ik mijn tijdserver niet toe in de algemene pool van tijdservers die er wereldwijd te vinden is. Ook is het protocol wat gebruikt word voor het synchroniseren van de tijd (NTP) relatief gevoelig voor DDoS aanvallen. Omdat ik daar geen deel van wil uitmaken is mijn server niet publiekelijk bereikbaar. Ik heb in m'n firewall een IP whitelist staan van de systemen die gebruik mogen maken van mijn tijdserver. Mocht je daar bij gezet willen worden, neem dan contact met me op, op timeserver AT cybertinus DOT nl. Leg dan vooral even uit waarom je gebruik wil maken van mijn tijdserver, en wellicht geef ik je dan wel toegang.