нтпд

нтпд

Я хотел бы использовать общий ntpdдемон, чтобы проверить, ведется ли время виртуальной машиной или нет, не позволяя ей фактическирегулироватьчасы.

Я запускаю Solaris 11.4 (стандартный образ Oracle для Intel) внутри VirtualBox на системе macOS и не могу правильно синхронизировать время. Мне пришло в голову, что виртуальная машина может использовать VirtualBox Guest Additions для этого (я не знаю, как это работает) и что я могу нарушить отсчет времени, работая ntpdв гостевой ОС.

Чтобы проверить это, я подумал, что мне нужно настроить ntpdвиртуальную машину Solaris, чтобымониторнесколько общедоступных серверов времени, но каким-то образом не дать им изменить локальные часы. Таким образом, я мог посмотреть, как loopstatsи peerstatsлоги выглядели с течением времени, чтобы увидеть, действительно ли локальные часы показывают правильное время.

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

Я хотел сделать это и в прошлом на системах, где я использую openntpd(из OpenBSD) для фактического отсчета времени. ntpdТогда демон мог бы просто сидеть в фоновом режиме и следить, не вмешиваясь. Но я не смог найти способа сделать это и тогда.

решение1

нтпд

Понимая, что выдолжениспользуйте ntpd, насколько мне известно, единственные варианты:

отключить нтп

Как видно наntp.confстраница руководстваесть возможность отключить ntpОбратная связь, или, говоря простым языком: удалить возможность расчета поправок времени между серверами времени и локальными часами. Строка, ntp.confнеобходимая для активации такой опции:

disable ntp

Примечание: при использовании этой опции время, которое ntpd может предоставить другим системам, запрашивающим ссылку на время, может быть неправильным/отсутствовать. Кажется разумным использовать строку для denyотклонения всех запросов на время от других систем, если только вы не хотите отслеживать отклонение времени от внешней системы (используйте deny и разрешайте IP внешней системы).

Примечание:Мне не совсем ясно, что системные часы фактически оставлены "свободными" ntpd. Однако это документированная опция, так что если ntpd не соответствует тому, что документировано, то это ошибка.

минсэне

minsane minsane
Это минимальное количество кандидатов, доступных алгоритму выбора часов, чтобы создать один или несколько истинных химеров для алгоритма кластеризации. Если доступно меньше этого числа,часы недисциплинированны и им позволено бежать свободно.

Это делается путем установки строки (в ntp.conf) следующего вида:

tos minsane 100

Или какое-то другое большое число (большее, чем количество доступных или используемых серверов).

Примечание: мне не ясно, сбрасывается ли значение дрейфа ядра на 0, чтобы избежать медленного смещения часов. Может быть разумно дополнительно установить , disable kernelчтобы отключить функции дисциплины ядра.

Связанный

ntpd-qn

Когда ntpdсервер работает, ntpq -pnон может сообщать, насколько хорошо сервер ntpd выполняет свою работу по синхронизации системных часов. Это альтернативный способ регистрации разницы во времени.

ntpdate -q

Пакет ntpdate(помеченный как устаревший) можно использовать для проверки разницы во времени с помощью:

ntpdate -q 'pool.ntp.org'         # marked as deprecated.

Используйте ntpdate -qu 'pool.ntp.org', чтобы для запуска команды не требовались привилегии root ( -uозначает «использовать непривилегированные сетевые порты», однако исполняемый файл должен быть доступен пользователю).

снтп

Существует простая программа для запроса (не изменяйте ее, если не используется опция -s или -S):

sntp pool.ntp.org

дата

Программа rdateумеет показывать удаленное время (и местное время):

rdate -np pool.ntp.org; date

Где -nозначает: использовать SNTP (RFC 2030) вместо протокола времени RFC 868 (по умолчанию); и толькоРаспечататьрезультат без внесения каких-либо фактических изменений.

Однако эта программа ограничена разрешением целых секунд (не долей). И онане имеет опций в солярисе

хрони

Заменяющий пакет ntp (chrony) способен выполнять проверку разницы во времени без установки системных часов:

chronyd -Q 'pool pool.ntp.org iburst'

Я полагаю, что все это методы определения (без изменения) разницы во времени между временем NTP в Интернете и системным временем.

решение2

Сомневаюсь, что это возможно из ntpdкоробки:

Если объединить эти два фактора, то крайне маловероятно, что у ntpd есть режим, который может правильно поддерживать значения этих параметров без внесения корректировок в режиме реального времени.ачасы, где единственные доступные ему часы — это системные часы.


Из вашего вопроса не ясно, что вам на самом деле нужно ntpd. Подойдет любой [S]NTP-клиент.

Если вы освоили немного кода, то вы, возможно, сможете написать что-то, что будет опрашивать серверы без повторной калибровки системных часов.

Например, есть библиотека NTP для Python, которая называетсянтплиб. Скрипт для вывода смещения в 60-секундном опросе может выглядеть следующим образом:

import ntplib
import sys
import time

def main(*args):
    ntp_client = ntplib.NTPClient()
    while True:
        for server in args:
            try:
                response = ntp_client.request(server, version=3)
                print(response.offset)
                time.sleep(60)
            except ntplib.NTPException:
                print("query failed: {}".format(server))

if __name__ == "__main__":
    if len(sys.argv) == 1:
        # Do not use this server for commertial software without permission
        main('pool.ntp.org')
    else:
        main(sys.argv[1:])

Поместите это в файл ntp_check.py. Убедитесь, что у вас установлен ntplib с pip install ntplibили специфичным для дистрибутивов ( apt-get install python3-ntplib). Затем вызовите его с помощью:

python3 ntp_check.py

Связанный контент