Как мне настроить локальный NTP-сервер?

16

Я установил NTP-сервер на Ubuntu Server 10.04, используя:

sudo apt-get install ntp

Демон NTP, кажется, работает и слушает порт 123.

Однако я не смог получить время с другой машины:

sudo ntpdate -u my_ntp_server
23 Nov 18:48:41 ntpdate[2990]: no server suitable for synchronization found

Есть ли какие-либо необходимые конфигурации, чтобы сделать?

Халед
источник

Ответы:

19

Вот хороший практический совет на форумах Ubuntu: http://ubuntuforums.org/showthread.php?t=862620

Яркая копия-паста:

HOWTO: Настройка NTP-сервера

В этом руководстве описывается, как настроить компьютер в качестве локального сервера протокола сетевого времени (NTP) и / или как использовать демон NTP для регулярного поддержания точного системного времени.

Что такое NTP?

Сетевой протокол времени (NTP) - это протокол, разработанный для точной синхронизации локальных часов с сетевыми серверами времени. Сеть серверов времени NTP настроена иерархически, так что любой пользователь может войти в систему как сервер на некотором уровне (более подробную информацию см. На странице Википедии).

Иерархия NTP разделена на разные уровни, называемые тактовыми слоями. Самый точный уровень, Stratum 0, зарезервирован для атомных часов и т. Д. Следующий уровень, Stratum 1, обычно используется сетевыми машинами, локально подключенными к часам Stratum 0. Stratum 2 ... 15 - это машины NTP, которые, в свою очередь, подключены к часам более низкого уровня и друг другу.

В этом руководстве описывается, как точно синхронизировать данные с машинами Stratum 1 и 2 и как можно точнее поддерживать системные часы в течение дня. Также включены разделы о том, как разрешить вашей машине работать в качестве сервера Stratum 2/3 для других машин в вашей локальной сети.

Должен ли я сделать NTP-сервер?

Нет ... абсолютно нет! Если вы удовлетворены тем, что часы в вашей сети имеют какое-то неизвестное отличие от стандартного времени (и друг друга), вам не нужно настраивать NTP-сервер. Я установил один на своем ноутбуке, чтобы синхронизировать несколько машин в локальной сети в течение <1 мс для эксперимента по биоинженерии. Кроме того, существуют различные другие преимущества, которые описаны ниже.

Мотивация:

Как правило, немодифицированные блоки Ubuntu используют ntpdate ( /usr/sbin/ntpdate) для периодической синхронизации часов с некоторым внешним сервером времени. Этот подход синхронизирует часы с разрешением курса (обычно один раз в день).

Компьютерные часы несовершенны и будут дрейфовать от (правильного) сервера времени в течение дня. Кроме того, скорости дрейфа в часах разных компьютеров различаются, так что к концу дня могут существовать значительные различия между разными локально сетевыми машинами, которые могут мешать определенным операциям (например, когда-либо возникают жалобы на make-файл при перемещении исходного кода среди разные машины?).

Можно запустить демон NTP локально на компьютере в вашей сети. Это имеет несколько преимуществ: во-первых, демон NTP постепенно «изучает» скорость дрейфа вашего локального компьютера и может скорректировать ее в течение дня. Синхронизация с серверами времени верхнего уровня происходит несколько раз в день, и одновременно можно использовать много разных серверов времени, чтобы сделать синхронизацию более точной. Таким образом, демон NTP действует как клиент точного времени, сохраняя ваши системные часы как можно ближе к стандартному времени.

Помимо поддержания точных системных часов, демон NTP позволяет машине в вашей сети (если вы хотите) работать в качестве сервера времени NTP. Это позволит очень быстро и точно синхронизировать другие машины в вашей локальной сети с вашим сервером времени в локальной сети, поскольку задержка в сети сведена к минимуму. Таким образом, различия в тактах между машинами в вашей сети сводятся к минимуму. Mac и даже Windows-боксы также могут синхронизироваться с NTP-сервером, если вы его настроите.

Существуют и другие, менее личные мотивы для настройки машины в качестве NTP-сервера. Во-первых, это может снизить нагрузку на NTP-серверы более высокого уровня, поскольку другие машины в вашей локальной сети могут синхронизироваться с локально установленным сервером времени. Кроме того, ntpdate устарела в пользу использования флага -q для ntpd (который имитирует его функциональность). Таким образом, даже если вы не хотите постоянно запускать ntpd в фоновом режиме, ntpdate в конечном итоге будет заменен на ntpd, так что вы можете захотеть ознакомиться с ним сейчас

Как поддерживать точные системные часы с помощью ntpd

  1. Установите демон NTP

Сначала установите демон NTP (ntpd):

sudo aptitude install ntpd

Как упоминалось ранее, ntpd может действовать как клиент (синхронизировать системное время) и как сервер (обеспечивая точное время для других машин).

При желании вы также можете удалить предыдущую (устаревшую) программу синхронизации времени, ntpdate. Возможно, будет разумнее сделать это после того, как у вас работает ntpd

sudo aptitude remove ntpdate
  1. Настройте демона правильно

Файл конфигурации для ntpd находится по адресу /etc/ntp.conf. Файл Ubuntu по умолчанию, вероятно, требует некоторой модификации для оптимальной производительности.

Первый раздел, который вы можете изменить, - это список серверов, с которыми нужно синхронизироваться. Раздел по умолчанию, вероятно, выглядит следующим образом:

# You do need to talk to an NTP server or two (or three).
server ntp.ubuntu.com

Чтобы получить максимально точное время, предпочтительно связываться с несколькими различными NTP-серверами и держать их как можно ближе к вашему физическому местоположению. В сети есть различные списки серверов, вероятно, лучший из них находится здесь. Есть некоторые споры о правильном количестве серверов для использования. Один лучше, чем два, и три или более, вероятно, хорошая идея, если вы не слишком перегружены. Ниже приведен пример нескольких серверов времени, которые я использовал:

server nist1-dc.WiTime.net iburst
server ntp0.mcs.anl.gov
server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org

Найдя несколько хороших серверов, добавьте их в список, указав 'iburst'наиболее перспективный. Например:

server nist1-dc.WiTime.net iburst

Это заставит ntpd очень быстро синхронизироваться с этим сервером после запуска. В противном случае ntpd будет медленно стремиться к согласию со списком серверов (как это характерно), и может потребоваться 15-20 минут для достаточно хорошей синхронизации, чтобы действовать как сервер времени для остальной части вашей сети.

Кроме того, добавьте несколько дополнительных строк в конец списка серверов, чтобы указать текущее местное время по умолчанию, если вы временно потеряете подключение к Интернету:

server 127.127.1.0
fudge 127.127.1.0 stratum 10

Это предотвратит любую неприятность, если вы запускаете ntpd на ноутбуке или другой машине с периодическими периодами отключения от Интернета.

В общем, список серверов должен выглядеть примерно так (это мое, ваши серверы, вероятно, будут другими):

# You do need to talk to an NTP server or two (or three).
server nist1-dc.WiTime.net iburst
server ntp0.mcs.anl.gov
server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org
server 127.127.1.0
fudge 127.127.1.0 stratum 10
  1. Убедитесь, что конфигурация работает

Теперь, когда у вас есть правильный список серверов в вашем /etc/ntp.confфайле, пришло время запустить демон и посмотреть, правильно ли вы синхронизируете! Убедитесь, что у вас есть активное подключение к Интернету, а затем запустите:

sudo /etc/init.d/ntp restart

Далее, просмотрите системный журнал, чтобы увидеть, синхронизируете ли вы с сервером времени:

tail -f /var/log/syslog

Примерно через 10-15 секунд (или до 15-20 минут, если вы забыли поставить «iburst» после вашего любимого сервера), вы должны увидеть что-то вроде следующего в системном журнале:

Jul 17 16:50:22 hostname ntpd[22402]: synchronized to 140.221.9.20, stratum 2

Если это сообщение не приходит, вы еще не синхронизированы с сетью NTP-сервера. Проверьте список пиров NTP, с которыми вы общаетесь, используя следующее:

ntpq -c lpeer

Если поля 'delay', 'offset' и 'jitter' не равны нулю и вы не синхронизированы, это, вероятно, означает, что вам просто нужно подождать некоторое время. Еще раз проверьте, что вы вставили аргумент «iburst» в свой список серверов! Мои коллеги, для справки, выглядят примерно так:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*milo.mcs.anl.go 192.5.41.40      2 u    4   64   77   46.213   67.753   2.207
-europium.canoni 193.79.237.14    2 u   63   64   37   97.375   71.020   1.875
-dtype.org       69.25.96.13      2 u    2   64   77   86.956   69.178   1.804
+smtp130.junkema 216.218.254.202  2 u    2   64   77   87.266   67.677   0.916
+kechara.flame.o 216.218.254.202  2 u    -   64   77   89.183   68.717   1.713
-host2.kingrst.c 99.150.184.201   2 u    -   64   77   24.306   62.121   2.608
 LOCAL(0)        .LOCL.          10 l   59   64   37    0.000    0.000   0.002
  1. Поделиться! (необязательный)

Когда ntpd запущен и синхронизирован с выбранными вами серверами времени, вы можете настроить его для работы в качестве сервера времени для других машин. Для этого добавьте раздел, подобный следующему /etc/ntp.conf:

# Allow LAN machines to synchronize with this ntp server
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.2.0 mask 255.255.255.0 nomodify notrap
You may add as many (or few) CIDR address blocks to allow to synchronize with your machine as you'd like. I included those commonly used with Linksys (192.168.1.*) and SMC (192.168.2.*) routers.
  1. Синхронизировать! (необязательный)

После того, как вы настроили NTP-сервер, используя шаги 1-4, вы можете синхронизировать другие машины в вашей сети с вашим сервером различными способами. Я обрисую пару из них ниже:

пЪрд:

Если у вас установлен ntpd на другом компьютере, вы можете использовать свой первый сервер в списке серверов вашего файла ntp.conf или один раз синхронизировать с параметром -q, как показано ниже:

ntpd -q [IP address of your server]

Ntpdate:

Если у вас по-прежнему установлен ntpdate на другом компьютере, вы можете использовать его для синхронизации с вашим сервером следующим образом:

ntpdate [IP address of your server]

Примечание: если вы запускаете ntpd на машине и по какой-то причине по-прежнему хотите использовать ntpdate для установки времени, вы должны использовать опцию -u.

Окна:

Машины Windows используют упрощенную версию NTP, называемую Simple Network Time Protocol (SNTP), и могут синхронизироваться с NTP-серверами. Чтобы выполнить синхронизацию с вашим новым сервером, дважды щелкните по времени и перейдите на вкладку «Интернет-время». Введите IP-адрес вашего сервера в поле «Сервер». Я приложил скриншот синхронизации Windows XP с сервером времени локальной сети, если кому-то будет интересно.

Это оно! Весь процесс не сложен, но может сбить с толку того, кто раньше не имел дело с сетью NTP. Надеюсь, это поможет! Дайте мне знать, если у вас возникнут проблемы с настройкой вашего сервера.

Майк

связи

Я нашел следующие ссылки полезными ... вы тоже можете!

https://help.ubuntu.com/7.10/server/C/NTP.html http://linuxwave.blogspot.com/2007/0...tp-server.html http: //lists.ntp.isc. org / pipermail / q ... er / 011889.html http://www.linuxhomenetworking.com/w...Fntp.conf_File http://www.ntp.org/ntpfaq/NTP-a-faq.htm

RobotHumans
источник
Спасибо за ссылку. На самом деле, я не изменил свою конфигурацию! Это просто сработало через некоторое время.
Халед
на вашем ntp-сервере вы можете запустить ntpdate -s a_stratum_1_server_addressего для немедленной синхронизации. затем на вашем другом (клиентском) компьютере запуск 'ntpdate -q your_local_ntp_server` должен дать ответ, похожий наserver your_local_ntp_server_ip, stratum 2, offset -0.012221, delay 0.02618
Keith Reynolds
Ответ, содержащий только ссылку, может устареть. Пожалуйста, включите важную информацию в самом ответе.
Зета
5

Есть много ссылок по этому поводу, и мне кажется, что они усложняют процедуру. В моем случае у меня есть одна машина, которая действует как прокси-сервер и брандмауэр, и все остальные мои подключаются к Интернету через него. Я не хотел открывать порты на брандмауэре. Поэтому прокси - сервер должен быть (нтп) времени сервера и другие машины ( клиенты ) получить время от него.

Вы должны установить ntp на все машины, а также установить ntpq на всех них.

Сначала посмотрите, работает ли ntp. По умолчанию ntpd (демон ntp) будет запущен сразу после его установки, и настройки по умолчанию должны работать. Тем не менее, NTP не работает мгновенно, поэтому подождите немного. Затем команда:

ntpq -c lpeer

должен дать вам вывод, который выглядит примерно так:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+golem.canonical 193.79.237.14    2 u  170 1024  377  140.458   -0.655   3.234
*gatekeeper.tss. 204.123.2.72     2 u  608 1024  377   84.650    2.168   0.471

или:

ntpq --numeric --peers

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+91.189.89.199   193.79.237.14    2 u  652 1024  377  140.151   -0.242   2.821
*66.7.96.1       204.123.2.72     2 u   64 1024  377   85.074    2.409   0.963

Если это так, вы подключены, и ваш сервер времени получает время. Если нет, используйте

ps -e | grep "ntp" 

чтобы убедиться, что ntp работает, и попробуйте еще раз. Также попробуйте перезапустить ntp:

sudo /etc/init.d/ntp restart

может пройти некоторое время (извините!), прежде чем соединение будет установлено. Демон не очень часто опрашивает серверы. Столбец «когда» в выводе выше показывает время в секундах с момента опроса сервера.

Теперь вы должны заставить сервер времени отправлять время на другие ваши машины.

Отредактируйте файл /etc/ntp.confна сервере. Вы должны добавить строку для своей сети. В моем случае у меня есть сеть 10.0.0.0. В файле ntp.conf я добавил строку:

broadcast 10.255.255.255

Вы должны добавить широковещательную линию для каждого сегмента вашей сети. Если ваша сеть проста, как моя, вам нужна только одна строка, как указано выше. Теперь перезапустите ntp, используя приведенную выше команду, и проверьте снова, используя ntpq, и вы должны увидеть:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+golem.canonical 193.79.237.14    2 u   70 1024  377  140.151   -0.242   2.821
*gatekeeper.tss. 204.123.2.72     2 u  506 1024  377   84.650    2.168   0.241
 10.255.255.255  .BCST.          16 u    -   64    0    0.000    0.000   0.002

Вуаля, это вещание.

Теперь вы должны заставить каждую клиентскую машину получать время от вашего сервера вещания. На каждом редактируйте файл:

/etc/ntp.conf

и вы увидите несколько строк, указывающих серверы.

добавить строку

server 10.10.10.1

или каков адрес вашего сервера. Затем перезапустите ntp на клиентском компьютере, используя приведенную выше команду. Кроме того, вы можете получить идентификатор процесса, просто убить его и снова запустить. Без разницы.

Затем, по прошествии достаточного времени, проверьте с помощью ntpq:

ntpq --numeric --peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*10.10.10.1      66.7.96.1        3 u  123 1024  377    0.430    1.022   1.831

и вы можете видеть, что клиент использует сервер времени.

Это займет некоторое время.

расточитель
источник
Вы можете запустить ntpdate -s a_stratum_1_server_addressна своем сервере ntp, чтобы заставить его опросить и синхронизировать немедленно.
Кит Рейнольдс
Этот тип вещания поддерживается всеми коммутаторами? Например, широковещательная рассылка UDP блокируется большинством коммутаторов / маршрутизаторов.
Танасис
1

Принятый ответ (по состоянию на июль 2018 года) у меня не сработал. Этот другой метод отлично работал на Ubuntu 16.04 LTS в июле 2018 года:

Установите NTP, если не установлен:

sudo apt-get update
sudo apt-get install ntp

Отредактируйте файл конфигурации, чтобы служба NTP могла получать запросы:

sudo nano /etc/ntp.conf --syntax=sh

Раскомментируйте эту строку:

# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
# broadcast 192.168.111.255

чтобы:

# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
broadcast 192.168.111.255

Перезапустите службу NTP :

sudo /etc/init.d/ntp restart

Теперь ваш NTP-сервер должен работать и позволить другим компьютерам синхронизироваться с вашим. Любой из вышеперечисленных тестов, например, ntpdate -u YourComputerдолжен работать нормально.

Сопалахо де Арриерес
источник