Компенсация временного дрейфа при использовании 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-регистраций. Точная синхронизация — не опция, а требование.
Материалы, представленные на сайте, носят исключительно ознакомительный характер и не могут рассматриваться как руководство к действию. Автор не несет ответственности за любые последствия использования приведённой информации.
