NTP (Russian)
From ArchWiki
i18n |
---|
English |
Русский |
Статья описывает различные возможности синхронизации времени и даты вашей системы с удалённым сервером. Вначале описывается openntpd, лёгкое в использовании решение. Затем оригинальный ntpd.
OpenNTPD
Использование OpenNTPD вместо ntpd
OpenNTPD - это свободная и лёгкая в использовании реализация сетевого протокола времени (Network Time Protocol). Он предоставляет возможность синхронизировать локальные часы с удалёнными NTP-серверами и может сам действовать как NTP-сервер, настраивая время в локальной сети.
OpenNTPD в основном разрабатывается господином Хеннингом Брауэром (Henning Brauer) как часть проекта OpenBSD.
OpenNTPD - это новый способ реализации NTP протокола, который намного проще в настройке и использовании, чем ntpd.
Вначале надо установить пакет OpenNTPD, который доступен в репозитории [community].
pacman -S openntpd
После установки следует отредактировать файл /etc/ntpd.conf.
Конфигурация по умолчанию обычно приемлема, если всё, что вы хотите, - это синхронизировать локальный компьютер.
# $OpenBSD: ntpd.conf,v 1.7 2004/07/20 17:38:35 henning Exp $ # sample ntpd configuration file, see ntpd.conf(5) # Адреса, которые прослушиваются (ntpd по умолчанию не слушает) #listen on * #listen on 127.0.0.1 #listen on ::1 # синхронизация с отдельным сервером #server ntp.example.org # использовать два выбранных наугад сервера из 8 # смотрите http://twiki.ntp.org/bin/view/Servers/NTPPoolServers servers pool.ntp.org
Чтобы синхронизироваться с отдельным сервером, раскомментируйте директиву server:
server ntp.example.org
Директива "servers" работает так же, как и директива "server", однако, если доменное имя резолвится на несколько IP адресов, то синхронизация произойдёт со всеми из них. Сервер по умолчанию, "pool.ntp.org" работает и приемлем в большинстве случаев.
pool.ntp.org
Может быть использовано любое количество директив "server" или "servers".
Если вы хотите, чтобы OpenNTPD на вашем компьютере был также и сервером времени, просто откомментируйте и отредактируйте директиву "listen". Например:
listen on *
будет прослушивать все интерфейсы.
А
listen on 127.0.0.1
Будет слушать только интерфейс loopback.
Если вы хотите видеть статус вашей синхронизации, посмотрите в /var/log/daemon.log
ntp
pacman -S ntp
Настройка /etc/ntp.conf
Самая первая строка в вашем ntp.conf должна быть похожа на эту:
restrict default noquery notrust nomodify
По существу, она запрещает всем всё изменять. После этого, вам необходимо дать знать ntpd, кому вы хотите разрешить пользоваться вашим NTP-сервером. Здесь вы можете указать какие-то другие IP-адреса, которые должны с вами синхронизироваться. Например:
restrict 1.2.3.4 restrict 192.168.0.0 mask 255.255.255.0 nomodify
Это говорит ntpd о том, что 1.2.3.4 и все адреса из сети 192.168.0.0 могут синхронизироваться с вашим сервером, но всем им не разрешено что-либо изменять. Все другие IP-адреса в мире будут по-прежнему подчиняться дефолтным запретам (первая строка в файле ntp.conf).
Теперь необходимо указать сервера с уровнем достоверности (stratum) 2, с которыми наш сервер будет синхнизироваться. (Это просто примеры; используйте NTP-сервера, которые к вам ближе). Пожалуйста, поищите на этой странице сервера, близкие по расположению.
server ntp1.cs.wisc.edu server ntp3.cs.wisc.edu server ntp3.sf-bay.org
Если у вас нет серьезной причины не делать этого, лучшего всего использовать сервера pool.ntp.org. Можно выбрать альтернативный вариант из этого списка.
Если мы сейчас закончим настройку, мы никогда не сможем подключиться к серверу, потому что ответ от каждого из трёх серверов, перечисленных выше, никогда не сможет дойти до нашего сервера из-за дефолтных ограничений (пока мы не уменьшим эти ограничения, как сделали с адресом 127.0.0.1 и подсетью 192.168.0.).
Чтобы исправить это, вставьте в ntp.conf следующие строки:
restrict ntp1.cs.wisc.edu noquery nomodify restrict ntp3.cs.wisc.edu noquery nomodify restrict ntp3.sf-bay.org noquery nomodify
Это позволит синхронизировать наше локальное время с перечисленными NTP-серверами. Ограничение noquery не позволит этим внешним серверам запрашивать информацию с нашего сервера. Ограничение nomodify не позволит этим серверам изменять что-либо (синхронизация по-прежнему будет проходить).
Единственная вещь, которую нам осталось сделать, - добавить drift-файл (который хранит информацию об отклонениях ваших часов) и log-файл.
driftfile /etc/ntp.drift logfile /var/log/ntp.log
Полностью конфигурационный файл будет выглядеть примерно так:
# дефолтные ограничения restrict default noquery notrust nomodify # здесь переопределяем дефолтные ограничения restrict 10.1.1.0 mask 255.255.255.0 nomodify # публичные NTP-сервера для синхронизации(stratum 2) server ntp1.cs.wisc.edu server ntp3.cs.wisc.edu server ntp3.sf-bay.org restrict ntp1.cs.wisc.edu noquery nomodify restrict ntp3.cs.wisc.edu noquery nomodify restrict ntp3.sf-bay.org noquery nomodify # NTP drift file - хранит информацию об отклонениях времени driftfile /etc/ntp.drift # NTP log logfile /var/log/ntp.log
Заметьте, что это конфигурационный файл как для клиента, так и для сервера. Если вы хотите просто синхронизировать время с достоверным сервером и не заинтересованы в том, чтобы другие компьютеры с вами синхронизировались, вы можете сделать конфигурационный файл таким (только адресу 127.0.0.1 разрешено синхронизироваться):
# дефолтные ограничения restrict default noquery notrust nomodify # разрешить полный доступ через loopback интерфейс restrict 127.0.0.1 # публичные NTP-сервера для синхронизации (stratum 2) server ntp1.cs.wisc.edu server ntp3.cs.wisc.edu server ntp3.sf-bay.org restrict ntp1.cs.wisc.edu noquery nomodify restrict ntp3.cs.wisc.edu noquery nomodify restrict ntp3.sf-bay.org noquery nomodify # NTP drift file - хранит информацию об отклонениях времени driftfile /etc/ntp.drift # NTP log file logfile /var/log/ntp.log
... или если вас вообще не заботят ограничения, такой конфигурационный файл (заметьте, что в нем вообще нет ограничений, таким образом, нет необходимости уменьшать ограничения для 127.0.0.1 чтобы разрешить синхронизацию):
# публичные NTP-сервера для синхронизации (stratum 2) server ntp1.cs.wisc.edu server ntp3.cs.wisc.edu server ntp3.sf-bay.org # NTP drift file - хранит информацию об отклонениях времени driftfile /etc/ntp.drift # NTP log file logfile /var/log/ntp.log
A Note about Security
You may wonder about all of the restrict lines. The reason for them is security. If you don't want a secure NTP server, don't add any restrict lines to your ntp.conf file. If you want a secure NTP server, start out by adding a default restrict that doesn't allow anything to contact your server, then add more (less restrictive) restrict lines - allowing certain addresses various access privilages.
/etc/rc.d/network file modification
One more thing that you may want to do. In some cases, your /etc/ntp.conf file may be overwritten by dhcp. To avoid this, edit the /etc/conf.d/dhcpcd file and add -N to the line that starts with 'dhcpcd -t 10'.
FYI: This was my experience/solution with setting the time.
On my system my /etc/conf.d/dhcpcd contains a single line:
DHCPCD_ARGS="-t 30 -h $HOSTNAME"
I assume it needs to be changed to:
DHCPCD_ARGS="-N -t 30 -h $HOSTNAME"
Some have suggested adding -R to preserve /etc/resolv.conf as well.
To fix Time use /etc/rc.local
To set the correct time; Set time and start ntpd at boot via /etc/rc.local
Relevant sections of /etc/rc.conf
HARDWARECLOCK="UTC" TIMEZONE="US/Mountain" Network/ DHCP section: lo="lo 127.0.0.1" eth0="dhcp" INTERFACES=(lo eth0) Daemons subsection: DAEMONS=(syslog-ng hotplug !pcmcia network netfs !ntpd crond dbus hal alsa gdm)
This is my /etc/rc.local
#!/bin/bash # # /etc/rc.local: Local multi-user startup script. # # Re-copy ntp.conf (was over written by dhcp) cp /root/CONFIG.BAK/ntp.conf.bac /etc/ntp.conf # I advise you keep your desired /etc/ntp.conf # OUTSIDE of /etc # Set time /usr/bin/ntpdate ntp.nasa.gov #Use any time server you like here # Start ntpd /etc/rc.d/ntpd start
And here is my /root/CONFIG.BAK/ntp.conf.bac (this is just a copy of the desired /etc/ntp.conf)
# default restrictions restrict default noquery notrust nomodify # override the default restrictions here restrict 127.0.0.1 nomodify restrict 192.168.2.0 mask 255.255.255.0 nomodify # public NTP servers to sync with (all stratum 2) server ntp.nasa.gov #Use any time server you like here restrict ntp.nasa.gov noquery nomodify # NTP drift file - used to keep track of your system clocks driftfile /etc/ntp.drift # NTP log file logfile /var/log/ntp.log
Leave /etc/conf.d/dhcpcd at default. Mine is a single line and reads
DHCPCD_ARGS="-t 30 -h $HOSTNAME"
With this configuration I get the correct time and ntpd running at boot.
There may be a better way, but this worked for me.
I hope it helps.
Updating your system immediately using ntpdate
It is recommended to add a line like the following to your /etc/rc.local file so when you boot your system, your time will be correct (use an NTP server close to your location).
/usr/bin/ntpdate ntp1.cs.wisc.edu
Running ntpdate when you boot up is a good idea because ntpd may take a long time to synchronize your local clock depending on how far off the time is. If your clock is synchronized when ntpd starts, then it's sole purpose is to keep it synchronized. To run ntpd at startup, add ntpd to the daemons section of the /etc/rc.conf file.
ntpd will work well if you have a connection to the internet all the time. If you are using dialup, you may just want to stick with using ntpdate via the command line.
Querying your NTP server using ntpq
There is a default restrict statement for the localhost that includes an ignore flag. Without overriding it (adding the line restrict 127.0.0.1) you will not be able to query your NTP server. If that's not a concern to you, then leave out the restrict line for your localhost. You will still be able to synchronize with your stratum 2 servers.