Platon Technologies
neprihlásený Prihlásiť Registrácia
SlovakEnglish
open source software development oslavujeme 10 rokov vývoja otvoreného softvéru! Štvrtok, 28. marec 2024
O nás
Magazín
Otvorený softvér
CVS
Služby
Index  »  Administrácia  »  Synchronizácia času, časť 3: aplikácia chrony

Synchronizácia času, časť 3: aplikácia chrony

Autor: Ondrej Jombík | Sekcia: Administrácia | Dátum: 2002-03-05

V poslednom dieli seriálu o synchornizácii času si nainštalujeme a nakonfigurujeme aplikáciu chrony a opíšeme rôzne varianty a možnosti jej používania na osobitnom počítači resp. lokálnej sieti s dial-up pripojením alebo na izolovanej sieti bez internetového pripojenia.

Úvod

Aplikácia chrony je NTP klientom a serverom zároveň. Pomocou nej je možné synchronizovať systémový čas oproti vybraným NTP serverom a zároveň byť poskytovateľom (zdrojom) presného času pre iných klientov. Taktiež vie kontrolovať odchýlku hardvérových hodín a tú zohľadniť pri nastavovaní presného času napr. po vypnutí počítača alebo pri dlhodobejšej nemožnosti prístupu k internetovým zdrojom. Celá aplikácia sa skladá z dvoch častí:

  • chronyd
    Démon bežiaci na pozadí zabezpečujúci sieťovú výmenu dát s NTP servermi a klientami, nastavovanie systémových aj hardvérových hodín, generujúci štatistiky a informácie o zdrojoch.
  • chronyc
    Klient slúžiaci na komunikáciu s démonom chronyd. Predstavuje jednoduchý príkazový nástroj, pomocou ktorého je možné za behu nastavovať rôzne parametre, dočasne meniť konfiguráciu démona, ručne nastavovať aktuálny čas systémových aj hardvérových hodín, zobrazovať generované štatistiky a pod.

Obe časti, chronyc aj chronyd majú svoj vlastný protokol postavený nad UDP, komunikujúci na porte 323, ktorý je zmeniteľný v konfigurácii. Pomocou neho sú príkazy z príkazoveho riadku klienta chronyc posielané serveru chronyd, ktorý podľa nich vykonáva príslušné reálne akcie.

Aplikácia momentálne podporuje nasledovné platformy:

  • Linux 2.0, 2.1 (bez podpory RTC), 2.2, 2.3, 2.4, 2.5
  • Solaris 2.5/2.5.1 na architektúrach Sparc 20 a Ultrasparc
  • Solaris 2.8 na architektúre x86
  • SunOS 4.1.4 na architektúrach Sparc 2 a Sparc 20
  • BSD/386 (s použitím ovládača pre SunOS 4.1.4)
  • ďalšie varianty BSD systémov budú fungovať po modifikácii ./configure skriptu tak, aby bol systém rozpoznaný ako SunOS alebo BSD/386

Portovanie programu na ostatné systémy by nemalo byť zložité. Problematickým je len nie celkom jednotné správanie volaní jadra adjtimex(), gettimeofday() a settimeofday(). Práve kvôli absencii týchto funkcií nie je démon chronyd portnutý aj na platformu MS-Windows. Klient chronyc však spoľahlivo funguje v prostredí Cygwin.

Oproti klasickému NTP démonu má chrony viaceré výhody, ale i nevýhody. K výhodám patrí funkčnosť aj pri nefrekventovanom pripojení k Internetu (dial-up); optimalizované používanie na izolovaných lokálnych sieťach, kde jediným zdrojom presného času sú hodinky administrátora; integrovanosť všetkých funkcií do jednej binárky (chronyd). Naopak nevýhodami sú nepodpora hardvérových časových zdrojov pripojených k serveru (GPS, atómové hodiny); nekompletne implementované RFC 1305, tj. napr. nemožnosť synchronizovania času broadcastom alebo multicastom; podpora relatívne malého počtu platforiem.

Inštalácia

Program sa dodáva vo forme zdrojových kódov. Autor popisuje, že existujú aj inštalačné balíčky pre Debian, ale táto aktivita ide viacmenej mimo neho. My nainštalujeme chrony klasickou metódou.

Z oficiálnej domovskej stránky projektu si stiahneme aktuálnu verziu 1.16, ktorú nájdeme tu. Taktiež musíme stiahnuť aj patch, ktorý fixuje chybu pri kompilovaní na jadrách 2.4.13 a pravdepodobne aj vyšších. Ten sa nachádza zase tu.

Súbory premiestnime na miesto, kde zvykneme kompilovať programy a rozbalíme, aplikujeme patch, skompilujeme a nainštalujeme do adresára /usr/local/. Posledný z príkazov musí vykonať root.

tar xvzf chrony-1.16.tar.gz
cd chrony-1.16
gunzip < ../chrony-1.16-1.16.1-patch.gz | patch -p1
./configure
make
# make install

Vzhľadom nato, že ide o pomerne špecifický softvér, množstvo varovaní od kompilátoru nebude výnimkou. Zväčša ich však môžeme bez problémov odignorovať. V podadresári contrib/ máme rôzne podporné súbory. Zaujímavý je najmä contrib/stephan_boettcher_1, ktorý po úprave môžeme použiť ako štartovací skript podľa normy System V. Na distribúcii RedHat alebo obdobnej ho treba uložiť do adresára /etc/rc.d/init.d/ a vytvoriť príslušné symbolické linky v podadresároch /etc/rc.d/rc?.d/ (manuálne alebo programom chkconfig).

Podmienkou funkčnosti aplikácie je zapnutá podpora pre RTC v jadre alebo skompilovaný a nainštalovaný modul rtc.o.

Konfigurácia

V tejto fáze máme program nainštalovaný, môžeme sa pustiť do konfigurácie. Našou modelovou situáciou bude lokálna sieť pripojená pomocou linuxového smerovača (routeru) do Internetu. Predpokladám, že aplikácia chrony je nainštalovaná práve na tomto smerovači.

Na začiatok je nutné zadovážiť si zdroje presného času. Tie možno získať nasledovnými spôsobmi:

  • Inštitúcia, pod ktorú spadá vaša podsieť, môže na niektorom zo svojich serverov prevádzkovať NTP server.
  • Poskytovateľ vášho internetového pripojenia (ISP) môže taktiež zabezpečovať prístup k vlastným NTP serverom.
  • Na tejto stránke sa nachádza zoznam verejných NTP serverov, ktoré možno používať za určitých podmienok. Viz. predchádzajúci diel.

Predpokladám teda, že máme vybraný aspoň jeden platný NTP server. Za každý vybraný server do konfiguračného súboru /etc/chrony.conf zapíšeme:

server a.b.c

Kde a.b.c je meno alebo IP adresa príslušného NTP serveru. Ďalej potrebujeme zabezpečiť ochranu pred nežiadanou manipuláciou chronyd klientom chronyc. Vytvoríme súbor /etc/chrony.keys a nastavíme mu mód na 0600 (chmod 0600 /etc/chrony.keys). Do súboru zapíšeme identifikačné číslo (ID) a heslo. Takže napríklad:

echo “1 kofola” > /etc/chrony.keys

A taktiež odpovedajúce direktívy v konfiguračnom súbore:

keyfile /etc/chrony.keys
commandkey 1

Odteraz bude každá podstatná akcia vyžadovať heslo. Potrebujeme ešte zadať meno súboru, kde sa budú zaznamenávať odchýlky systémového času. Tie budú hrať svoju úlohu, pri absencii pripojenia k Internetu, resp. NTP serverom.

driftfile /etc/chrony.drift

Minimálna konfigurácia je teda na svete a v uvedenom nastavení je možné používať chrony pri permanentnom pripojení.

Dial-up

Pre pripojenie dial-up platia rovnaké pravidlá získavania zdrojov presného času ako pri pevnej linke. Rozdielom je, že je nutné za direktívou server špecifikovať kľúčové slovo offline. V opačnom prípade by sa chrony pokúšal pripojiť k NTP serverom aj keď nie je internetové pripojenie aktívne. Ak navyše používate službu dial-on-demand, netreba zdôrazňovať, čo by to v praxi znamenalo. Taktiež je nutné písať priamo IP adresy serverov miesto ich symbolických mien, pretože prístup k DNS bez pripojenia k Internetu pravdepodobne nemáte. Vzorový riadok bude vyzerať teda takto:

server 1.2.3.4 offline

Ďalšou vecou je nutnosť oznamovať aplikácii, kedy sa internetové pripojenie stáva aktívnym a kedy naopak neaktívnym. Využijeme nato klienta chronyc a bude to môcť pochopiteľne vykonať iba osoba poznajúca heslo, ktoré sme nastavili. Do internetového štartovacieho skriptu (/etc/ppp/ip-up) zapíšeme nasledovné riadky:

/usr/local/bin/chronyc <<EOF
password kofola
online
EOF

Obdobne aj do súboru /etc/ppp/ip-down:

/usr/local/bin/chronyc <<EOF
password kofola
offline
EOF

Synchronizácia času bude prebiehať iba pri aktívnom internetovom pripojení. V prípade, že ste nainštalovali aj podporný System V štartovací skript, o ktorom som sa zmieňoval v úvode, môžete používať zjednodušené zápisy týchto príkazov. Opäť ich treba zapísať do príslušných internetových skriptov.

/etc/rc.d/init/chrony online resp. /etc/rc.d/init/chrony offline

Lokálna sieť

Teraz si povieme ako pomocou nášho smerovača synchronizovať čas na celej lokálnej sieti. Na serveri stačí povoliť pripájanie klinetom. V základnom nastavení nie je povolené pripájanie žiadnym klientom. Ak je teda naša podsieť napr. 192.168.1.0/24, do konfiguračného súboru smerovača s IP adresou 192.168.1.1 zapíšeme:

allow 192.168.1

Na povoľovanie a zamedzovanie prístupu sa okrem direktívy allow používa aj deny. Pomocou nich je možné vytvoriť ľubovoľné kombinácie prístupu tak celých podsietí ako aj samostatných serverov.

Ako NTP klientov na našej lokálnej sieti môžeme používať opäť program chrony. Jediné čo musíme v konfigurácii klienta predefinovať je direktíva server, ktorú zmeníme na:

server 192.168.1.1

Na rozloženie záťaže môže každý z týchto klinetov zároveň ako NTP server pre ďalších klinetov a pod. Rôznorodosti sa medze nekladú. Častokrát však bývajú na lokálnych sieťach používané aj pracovné stanice Windows. Pre tie existuje jednoduchý a pritom vysoko konfigurovateľný NTP klient Automachron, ktorého môžeme získať na tejto adrese.

Izolovaná sieť

Špecifickým prípadom konfigurácie lokálnej sieťe je izolovaná sieť bez prístupu do Internetu. Opäť bude synchronizácia času prebiehať pomocou jedného hlavného time serveru, ktorý si sami vyberieme. Situácia sa však môže navyše skomplikovať, ak chceme tento hlavný time server čas od času vypnúť resp. reštartovať. Všetky tieto situácie má však chrony bezpečne vyriešené.

Konfigurácia je rovnaká ako v prípade lokálnej siete. Keďže na hlavnom time serveri budeme čas nastavovať manuálne, potrebujeme navyše špecifikovať v jeho konfigurácii direktívu manual. Tá zabezpečí, že budeme môcť v príkazovom riadku klienta chronyc používať príkaz settime na nastavovanie času, ktoré bude sledované a pomocou neho sa budú určovať odchýlky systémových i hardvérových hodín.

Taktiež je nutné v konfigurácii definovať odchýlku od reálneho času v podobe veľkosti stratum. Princíp ohodnotenia časových zdrojov bol vysvetlený v minulej časti, pre nás je dôležité, že náš hlavný time server je stratum-8 a jeho klienti sú stratum-10. Je možné prirodzene použiť aj iné čísla v závislosti od toho ako si myslíme, že je náš čas presný, rozhodne však klient musí mať väčšie číslo ako server, s ktorým sa synchronizuje. Zápis do konfiguračných súborov bude vyzerať takto (n je veľkosť stratum):

local stratum n

Ak uvažujeme, že náš hlavný timeserver sa čas od času reštartuje, ale niektorý z jeho klientov ostáva zapnutý, môžeme na počiatočnú synchronizáciu pri štarte aplikácie použiť direktívu initstepslew. Ako parameter špecifikujeme maximálnu možnú zmenu systémového času (predpokladajme, že je to 30 sekúnd). Za ňou nasleduje zoznam počítačov, ktoré nám s touto úvodnou synchronizáciou pomôžu. Netreba ale zabudnúť povolenie spojenia na klientoch pomocou direktívy allow. Konfiguračný záznam bude vyzerať napr. takto (192.168.1.1 je hlavný time server; ostatné jeho klienti):

initstepslew 30 192.168.1.2 192.168.1.3

Takisto pre klientov napr.:

initstepslew 5 192.168.1.1

Ďalšie nastavenia

Medzi jednu z najlepších vlastností aplikácie chrony patrí vyrovnávanie odchýlky presného času po vypnutí počítača pri jeho následnom spustení. V príklade izolovanej sieti sme si povedali, ako sa na to dajú použiť iné zdroje z našej lokálnej siete. Ak však tieto zdroje nemáme, môžeme na nastavenie presného času pri štarte použiť hardvérové hodiny a ich zaznamenanú odchýlku.

Na základe jednotlivých meraní pri aktívnom pripojení k Internetu vie aplikácia udržovať systémové hodiny veľmi presné. Vďaka tomu vie potom aj zistiť reálnu odchýlku hardvérových hodín od presného času. Pri vypínaní bude zapísaná do súboru špecifikovaného direktívou rtcfile a pri najbližšom štarte použitá na nastavenie systémových hodín podľa hardvérových hodín a spomínanej odchýlky. Aplikácia tiež zapíše merania a štatistiky pre všetky NTP servery, s ktorými sa synchornizovala. Tie budú pri štarte obnovené, vďaka čomu bude zachovaný aj ďalší správny chod systémových hodín. I keď to vyzerá možno zložito, skutočne to funguje. :-)

Podmienkou funkčnosti je vypnutý 11-minútový mód (viz. prvý diel), a nasledovné riadky v konfiguračnom súbore:

writertc
dump

Prvý riadok zabezpečí spomínaný zápis odchýlky hardvérových hodín do súboru (aj pri signáloch SIGTERM a ďalších). Další zase zápis štatistík NTP serverov. Problém nastáva, keď je počítač vypnutý nečakane, napr. v dôsledku výpadku prúdu. Ochrana proti tomu spočíva v špecifikovaní uvedených príkazov na mieste, kde sa nachádza direktíva offline, tj. pri odpájaní z Internetu.

Záver

Tak a to už je naozaj všetko. Verím, že si túto aplikáciu obľúbite pre jej širokospektrálnu funkčnosť rovnako ako ja a že od dnešného dňa budú všetky vaše servery a pracovné stanice obsahovať len ten správny a presný čas.

Zdroje

domovská stránka aplikácie chrony: http://chrony.sunsite.dk/
domovská stránka NTP klienta Automachron pre Win32: http://oneguycoding.com/automachron
RFC dokumenty: RFC 1305
manuálové stránky: adjtimex(2)
systémové hlavičkové súbory: /usr/include/sys/timex.h

Článok bol pôvodne vydaný na serveri Root.cz a v redakčnom systéme Platon.SK je publikovaný so súhlasom autora aj prevádzkovateľa servera.

Čo je Platón?
Platón bol veľmi doležitý filozof starovekého Grécka, študent Sokratesa a učiteľ Aristotela. viac info...

Platon Group zastrešuje slovenskú skupinu vývojárov otvoreného softvéru. Vyvíja, spravuje, dokumentuje niekoľko úspešných open-source projektov.

Platon Technologies, s.r.o. je mladá a dynamicky rozvíjajúca sa spoločnosť, ktorá má za cieľ prinášať otvorené technológie do komerčnej a verejnej sféry.

Podporte nás

Výkonný webhosting
a multihosting

Platon Webhosting

Super rýchle servery
a profesionálna administrácia

Virtuálne, dedikované a manažované servery

Vývoj
Diskusia k článku
David James Get Malwarebytes premium support on this number 2020-06-11 21:52
kerry MetaMask Chrome Extension | Metamask Wallet | Coinbase Wallet Login | Uphold login | Exodus Wallet 2022-07-01 11:00
jordan1mid jordan1mid 2022-07-17 04:20
Sachin Sagar Why Do We Recommend PVC Cards For ID Card Printing? 2023-02-17 12:00
Revolutionize Your Commute: Discover the Best Electric Bicycle Dealers, Suppliers, and Manufacturers in Jaipur with Time4ev! Best Electric Bicycle Dealer Supplier in Jaipur 2023-06-03 14:44
Best Packaging Machines Manufacturer, Dealer, Distributor, Supplier in Jaipur Packaging Machines Manufacturer 2023-11-06 07:29

   

 
Copyright © 2002-2006 Platon Group
Stránka používa redakčný systém Metafox
Na začiatok · Odkazový formulár · Prihláška
Upozorniť na chybu na PLATON.SK webstránke · Podmienky použitia · Ochrana osobných údajov