Компенсация_временного_дрейфа_при_использовании_NTP_через_NAT_на

Компенсация временного дрейфа при использовании NTP через NAT на MikroTik

  • Янв, 15, 2026
Компенсация временного дрейфа при использовании NTP через NAT на MikroTik

При использовании MikroTik в роли шлюза с NAT клиенты за ним часто сталкиваются с дрейфом системного времени, даже при настройке NTP. Это особенно критично для систем видеонаблюдения, VoIP и баз данных, где расхождение более 500 мс приводит к отказу сервисов.

Проблема: NTP не работает корректно через NAT

Клиент отправляет NTP-запрос (UDP/123) на сервер. MikroTik выполняет маскарадинг, но при этом:

  • Исходный порт меняется на случайный (не 123);
  • Ответ от NTP-сервера приходит на этот случайный порт;
  • Некоторые NTP-серверы (например, pool.ntp.org) отклоняют запросы с нестандартных портов;
  • Даже если ответ принят, задержка обработки в NAT увеличивает jitter.

Причина: асимметрия маршрутов и stateful NAT

RouterOS по умолчанию не сохраняет исходный порт для NTP. В результате клиент получает время с высокой дисперсией (до ±2 секунд), что недопустимо для многих протоколов.

Решение на MikroTik: фиксированный src-port + connection-mark

# Шаг 1. Маркировка NTP-трафика
/ip firewall mangle
add chain=prerouting protocol=udp dst-port=123 action=mark-connection new-connection-mark=ntp_conn
add chain=prerouting connection-mark=ntp_conn action=mark-packet new-packet-mark=ntp_pkt

# Шаг 2. Принудительное использование порта 123 как источника
/ip firewall nat
add chain=srcnat packet-mark=ntp_pkt protocol=udp out-interface=ether1 \
    to-ports=123 action=src-nat

# Шаг 3. Настройка клиента (если локальный NTP не используется)
/system ntp client
set enabled=yes primary-ntp=192.168.10.10 secondary-ntp=8.8.8.8

Этот подход гарантирует, что все NTP-запросы выходят с порта 123, что повышает совместимость с публичными серверами.

Как проверить точность синхронизации

/system ntp client print status
# Ищите: "synchronized: yes", "offset: <50ms"

# Для внешней проверки:
/tool sniffer quick protocol=udp port=123
# Убедитесь, что src-port = 123

Альтернативы

В enterprise-средах рекомендуется развернуть локальный NTP-сервер (например, на Raspberry Pi с GPS-модулем), а MikroTik использовать только как клиент. Это исключает зависимость от интернета и NAT.

Даже 1-секундный дрейф времени может нарушить работу Kerberos, RADIUS и SIP-регистраций. Точная синхронизация — не опция, а требование.

Материалы, представленные на сайте, носят исключительно ознакомительный характер и не могут рассматриваться как руководство к действию. Автор не несет ответственности за любые последствия использования приведённой информации.