7.21. Synchronizacja czasu

Żeby skonfigurować (x)ntp na serwerze, należy mieć zainstalowany serwer ntp i stworzyć plik /etc/ntp.conf z zawartością:

server	62.233.142.85 prefer

server	127.127.1.0	# local clock
fudge	127.127.1.0 stratum 10	

driftfile /etc/ntp/drift
authenticate no
oraz plik /etc/ntp/step-tickers z zawartością:
62.233.142.85
..i uruchomić demona (x)ntpd. Jeśli występują jakiekolwiek problemy, chcemy poeksperymentować lub ustawić niestandardowe parametry, to należy przeczytać wszystko co jest poniżej.

W przypadku dystrybucji Debian odpowiednie pakiety mają nazwy ntp-server i ntpdate, a pliki konfiguracyjne to /etc/ntp.conf i /etc/default/ntpdate. Domyślna konfiguracja korzysta z serwerów dostępnych pod adresem pool.ntp.org, jeżeli chcemy korzystać z innego serwera, należy zastąpić podany adres adresem pożądanego serwera.

Produkowane obecnie komputery są wyposażone w podtrzymywane bateryjnie zegary czasu rzeczywistego (RTC - Real Time Clock). Zwykle jednak ich dokładność pozostawia wiele do życzenia (potrafią "rozjeżdżać" się w tempie sekundy na dobę). Ręczne ustawianie ich i pilnowanie jest uciążliwe i problematyczne (nie każdy przecież ma dokładnie chodzący zegarek).

Rozwiązaniem tego problemu jest wykorzystanie NTP - Network Time Protocol. Jest to protokół pozwalający na synchronizację zegarów komputerów podłączonych do Internetu. Jego działanie opiera się na istnieniu kilku "wzorcowych" komputerów, których zegary synchronizowane są z zegarami atomowymi, drogą radiową lub satelitarną. Pozostałe komputery synchronizuję się od nich i od kolejnych pośredników, tworząc strukturę drzewiastą. Zegary komputerów nie tylko są przestawiane, ale także przyspieszane / opóźniane, aby same ,,trzymały dokładność''.

W Polsce znajduje się jeden pośrednik "drugiego poziomu" (tzw. server stratum 2). Jest to serwer www.cyf-kr.edu.pl (IP 149.156.4.11). Przy synchronizowaniu kilku komputerów (np. firmowej sieci) zaleca się wydzielenie jednego komputera, który będzie synchronizował się z cyf-kr, pozostałe zaś komputery powinny się synchronizować już z tym wewnętrznym serwerem. Do dobrych obyczajów należy wysłanie przed rozpoczęciem synchronizacji z danym serwerem mail'a do jego administratora.

Typowa konfiguracja "na ciepłowni", to kilka komputerów (serwerów i terminali), z których jeden podłączony jest do Internetu przez łącze stałe lub modem. Ten komputer powinien się synchronizować z jakimś zewnętrznym źródłem - najlepiej z głównym serwerem Pratermu.

Ten wydzielony komputer z dostępem do Internetu nazwijmy wewnętrznym serwerem (dla odróżnienia od zewnętrznego, czyli np. praterm.com.pl), zaś pozostałe komputery w sieci to klienci.

Zarówno na serwerze, jak i na klientach, musi być zainstalowany odpowiedni pakiet o nazwie albo ntp, albo xntp. Jeżeli go nie ma, trzeba go doinstalować. W dystrybucji RedHat znajduje się zwykle na płytce "contrib".

Teraz przystępujemy do konfiguracji klientów. Pierwszym krokiem jest edycja pliku /etc/ntp.conf. Powinien on mieć na wszystkich klientach następującą zawartość:

server 127.127.1.0	# local clock
fudge  127.127.1.0 stratum 10

server X.X.X.X prefer

driftfile /etc/ntp/drift
authenticate no

X.X.X.X zastępujemy numerem IP naszego planowanego wewnętrznego serwera. Pozostałe linie należy wykasować lub lepiej wykomentować.

Następnie w katalogu /etc/ntp tworzymy plik o nazwie step-tickers, zawierający tylko IP wewnętrznego serwera. Będzie on wykorzystywany do ustawiania czasu przy starcie systemu.

Ostatnim krokiem jest upewnienie się, że w katalogu ze skryptami startowymi (zwykle /etc/rc.d/rc5.d) jest link na plik /etc/rc.d/init.d/ntp lub /etc/rc.d/init.d/xntp.

Teraz przystępujemy do konfigurowania naszego wewnętrznego serwera. Jeżeli ma on stały dostęp do Internetu, to konfiguracja wygląda tak samo jak na kliencie, z tym że zamiast swojego IP, zarówno w pliku /etc/ntp.conf jak i /etc/ntp/step-tickers, wstawiamy IP zewnętrznego serwera (np. mail.praterm.com.pl) i jest to koniec konfiguracji.

Sprawa jest bardziej skompilowana, jeżeli serwer ma dostęp do internetu przez modem i PPP, a nie SDI. Wówczas nie tworzymy na nim pliku /etc/ntp/step-tickers, a z pliku /etc/ntp.conf usuwamy (wykomentowujemy) linijkę

server X.X.X.X prefer

Teraz mamy serwer, z którym inne mogą się synchronizować, ale on sam nie ma zewnętrznego źródła synchronizacji. Synchronizacja będzie robiona okresowo, po połączeniu z Internetem, za pomocą programu ntpdate.

Jego wywołanie można wstawić albo do pliku /etc/ppp/ip-up.local, albo zapisać w pliku konfiguracyjnym SZARP'a przy wywołaniu BODAS'a, po nawiązaniu połączenia PPP.

Ponieważ jednak program ntpdate odmówi działania, jeżeli na danym komputerze działa demon ntp/xntp, trzeba go najpierw wyłączyć a potem ponownie wyłączyć. Cała linia komend będzie więc miała następującą postać:

/etc/rc.d/init.d/ntpd stop; ntpdate -t 3 -s mail.praterm.com.pl; \
/etc/rc.d/init.d/ntpd start

Jeżeli używamy demona xntpd, należy oczywiście zamienić wywołania ntpd na xntpd. Podana nazwa serwera jest przykładowa. Powyższą komendę wpisujemy albo do pliku /etc/ppp/ip-up.local, albo jako część parametru "command_line" odpowiedniej sekcji BODASa w pliku /etc/szarp/szarp.cfg.

Uruchomienie całości zaczynamy od uruchomienia demona ntpd/xntpd na serwerze wewnętrznym. Jeżeli mamy do czynienia z połączeniem przez PPP, najpierw należy dokonać wstępnej synchronizacji. Jeśli wywołanie programu ntpdate wstawiliśmy do /etc/ppp/ip-up.local, to wystarczy połączyć się z Internetem. Jeżeli zaś chcemy wywoływać synchronizację za pomocą meanera, to po połączeniu trzeba uruchomić ręcznie ntpdate, na przykład przez komendę:

ntpdate -b mail.praterm.com.pl

Powinniśmy otrzymać komunikat typu:

ntpdate[1243]: step time server mail.praterm.com.pl offset 48.340123 sec

Kolejnym krokiem, już niezależnie od tego czy mamy stałe połączenie z siecią, jest uruchomienie demona ntp/xntp na wewnętrznym serwerze przez komendę:

/etc/rc.d/init.d/ntpd start
(ew. xntpd zamiast ntpd).

I ostatnie co pozostało, to uruchomienie demonów ntpd/xntpd na komputerach - klientach. Normalnie będzie się to odbywało przy starcie komputerów.

Prawidłowe działanie całego mechanizmu można śledzić przez wpisy w pliku /var/log/messages. Jest przy tym normalne, że przez parę minut od startu demona na wewnętrznym serwerze synchronizacja nie będzie się udawała - demon musi się ,,rozgrzać''. Po tych paru minutach możemy się już cieszyć milisekundową precyzją zegarów komputerów w całej sieci.

Programy ntpd/xntpd i ntpdate nie mają swoich stron manuala, dokumentacja całego pakietu znajduje się w formacie HTML w katalogach z dokumentacją, zwykle /usr/share/doc.