NTP - legyen pontos az óránk

A számítógépek órái előszeretettel mutatnak hibás időpontot :), így nem árt, ha szinkronizáljuk őket egy pontos(nak hitt) egységhez. Végig vesszük, hogy tudunk a pontos időhöz igazodni, utána pedig, hogy hogyan tudunk mi pontos időt nyújtani, például a belső hálózatunk felé, ebben nyújthat segítséget az NTP (Network Time Protocol)

Kérdezzük le a pontos időt!

Debian rendszeren az ntpdate csomag telepítésével rakhatjuk fel az ntp klienst:

$ apt-get install ntpdate

Telepítés után állítsuk be a hozzánk közel eső szervereket. Öt magyarországi szerver van jelenleg, amit egy címmel adhatunk meg, ezenkívül van 3 európai csoport is, amelyek egyesével 12-12 IP-címet jelentenek. Ha gondoljuk, ezeket is megadhatjuk, ahogy a példában látható:

/etc/default/ntpdate
NTPSERVERS="hu.pool.ntp.org 0.europe.pool.ntp.org 1.europe.pool.ntp.org 2.europe.pool.ntp.org"
NTPOPTIONS="-u"

A "-u" opcióval adjuk meg, hogy az ntp a syslog-ba naplózzon.

Ezután a programot elindítva, beállítja a helyes időt:

$ /etc/init.d/ntpdate start

Amelynek hatására az alábbi üzenethez hasonló sort kell látnunk a syslog-ban:

Mar 6 16:32:23 Sun ntpdate[...]: step time server 148.6.0.1 offset -0.186235 sec

Azonban kényelmetlen lehet mindig kézzel futtatni a programot, ezért célszerű automatizálni. Ha állandó internet-kapcsolattal rendelkezünk, akkor hozzunk létre egy ntpdate fájlt a /etc/cron.{hourly,daily,weekly,monthly} könyvtárak valamelyikében, egyéb esetben pedig a /etc/network/if-up.d/ könyvtárban az alábbi tartalommal:

#!/bin/sh
/etc/init.d/ntpdate start

Utóbbi esetben, az internetre történő kapcsolódás után kerül beállításra a pontos idő. Egyébként pedig az ntpdate fájlt tartalmazó könyvtár nevéből tudhatjuk, hogy milyen időközönként szinkronizálódik az óránk a pontos időhöz.

Szolgáltassunk pontos időt!

Először is telepítsük fel a szerver programot:

$ apt-get install ntp-server

Az ntp-server "dependál" az ntp-simple csomagra, így az is telepítésre kerül. Eztán nyissuk meg a szerverhez tartozó configfájlt és írjuk bele az alábbiakat:

/etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

server hu.pool.ntp.org
server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org

server 127.127.1.0
fudge 127.127.1.0 stratum 13

restrict default kod notrap nomodify nopeer noquery

restrict hu.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 0.europe.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 1.europe.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 2.europe.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery

restrict 127.0.0.1

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.21.0 mask 255.255.255.0 nomodify notrap

A configfájlban található részletek jelentése a következő:

Az alábbi jogok vannak:

Figyeljük rá, hogy inkább utólag adjunk még plusz jogok, mintsem többet adjunk a kelleténél. Pár fontos daemon program rosszul viseli, ha a szerver óráját előre-hátra állítgatják.

A beállítások elvégzése után indítsuk újra a szerver-szolgáltatást:

$ /etc/init.d/ntp-server restart

Majd a log-ot figyelve észrevehetjük, ha sikerül a szinkronizáció pár perc után:

$ tail -f /var/log/syslog
...
Mar 10 16:36:02 sztlkk ntpd[10093]: ntpd 4.2.0a@1:4.2.0a+stable-2-r Fri Aug 26 10:30:12 UTC 2005 (1)
...
Mar 10 16:36:02 sztlkk ntpd[10093]: Listening on interface lo, 127.0.0.1#123
...
Mar 10 16:36:02 sztlkk ntpd[10093]: kernel time sync status 0040
Mar 10 16:36:02 sztlkk ntpd[10093]: frequency initialized -48.087 PPM from /var/lib/ntp/ntp.drift
...
Mar 10 16:39:16 sztlkk ntpd[10093]: synchronized to 213.222.193.35, stratum 1
Mar 10 16:39:16 sztlkk ntpd[10093]: kernel time sync disabled 0041
...
Nem NTP, de így is lehet...

Az ntp az ajánlott megoldás a következő helyett, de ez is egy működő változat:

/usr/sbin/rdate -p time.kfki.hu > /dev/null
/usr/sbin/rdate -s time.kfki.hu > /dev/null
/sbin/hwclock --adjust > /dev/null
/sbin/hwclock --systohc > /dev/null
/sbin/hwclock --show > /dev/null

Az rdate nem része az alap Debian telepítésnek, ezért a használata előtt fel kell telepíteni az őt tartalmazó rdate csomagot. Azt már csak halkan jegyzem meg (bár érdemes tudni), hogy az ntp a 123-as, az rdate a 37-es UDP porton kommunikál.

jonci
2006.03.10
tartalom