Расхождение времени в сети — тихая проблема, которая взрывается в самый неудобный момент. Kerberos-аутентификация падает с ошибкой «The clock skew is too great», SSL-сертификаты перестают проверяться, логи с разных серверов невозможно сопоставить, а разработчики тратят часы на поиск проблемы, которой нет. Причина — часы на клиенте расходятся на несколько минут.
Самый надёжный способ решить это централизованно — раздача NTP через DHCP. Клиент получает IP NTP-сервера вместе с адресом, маской и шлюзом. Ничего не нужно настраивать вручную. В этой статье — как настроить DHCP Option 42 MikroTik, привязать её к сети и проверить что всё работает.
Когда это нужно: корпоративная сеть с AD, несколько VLAN, Windows-клиенты с Kerberos, требования к единому системному времени серверов.
Что такое DHCP Option 42 и как она работает
DHCP-опции — это дополнительные параметры, которые сервер передаёт клиенту вместе с IP-адресом. Option 42 (NTP Servers) описана в RFC 2132 и содержит список IP-адресов NTP-серверов.
Клиент получает Option 42 при получении или обновлении lease, и если операционная система поддерживает эту опцию — использует полученный IP как NTP-сервер автоматически.
Формат значения Option 42
Значение передаётся не строкой, а байтами IP-адреса в шестнадцатеричном формате. Каждый октет IP — два hex-символа. Порядок прямой (big-endian).
Пример: 192.168.1.1
- 192 =
C0 - 168 =
A8 - 1 =
01 - 1 =
01
Итого: 0xC0A80101
Ещё пример: 10.0.0.1
- 10 =
0A - 0 =
00 - 0 =
00 - 1 =
01
Итого: 0x0A000001
Быстрый перевод в терминале Linux:
python3 -c "import socket,struct; print(hex(struct.unpack('!I', socket.inet_aton('192.168.1.1'))[0]))"
Почему не доменное имя. Option 42 принимает только IP-адреса. Доменные имена в RFC 2132 для этой опции не предусмотрены. Если указать имя — клиент получит мусор или проигнорирует опцию.
Особенности Windows-клиентов
Windows использует Option 42, но с нюансами. По умолчанию Windows XP и Server 2003 применяют полученный NTP-адрес без вопросов. Начиная с Vista/2008, если машина в домене — NTP-источником управляет доменная политика (W32tm), и Option 42 может игнорироваться. Для доменных машин правильнее настраивать NTP через GPO или PDC эмулятор.
Рабочие станции вне домена, Linux и macOS — Option 42 поддерживают хорошо.
Настройка NTP на MikroTik
Прежде чем раздавать NTP через DHCP — MikroTik сам должен синхронизировать время и работать как NTP-сервер для клиентов. Без этого настройка Option 42 RouterOS теряет смысл: клиенты будут указывать на сервер, который сам не синхронизирован.
RouterOS 7
В RouterOS 7 NTP-клиент и сервер объединены в одном пакете и настраиваются через /system/ntp.
Включить NTP-клиент (синхронизация времени самого роутера):
/system ntp client set enabled=yes servers=216.239.35.0,216.239.35.4
Или указать свой вышестоящий NTP:
/system ntp client set enabled=yes servers=10.0.0.254
Включить NTP-сервер (раздача времени клиентам):
/system ntp server set enabled=yes broadcast=no manycast=no
Проверить синхронизацию:
/system ntp client print
В выводе смотрите synced: yes и offset — расхождение в миллисекундах. Если synced: no — NTP-клиент не работает, дальше настраивать Option 42 бессмысленно.
/system ntp server print
Должно показать enabled: yes.
RouterOS 6
В RouterOS 6 NTP-клиент и сервер — отдельные подсистемы, и пакет NTP нужно устанавливать отдельно.
# Проверить установлен ли пакет
/system package print | grep ntp
# Если не установлен — скачать с mikrotik.com и загрузить через Files
Настройка NTP-клиента в RouterOS 6:
/system ntp client set enabled=yes primary-ntp=216.239.35.0 secondary-ntp=216.239.35.4
Настройка NTP-сервера в RouterOS 6:
/system ntp server set enabled=yes broadcast=no multicast=no
Отличие от RouterOS 7: в шестой версии команды primary-ntp и secondary-ntp вместо servers. Синтаксис /system ntp client set servers=... не работает — получите ошибку.
Создание DHCP Option 42
Теперь создаём саму опцию. Это и есть настройка Option 42 RouterOS — объявляем опцию один раз, потом привязываем к нужным сетям.
/ip dhcp-server option add code=42 name=ntp-server value=0xC0A80101
Разбор команды:
code=42— номер опции по RFC 2132, всегда 42 для NTPname=ntp-server— произвольное имя, по нему будем привязывать к сетиvalue=0xC0A80101— IP 192.168.1.1 в hex-формате
Несколько NTP-серверов. Option 42 поддерживает список IP — записываются подряд без разделителей:
# 192.168.1.1 и 192.168.1.2
/ip dhcp-server option add code=42 name=ntp-servers value=0xC0A80101C0A80102
Проверить что опция создана:
/ip dhcp-server option print
Важно: значение value должно начинаться с 0x — это префикс hex-формата. Если написать IP строкой ("192.168.1.1") или числом — клиент получит некорректные данные или не получит ничего.
Привязка Option к DHCP-сети
Созданная опция сама по себе ничего не делает — её нужно привязать к конкретной DHCP-сети.
Сначала смотрим список сетей:
/ip dhcp-server network print
Вывод покажет номер (0, 1, 2…) каждой сети. Запоминаем номер нужной.
Привязываем опцию:
/ip dhcp-server network set 0 dhcp-option=ntp-server
Где 0 — номер сети из предыдущей команды.
Если уже есть другие опции — добавляем через запятую, не заменяем:
/ip dhcp-server network set 0 dhcp-option=ntp-server,other-option
Применение к нескольким VLAN
В продакшене у меня обычно несколько VLAN с отдельными DHCP-сетями. Опция одна, привязываем к каждой сети:
/ip dhcp-server network print
# Допустим, нужные сети с номерами 0, 2, 4
/ip dhcp-server network set 0 dhcp-option=ntp-server
/ip dhcp-server network set 2 dhcp-option=ntp-server
/ip dhcp-server network set 4 dhcp-option=ntp-server
Или через Winbox: IP → DHCP Server → Networks → выбрать сеть → поле DHCP Options.
Если у каждого VLAN свой NTP-сервер — создаём отдельную опцию для каждого:
/ip dhcp-server option add code=42 name=ntp-vlan10 value=0xC0A80A01
/ip dhcp-server option add code=42 name=ntp-vlan20 value=0xC0A81401
/ip dhcp-server network set 1 dhcp-option=ntp-vlan10
/ip dhcp-server network set 2 dhcp-option=ntp-vlan20
Проверка работы
После привязки опции клиенты получат NTP-сервер при следующем обновлении lease. Ждать истечения аренды необязательно — можно обновить вручную.
Обновление lease на клиенте
Windows:
ipconfig /release
ipconfig /renew
Linux:
sudo dhclient -r && sudo dhclient
Или через systemd:
sudo systemctl restart NetworkManager
Проверка на Windows
ipconfig /all
В выводе ищем строку:
DHCP Options . . . . . . . . . : NTP Servers
NTP Servers . . . . . . . . . . : 192.168.1.1
Проверить что NTP работает:
w32tm /query /status
w32tm /query /source
Проверка на Linux
timedatectl status
Или если используется chrony:
chronyc sources -v
chronyc tracking
Посмотреть какой NTP получен через DHCP (dhclient):
cat /var/lib/dhcp/dhclient.leases | grep ntp
Проверка через Wireshark
Если хочется убедиться что Option 42 действительно передаётся — захватываем DHCP-трафик:
Фильтр: bootp или dhcp
В пакете DHCP ACK раскрываем: Bootstrap Protocol → Options → Option: (42) Network Time Protocol Servers
Там должен быть IP вашего NTP-сервера. Если Option 42 в пакете нет — опция не привязана к сети или lease не обновлён.
Проверка на MikroTik
# Посмотреть активные lease и когда выдавались опции
/ip dhcp-server lease print detail
# Проверить время на самом роутере
/system clock print
# Проверить синхронизацию NTP
/system ntp client print
Типовые ошибки
IP указан не в hex
Самая частая ошибка при настройке DHCP Option 42 MikroTik. Пишут строкой:
# Неправильно
value="192.168.1.1"
# Правильно
value=0xC0A80101
Клиент получит опцию, но разберёт её как набор ASCII-кодов, а не IP-адрес. NTP работать не будет, ошибки в логах не будет — просто тихо ничего не произойдёт.
DHCP lease не обновлён
Опция добавлена, но клиент продолжает работать по старому lease. Option 42 передаётся только при получении нового lease.
# На Windows принудительно обновить
ipconfig /release && ipconfig /renew
# Или на MikroTik удалить lease руками
/ip dhcp-server lease remove [find where address=192.168.1.100]
Ошибка из практики: добавил Option 42, проверил через ipconfig /all — NTP не появился. Полчаса смотрел конфиг. Оказалось — просто не обновил lease. После ipconfig /renew всё появилось.
RouterOS 6 несовместимость
В RouterOS 6 синтаксис NTP-клиента отличается. Если настраиваете по инструкции для RouterOS 7 — получите ошибку или роутер применит пустое значение.
# RouterOS 6 — правильно
/system ntp client set enabled=yes primary-ntp=216.239.35.0
# RouterOS 7 — правильно
/system ntp client set enabled=yes servers=216.239.35.0
Клиент игнорирует Option 42
Windows-машина в домене Active Directory скорее всего проигнорирует Option 42 — NTP управляется через W32tm и доменные политики. PDC-эмулятор синхронизируется с внешним источником, остальные машины — с PDC.
Для таких клиентов Option 42 не нужна. Нужно правильно настроить W32tm на PDC:
w32tm /config /manualpeerlist:"192.168.1.1" /syncfromflags:manual /reliable:yes /update
net stop w32tm && net start w32tm
NTP-сервер недоступен
Клиент получил IP из Option 42, но не может до него достучаться. NTP работает на UDP порту 123.
# Проверить доступность NTP с MikroTik
/tool ping 216.239.35.0
# Проверить что порт 123 не заблокирован firewall
/ip firewall filter print | grep 123
# Разрешить NTP для локальной сети
/ip firewall filter add chain=input protocol=udp dst-port=123 src-address=192.168.0.0/16 action=accept
Из практики: в одной сети firewall на роутере блокировал UDP 123 от клиентов. Option 42 раздавалась корректно, клиенты получали NTP-сервер, но пакеты не проходили. В логах клиентов — тайм-аут. Решение — добавить разрешающее правило до запрещающего.
Неправильная привязка опции к сети
Опция создана, но забыли привязать к DHCP-сети. Проверяем:
/ip dhcp-server network print detail
В выводе должна быть строка dhcp-option=ntp-server. Если её нет — опция не будет передаваться.
Best Practice
Раздавать локальный NTP, а не pool.ntp.org
Никогда не раздавайте через Option 42 адреса публичных NTP-серверов (pool.ntp.org, time.google.com). Клиент получит доменное имя в опции вместо IP — это не работает. Кроме того, если интернет упадёт — синхронизация времени во всей сети прекратится.
В продакшене я делаю так: MikroTik синхронизируется с pool.ntp.org или вышестоящим сервером, а клиентам через Option 42 раздаётся IP самого MikroTik. Клиенты синхронизируются локально — быстро и независимо от интернета.
MikroTik как NTP relay
# MikroTik синхронизируется с внешним NTP
/system ntp client set enabled=yes servers=216.239.35.0,216.239.35.4
# MikroTik раздаёт время локальным клиентам
/system ntp server set enabled=yes
# Option 42 указывает на IP MikroTik в локальной сети
/ip dhcp-server option add code=42 name=ntp-server value=0xC0A80101
# 0xC0A80101 = 192.168.1.1 = IP MikroTik
Отдельный NTP для AD-окружения
Если в сети есть домен Active Directory — не пытайтесь управлять временем доменных машин через Option 42. Настройте PDC-эмулятор на синхронизацию с MikroTik или внешним NTP, остальное AD сделает само по иерархии W32tm.
Option 42 оставьте для устройств вне домена: принтеры, IP-телефоны, IoT, Linux-серверы без домена, рабочие станции гостевой сети.
Проверять время на самом RouterOS
Перед тем как разворачивать NTP через DHCP — убедитесь что время на самом MikroTik корректно. Если роутер раздаёт неправильное время, все клиенты получат неправильное время.
/system clock print
/system ntp client print
Если synced: no — разбираемся с NTP-клиентом на роутере в первую очередь.
Мониторинг синхронизации
В продакшене добавляю простую проверку в The Dude или Zabbix — мониторинг NTP offset на ключевых серверах. Если расхождение больше 1 секунды — алерт. Это спасает от ситуации когда NTP тихо перестал работать за неделю до инцидента с Kerberos.


