Вопрос или проблема
У меня есть три компьютера с Windows, которые я пытаюсь синхронизировать с NTP-сервером. Все они не справляются с этой задачей. Я подтвердил, что NTP-сервер работает нормально, подключившись с помощью WSL.
Вот что я пробовал:
Я включил windows time
в службах Windows.
Я пробовал: Панель управления -> дата и время -> интернет-часы -> ввод сервера -> синхронизация
. Это не удается.
Я пробовал это с повышенными правами:
w32tm /resync /rediscover
Появляется ошибка: Компьютер не синхронизировался, так как данные о времени недоступны
.
Я пробовал вручную настроить:
w32tm /config /manualpeerlist:<ip> /syncfromflags:manual
Это сообщает об успешности, но фактически время не устанавливает…
Я пробовал выключить и включить снова:
net stop w32time
net start w32time
w32tm /config /update
w32tm /resync /rediscover
Я также пробовал перезагрузку и все другие комбинации вышеизложенного, которые я мог найти в интернете, но результаты те же самые.
Я пробовал использовать pool.ntp.org
и получил тот же результат.
Затем я пробовал telnet <ip> 123
, который сообщает, что сервер недоступен.
ping <ip>
работает нормально.
В WSL (ubuntu) sudo ntpdate -q <ip>
работает корректно.
Я отключил брандмауэр на всех машинах.
Скорее всего, существует еще один брандмауэр за пределами вашей сети, который пытается без учета состояния блокировать все входящие NTP-запросы (возможно, в качестве какой-то меры по предотвращению DDoS-атак), но который также приводит к блокировке определенных типов NTP-ответов.
Затем я пробовал
telnet <ip> 123
, который сообщает, что сервер недоступен.
NTP работает исключительно по UDP; он не использует TCP.
В WSL (ubuntu)
sudo ntpdate -q <ip>
работает корректно.
В NTP есть два режима: клиент-серверный режим и симметричный режим. Они различаются по портам UDP: клиент-серверный использует типичную модель, где номер порта источника выбирается случайно, тогда как симметричный режим использует 123 как для порта назначения, так и для порта источника (что вы редко, если вообще когда-либо, увидите в других протоколах).
Если бы вы посмотрели на фактические пакеты в Wireshark, вы бы увидели, что:
-
ntpdate
использует клиент-серверный режим, поэтому он отправляет пакеты с случайного порта; ответы поступают на вашу систему на этом случайном порту. -
Windows использует симметричный режим, поэтому он отправляет пакеты с порта 123; это означает, что ответы от сервера отправляются на порт 123 на вашей стороне, делая их похожими на запрос с точки зрения брандмауэра без учета состояния.
Известно, что несколько интернет-провайдеров блокируют симметричный режим, например, я нашел сообщения на форумах о том, что AT&T известен его блокировкой.
Я думаю, что изменить работу Windows Time Service в этом плане невозможно; ваши единственные варианты могут быть а) запустить небольшой локальный NTP-сервер для вашей локальной сети, который затем синхронизируется с некоторым внешним NTP, используя режим, который не блокируется; либо б) запустить внешний NTP-сервер, который будет доступен через IPsec или какой-либо VPN.
(Иногда это также зависит от вашего маршрутизатора — многие маршрутизаторы реализуют NAT так, что он насильно изменяет исходный порт UDP-пакетов, так что даже если Windows действительно отправляет пакеты с порта 123, интернет-провайдер, который осуществляет блокировку, может никогда не увидеть этого благодаря скрытию NAT маршрутизатора, и все будет, казалось бы, работать нормально.
Более того, даже маршрутизаторы, которые обычно не переписывают исходные порты UDP, все равно будут делать это в случае необходимости, когда два компьютера пытаются связаться с одним сервером, в итоге это будет работать только для второго компьютера.)
Одна из проблем может заключаться в том, что источник w32tm /query /source
может указывать на локальные часы CMOS, а конфигурация w32tm /query /configuration
показывает сломанный NtpServer
, указывающий на Политику вместо Локального, например:
Type: NTP (Policy)
NtpServer: ,0x1 (Policy)
Чтобы это исправить, создайте групповую политику, используя gpedit.msc
в разделе Конфигурация компьютера -> Административные шаблоны -> Система -> Служба времени Windows -> Поставщики времени -> Настройка клиента Windows NTP
- Активируйте эту политику
- Установите
NtpServer
наtime.windows.com,0x9
- Установите
Type
наNTP
Сохраните, запустите gpupdate
из Run для немедленного применения обновлений политики.
Теперь вы должны увидеть следующее, когда запустите w32tm /query /configuration
:
Type: NTP (Policy)
NtpServer: time.windows.com,0x9 (Policy)
После того, как это появится, вернитесь в gpedit.msc
и установите Настройка клиента Windows NTP
в Не настроено
, снова запустите gpupdate
для применения новой политики и теперь, когда вы запустите w32tm /query /configuration
, он должен показать правильную информацию
Type: NTP (Local)
NtpServer: time.windows.com (Local)
и когда вы запустите w32tm /query /source
он должен показать
time.windows.com,0x9
Это сбросит время Windows, чтобы клиент NTP использовал NTP-сервер
Ответ или решение
Чтобы разобраться, почему у вас возникают трудности с подключением Windows-компьютеров к NTP-серверу, необходимо учесть несколько возможных проблем и решений. На основе предоставленного вами описания проблемы и предпринятых шагов, можно выделить несколько ключевых моментов для анализа и устранения неполадок.
Причины и решения проблемы с подключением к NTP-серверу
-
Проблемы с конфигурацией Windows Time Service
- Убедитесь, что служба Windows Time (
w32time
) правильно настроена. Командаw32tm /query /configuration
может показать текущие настройки. Если в строкеType
иNtpServer
указано значениеPolicy
, это может означать неправильную конфигурацию. - Решение: Используйте
gpedit.msc
для настройки политики. Перейдите вКонфигурация компьютера -> Административные шаблоны -> Система -> Служба времени Windows -> Поставщики времени -> Настроить клиент NTP Windows
. Включите политику, укажитеNtpServer
, например,time.windows.com,0x9
, и задайте типNTP
. После применения изменений, выполнитеgpupdate
для обновления настроек. Проверьте, чтобы источник времени изменился сPolicy
наLocal
.
- Убедитесь, что служба Windows Time (
-
Блокировки фаерволом и политикой сети
- Вы упомянули, что деактивировали локальный фаервол, однако существует возможность блокировки извне, например, на уровне маршрутизатора или провайдера. Некоторые интернет-провайдеры блокируют симметричный режим NTP (использование порта 123 как исходящего), что может стать препятствием для синхронизации.
- Решение: Установите локальный NTP-сервер в вашей сети, который сможет работать через не блокируемые режимы, или используйте VPN для подключения к внешнему серверу.
-
Проблемы маршрутизации и NAT
- Маршрутизаторы с технологией NAT иногда изменяют исходные порты UDP-пакетов. Это может привести к тому, что сервер NTP неправильно идентифицирует запросы.
- Решение: Проверьте настройки маршрутизатора, чтобы убедиться, что исходные порты не изменяются. Рассмотрите возможность использования другой конфигурации NAT.
Вывод и рекомендации
После применения предложенных решений, снова проверьте синхронизацию времени. При необходимости обратитесь к более детальному анализу сетевого трафика с помощью инструментов, таких как Wireshark, чтобы подтвердить маршрут и состояние UDP-пакетов.
Эти рекомендации должны помочь устранить проблемы, связанные с синхронизацией времени в Windows. Если проблема не решается, возможно, потребуется более детальный сетевой аудит с привлечением специалиста.