29.10. Az órák egyeztetése az NTP használatával

Készítette: Tom Hukins.

29.10.1. Áttekintés

Idővel a számítógép órája hajlamos elmászni. A hálózati idő protokoll (Network Time Protocol, NTP) az egyik módja az óránk pontosan tartásának.

Rengeteg internetes szolgáltatás elvárja vagy éppen előnyben részesíti a számítógép órájának pontosságát. Például egy webszervertől megkérdezhetik, hogy egy állományt adott ideje módosítottak-e. A helyi hálózatban az egyazon állományszerveren megosztott állományok ellentmondásmentes dátumozása érdekében szinte elengedhetetlen az órák szinkronizálása. Az olyan szolgáltatások, mint a cron(8) is komolyan építkeznek a pontosan járó rendszerórára, amikor egy adott pillanatban kell lefuttatniuk parancsokat.

A FreeBSD alapból az ntpd(8) NTP szervert tartalmazza, amellyel más NTP szerverek segítségével tudjuk beállítani gépünk óráját, vagy éppen idővel kapcsolatos információkat szolgáltatni másoknak.

29.10.2. A megfelelő NTP szerverek kiválasztása

Az óránk egyeztetéséhez egy vagy több NTP szerverre lesz szükségünk. Előfordulhat, hogy a hálózati rendszergazdánk vagy az internet-szolgáltatónk már beállított egy ilyen szervert erre a célra. Ezzel kapcsolatban olvassuk el a megfelelő leírásokat. A nyilvánosan elérhető NTP szerverekről készült egy lista, ahonnan könnyedén ki tudjuk keresni a számunkra leginkább megfelelő (hozzánk legközelebbi) szervert. Ne hagyjuk figyelmen kívül a szerverre vonatkozó házirendet és kérjünk engedélyt a használatához, amennyiben ez szükséges.

Több, egymással közvetlen kapcsolatban nem álló NTP szerver választásával járunk jól, ha netalán az egyikük váratlanul elérhetetlenné vagy az órája pontatlanná válna. Az ntpd(8) a visszakapott válaszokat intelligensen használja fel, mivel esetükben a megbízható szervereket részesíti előnyben.

29.10.3. A gépünk beállítása

29.10.3.1. Alapvető beállítások

Ha a számítógépünk indításakor akarjuk egyeztetni az óránkat, akkor erre az ntpdate(8) nevű programot használhatjuk. Ez olyan asztali gépek számára megfelelő választás, amelyeket gyakran indítanak újra és csak időnként kell szinkronizálnunk. A legtöbb gépnek viszont az ntpd(8) használatára van szüksége.

Az ntpdate(8) elindítása olyan esetekben is hasznos, ahol az ntpd(8) is fut. Az ntpd(8) az órát fokozatosan állítja, ellenben az ntpdate(8) az eltérés mértékétől és irányától függetlenül egyszerűen átállítja a gép óráját a pontos időre.

Az ntpdate(8) elindítását úgy tudjuk engedélyezni a rendszer indításakor, ha az /etc/rc.conf állományba berakjuk az ntpdate_enable="YES" sort. Emellett még ntpdate_flags változóban meg kell adnunk az alkalmazott beállítások mellett azokat a szervereket, amelyekkel szinkronizálni akarunk.

29.10.3.2. Általános beállítások

Az NTP az /etc/ntp.conf állományon keresztül állítható, amelyek felépítését az ntp.conf(5) man oldal tárgyalja. Íme erre egy egyszerű példa:

server ntplocal.minta.com prefer
server timeserver.minta.org
server ntp2a.minta.net

driftfile /var/db/ntp.drift

A server beállítás adja meg az egyeztetéshez használt szervereket, soronként egyet. Ha egy szerver mellett szerepel még a prefer paraméter is, ahogy azt a példában a ntplocal.minta.com mellett láthattuk, akkor a többivel szemben azt a szervert fogjuk előnyben részesíteni. Az így kiemelt szervertől érkező választ abban az esetben viszont eldobjuk, hogy a többi szervertől kapott válasz jelentős mértékben eltér tőle. Minden más esetben a ő válasza lesz a mérvadó. A prefer paramétert általában olyan NTP szerverekhez használják, amelyek közismerten nagy pontosságúak, tehát például külön erre a célra szánt felügyeleti eszközt is tartalmaznak.

A driftfile beállítással azt az állományt adjuk meg, amiben a rendszeróra frekvencia eltolódásait tároljuk. Az ntpd(8) program ezzel ellensúlyozza automatikusan az óra természetes elmászását, ezáltal lehetővé téve, hogy egy viszonylag pontos időt kapjuk még abban az esetben is, amikor egy kis időre külső időforrások nélkül maradnánk.

A driftfile beállítással egyben azt az állományt jelöljük ki, amely az NTP szervertől kapott korábbi válaszokat tárolja. Ez az NTP működéséhez szükséges belső adatokat tartalmaz, ezért semmilyen más programnak nem szabad módosítania.

29.10.3.3. A szerverünk elérésének szabályozása

Alapértelmezés szerint az NTP szerverünket bárki képes elérni az interneten. Az /etc/ntp.conf állományban szereplő restrict beállítás segítségével azonban meg tudjuk mondani, milyen gépek érhetik el a szerverünket.

Ha az NTP szerverünk felé mindenféle próbálkozást el akarunk utasítani, akkor az /etc/ntp.conf állományba a következő sort kell felvennünk:

restrict default ignore

Megjegyzés: Ezzel egyben azonban a helyi beállításainkban szereplő szerverek elérését is megakadályozzuk. Ha külső NTP szerverekkel is szeretnénk szinkronizálni, akkor itt is engedélyezünk kell ezeket. Erről bővebben lásd az ntp.conf(5) man oldalon.

Ha csak a belső hálózatunkban levő gépek számára szeretnénk elérhetővé tenni az órák egyeztetését, de sem a szerver állapotának módosítását nem engedélyezzük, sem pedig azt, hogy a vele egyenrangú szerverekkel szinkronizáljon, akkor az iménti helyett a

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

sort írjuk bele, ahol a 192.168.1.0 a belső hálózatunk IP-címe és a 255.255.255.0 a hozzá tartozó hálózati maszk.

Az /etc/ntp.conf több restrict típusú beállítást is tartalmazhat. Ennek részleteiről az ntp.conf(5) man oldalon, az Access Control Support című szakaszban olvashatunk.

29.10.4. Az NTP futtatása

Úgy tudjuk az NTP szervert elindítani a rendszerünkkel együtt, ha az /etc/rc.conf állományban szerepeltetjük az ntpd_enable="YES" sort. Ha az ntpd(8) számára további beállításokat is át akarunk adni, akkor az /etc/rc.conf állományban adjuk meg az ntpd_flags paramétert.

Ha a gépünk újraindítása nélkül akarjuk elindítani a szerver, akkor az ntpd parancsot adjuk ki az /etc/rc.conf állományban a ntpd_flags változóhoz megadott paraméterekkel. Mint például:

# ntpd -p /var/run/ntpd.pid

29.10.5. Az ntpd használati időleges internet csatlakozással

Az ntpd(8) program megfelelő működéséhez nem szükséges állandó internet kapcsolat. Ha azonban igény szerinti tárcsázással építjünk fel ideiglenes kapcsolatot, akkor érdemes letiltani az NTP forgalmát, nehogy feleslegesen aktiválja vagy tartsa életben a vonalat. Ha PPP típusú kapcsolatunk van, akkor az /etc/ppp/ppp.conf állományban a filter direktívával tudjuk ezt leszabályozni. Például:

 set filter dial 0 deny udp src eq 123
 # Nem engedjük az NTP által küldött adatoknak, hogy tárcsázást
 # kezdeményezzenek:
 set filter dial 1 permit 0 0
 set filter alive 0 deny udp src eq 123
 # Nem engedjük az NTP adatainak, hogy fenntartsák a kapcsolatot:
 set filter alive 1 deny udp dst eq 123
 set filter alive 2 permit 0/0 0/0

Mindenezekről részletesebb felvilágosítást a ppp(8) man oldal PACKET FILTERING című szakaszában és a /usr/share/examples/ppp/ könyvtárban található példákban kaphatunk.

Megjegyzés: Egyes internet-szolgáltatók blokkolják az alacsonyabb portokat, ezáltal az NTP nem használható, mivel a válaszok nem fogják elérni a gépünket.

29.10.6. További olvasnivalók

Az NTP szerver dokumentációja HTML formátumban a /usr/share/doc/ntp/ könyvtárban található.

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.