TECH / Серверы и сайты 4 мин чтения

Настройка NTP-сервера в локальной сети на FreeBSD

Antonio Автор NEMCD
Опубликовано 15.04.2012 · Обновлено 14.11.2026 · 4 мин

Делал ревизию своих сетевых сервисов и решил заодно описать, как развернуть собственный NTP-сервер для синхронизации времени на компьютерах в локальной сети. Если в офисе больше десяти машин и уже работает шлюз или сервер на FreeBSD, поднять локальный сервер времени – дело десяти минут.

Схема настройки NTP-сервера FreeBSD в локальной сети с /etc/ntp.conf и pool.ntp.org

Коротко: во FreeBSD демон ntpd уже входит в базовую систему. Нужно лишь прописать автозапуск в /etc/rc.conf, указать пулы pool.ntp.org и безопасные правила restrict в /etc/ntp.conf, открыть порт UDP 123 в файрволе и проверить пиры через ntpq -p.

На нашем шлюзе уже крутятся файловый сервер, DNS, VPN и локальный сайт, поэтому добавить сюда ещё и раздачу точного времени по протоколу NTP напрашивалось само собой. Ничего стороннего из портов ставить не приходится.

1. Включаем автозапуск ntpd

Добавляем параметры запуска в /etc/rc.conf:

sysrc ntpd_enable="YES"
sysrc ntpd_sync_on_start="YES"

Если хочется явно указать нестандартный путь к конфигу (как было на старых системах – например, /etc/ntp/ntp.conf), дополнительно прописывают ntpd_config="/etc/ntp/ntp.conf". Но по умолчанию современная FreeBSD читает стандартный файл /etc/ntp.conf.

2. Настраиваем /etc/ntp.conf и права доступа

Раньше многие задавали внешние серверы жёстко по IP-адресам провайдеров. На практике такой подход со временем ломается: чужие серверы переезжают, меняют адреса или закрывают публичный доступ. Надёжнее использовать динамические пулы проекта pool.ntp.org с опцией iburst для быстрой первичной синхронизации.

Откройте /etc/ntp.conf и соберите базовую конфигурацию:

# Внешние источники точного времени
pool 0.freebsd.pool.ntp.org iburst
pool europe.pool.ntp.org iburst

# Файл дрейфа часов и журнал работы
driftfile /var/db/ntpd.drift
logfile /var/log/ntpd.log

# Ограничения по умолчанию (защита от DDoS-амплификации)
restrict default limited kod nomodify notrap nopeer noquery
restrict -6 default limited kod nomodify notrap nopeer noquery

# Полный доступ для локального хоста
restrict 127.0.0.1
restrict -6 ::1

# Разрешаем своей подсети только получать время (подставьте свою маску)
restrict 10.0.0.0 mask 255.255.248.0 nomodify notrap nopeer noquery
Почему не стоит писать restrict default ignore: жёсткий запрет ignore отбрасывает ответы от любых узлов, которые не прописаны отдельным правилом restrict. С директивой pool пул выдаёт меняющиеся IP-адреса, поэтому вариант с limited kod nomodify notrap nopeer noquery защищает сервер от злоупотреблений, но не ломает синхронизацию с внешним пулом.

3. Файл дрейфа, файрвол и запуск службы

Создаём пустой файл дрейфа, если его ещё нет, и открываем порт UDP 123 в правилах ipfw только для доверенной сети или исходящего обмена (в продакшене лучше ограничить any вашими подсетями):

touch /var/db/ntpd.drift
ipfw add allow udp from 10.0.0.0/21 to me 123 keep-state
service ntpd start

Если служба уже работала с прежним конфигом, примените изменения перезапуском:

service ntpd restart

4. Проверяем синхронизацию

После старта демону требуется несколько минут (обычно 5–10), чтобы опросить источники и выбрать ведущий сервер. Список подключений смотрим командой:

ntpq -p

Звёздочка * в первой колонке означает текущий выбранный эталон, а плюсы + – годных кандидатов. Если в колонке стратума st у какого-то узла стоит 16, значит сервер недоступен или ещё не ответил.

Проверить ответ локального сервера с другого компьютера или с того же хоста можно утилитой ntpdate -q (флаг -q только опрашивает время без перевода системных часов):

ntpdate -q 10.0.0.1

В локальной корпоративной сети я также иногда заводил на внутреннем DNS запись для time.windows.com, указывающую на 10.0.0.1 – тогда рабочие ПК с Windows автоматически брали время у моего шлюза без перенастройки каждой машины. Единственное условие для такой схемы – клиенты должны использовать локальный DNS без DoH в браузере/ОС, а отдельным компьютерам можно просто указать адрес сервера времени в самой Windows.

Типичные ошибки и предупреждения в логах

  • Frequency format error in ntpd.drift: появляется при первом запуске, когда файл дрейфа пустой; после расчёта смещения ntpd перезапишет его сам.
  • Bad file descriptor: файл ntpd.drift отсутствует или указан неверный путь в ntp.conf (в новых версиях файл по умолчанию называется /var/db/ntpd.drift).
  • Address already in use (port 123): обычно означает, что уже запущен второй экземпляр ntpd или процесс ещё не освободил сокет; проверьте занятые порты командой sockstat -46 | grep 123.
  • Ротация логов: ntpd пишет в лог совсем немного событий, но при желании стандартный файл /var/log/ntpd.log легко добавить в /etc/newsyslog.conf.

В целом штатного демона ntpd во FreeBSD с головой хватает для офисной сети: настроил один раз – и все рабочие станции, серверы и камеры в локалке держат одинаковое время без лишних походов наружу.

Ещё похожие заметки:

Оставить комментарий