Синхронизация времени и даты двух компьютеров Ubuntu, не подключенных к Интернету

у меня две машины

  1. машина А с ip 192.168.0.2
  2. машина B с назначенным IP 192.168.0.3

Они оба подключены к локальной сети, и я хотел бы установить дату и время машины A так, чтобы они соответствовали дате и времени машины B.

Для аналогичной проблемы я бы использовал решение, представленное в этом ответе.

      sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"

Однако это сработает только в том случае, если у меня будет подключение к Интернету.

Что такое команда для синхронизации времени и даты двух операционных систем Ubuntu без использования Интернета?

Кандидат 1 Спасибо @Joe за его вклад. Как насчет настройки веб-сервера на машине B, запроса к нему с машины A и получения времени и даты из ответа? Это выглядит довольно четко.. есть ли более простое решение?

Кандидат 2 Спасибо @matigo за это. Настройка NTP-сервера в локальной сети. Проверка документов NTP для реализации этого решения

4 ответа

Если бы у вас было подключение к Интернету, вы могли бы войти вwgetкоманда, заданная внутриdateкоманду и убедитесь, что она дает строку времени, подобную этой:

      25 Apr 2023 13:20:23Z

Он делает это, беря дату из заголовка HTTP, удаляя слово «Дата:» и добавляяZв конце. Таким образом, вы можете установить время вручную, используя этот формат:

      sudo date -s "25 Apr 2023 13:20:23Z" 

Возможно, вам потребуется перевести «Апр» в сокращенное название месяца в вашем регионе.

Настройка NTP-сервера (насколько я знаю, текущие версии Ubuntu используютchronydв качестве NTP-сервера) на одном компьютере и с помощью NTP-клиента (chronyc, наоборот) с другой синхронизировать машину с сервером вроде как лучший способ.

Другой вариант — использовать «старый добрый» Daytime Protocol. Вам нужно установитьxinetdна серверной машине (той, с которой вы будете синхронизироваться) и включите дневную службу в ее конфигурации (вот некоторая информация о том, как ее включить). Служба дневного времени возвращает текущую дату и время в виде строки, поэтому вам, вероятно, придется написать некоторый скрипт на клиентской машине (той, которую вы хотите синхронизировать с клиентской машиной), чтобы получить эту информацию и установить часы в соответствии с ней (я не знаю ни одного готового клиента для дневного протокола). Но использование NTP все же кажется лучше...

Хорошо, спасибо за ценную информацию, которую вы предоставили. После небольшого исследования и тестирования вот решение, которое я использую.

Как Canonical заявил

Начиная с Ubuntu 16.04, timedatectl/timesyncd (которые являются частью systemd) заменяют большую часть ntpdate/ntp.

[...]

ntpdate теперь считается устаревшим в пользу timedatectl (или chrony) и больше не устанавливается по умолчанию. timesyncd обычно делает правильные вещи, синхронизируя ваше время, а chrony поможет в более сложных случаях.

Поэтому я дал Хрони шанс. Я также проверил:

  1. эта ссылка здесьздесь
  2. Стековой вопрос ,
  3. Красной шляпыСтраница
  4. Этот урок

Итак, короче говоря...

Машина А — настроена как NTP-сервер.


Настройте NTP-сервер, обязательно добавьтеlocal stratum 10и разрешите 192.168.0.0/24 заставить сервер работать нормально, даже если он отключен от Интернета, и чтобы клиентам в этой сети было разрешено подключаться к нашему NTP-серверу Chrony для синхронизации времени.

      confdir /etc/chrony/conf.d
pool ntp.ubuntu.com        iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2
allow 192.168.0.0/24
sourcedir /run/chrony-dhcp
sourcedir /etc/chrony/sources.d
keyfile /etc/chrony/chrony.keys
driftfile /var/lib/chrony/chrony.drift
ntsdumpdir /var/lib/chrony
logdir /var/log/chrony
maxupdateskew 100.0
rtcsync
makestep 1 3
leapsectz right/UTC

Перезапустите службу Chrony, проверьте, работает ли она, и включите ее запуск при загрузке.


Машина Б — настроена как клиент Chrony

Синхронизируйте дату и время с пулом серверов и установите 192.168.0.1 или любой другой IP-адрес в качестве предпочтительного сервера.

      sudo apt update && sudo apt upgrade
sudo apt install chrony
sudo vim /etc/chrony/chrony.conf

Добавьте в пул свой локальный NTP-сервер.

      pool 192.168.0.1 iburst prefer
keyfile /etc/chrony/chrony.keys
driftfile /var/lib/chrony/chrony.drift
logdir /var/log/chrony
log measurements statistics tracking
maxupdateskew 100.0
rtcsync
makestep 1.0 3

Перезагрузите, проверьте службу и включите ее при запуске.

      sudo systemctl restart chrony
sudo systemctl status chrony
CTRL+C
sudo systemctl enable chrony

Наконец, проверьте, получает ли он обновление из правильного источника.

      chronyc tracking
chronyc sources

Заключение

Рок-н-ролл и продолжай!

Я проведу краткое тестирование и буду обновлять этот пост, сообщая о любых проблемах, с которыми я столкнусь.

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

  1. установите гипервизор на другую машину с доступом в Интернет. (Было бы идеально, если бы на этой машине было 2 подключения Ethernet, одно из которых выходило в Интернет, а другое не использовалось или использовалось только для локальных сетей)
  2. сделайте эту машину клиентом времени какого-либо сервера времени (NTP, домен Windows и т. д.).
  3. установить гостевую ОС, которая представляет собой встроенное серверное устройство NTP
  4. дайте гостевому устройству адрес моста в пределах 192.168.0.*
  5. Синхронизируйте это время гостя со временем хоста с помощью гипервизора.
  6. Сделайте этого гостя автономным корневым источником времени NTP.
  7. Сделайте все машины с адресом 192.168.0.* NTP-клиентами этого гостевого устройства.

Поскольку внутренний механизм гипервизора (а не сетевой маршрут) является средством передачи привязки времени к гостевому устройству NTP, 192.168.0.* не имеет маршрута наружу, но все же имеет хорошую привязку ко времени. Если у хоста гипервизора есть сетевой кабель, используемый только для локальных сетей, даже перехват внешнего провода в неразборчивом режиме не будет иметь никакого общего доступа к 192.168.0.*

Другие вопросы по тегам