NTP-сервер на Raspberry Pi для локальной сети
Зачем поднимать свой NTP-сервер? Причины: защита от внешних сбоев, снижение latency в локальной сети (1-2 мс вместо 20-50 мс), использование GPS как источника (стратум 1, точность 1-10 мкс). Raspberry Pi 4/5 с chrony отлично справляется — обслуживает до 1000 клиентов без нагрузки.
Стоимость: Raspberry Pi 5 (8GB) — 8 000 ₽, модуль GPS NEO-6M — 500 ₽, microSD 32GB — 500 ₽, блок питания — 800 ₽. Итого: ~10 000 ₽. Сравните с коммерческим NTP-сервером stratum 1 (50 000+ ₽).
Что понадобится
- Raspberry Pi 4/5 (подойдёт и 3B+, но 4+ лучше)
- microSD 16GB+ (Class 10, A1)
- Блок питания 5V 3A (USB-C для Pi 4/5)
- Опционально: GPS-модуль NEO-6M/NEO-M8N (для стратум 1)
- Антенна GPS с кабелем (если используете GPS)
- Ethernet-кабель (Wi-Fi тоже работает, но Ethernet стабильнее)
Шаг 1. Установите Raspberry Pi OS
Скачайте Raspberry Pi Imager с официального сайта. Запишите образ «Raspberry Pi OS Lite» (без графического интерфейса, 1.2 GB) на microSD.
Шаг 2. Настройте SSH
После записи образа откройте /boot/ssh.txt (если его нет — создайте пустой файл) или используйте Imager → Advanced options для включения SSH.
Шаг 3. Подключитесь по SSH
ssh pi@raspberrypi.local
Пароль по умолчанию: raspberry.
Шаг 4. Обновите систему
sudo apt update && sudo apt upgrade -y
Шаг 5. Установите chrony
sudo apt install chrony gpsd gpsd-clients pps-tools
Шаг 6. Подключите GPS (если есть)
Подключите GPS-модуль к GPIO:
- VCC → 5V (pin 2 или 4)
- GND → Ground (pin 6)
- TX → GPIO 15 (pin 10, RX)
- RX → GPIO 14 (pin 8, TX)
- PPS → GPIO 18 (pin 12, для pps-tools)
Включите UART: sudo raspi-config → Interface Options → Serial Port → Login shell NO, Hardware YES. Перезагрузитесь.
Шаг 7. Настройте gpsd
Отредактируйте /etc/default/gpsd:
START_DAEMON="true" USBAUTO="true" DEVICES="/dev/ttyAMA0" GPSD_OPTIONS="-n -G"
Шаг 8. Настройте chrony с GPS
Отредактируйте /etc/chrony/chrony.conf:
pool ru.pool.ntp.org iburst maxsources 4 makestep 1.0 3 rtcsync logdir /var/log/chrony log measurements statistics tracking # GPS как источник стратум 1 refclock SHM 0 offset 0.0 delay 0.2 refid GPS precision 1e-3 refclock PPS /dev/pps0 refid PPS precision 1e-9 allow 192.168.0.0/16 local stratum 1
Шаг 9. Запустите chrony
sudo systemctl enable --now gpsd chrony sudo systemctl status chrony
Шаг 10. Проверьте точность
chronyc tracking chronyc sources -v chronyc sourcestats -v
В выводе tracking найдите Reference ID — должен быть GPS (или PPS). Stratum — 1. Offset — в микросекундах.
Шаг 11. Настройте клиентов
На Windows 11:
w32tm /config /manualpeerlist:"192.168.1.100" /syncfromflags:manual net stop w32time && net start w32time w32tm /resync
На macOS:
sudo sntp -sS 192.168.1.100
На Linux:
sudo apt install chrony sudo systemctl stop systemd-timesyncd sudo systemctl disable systemd-timesyncd sudo nano /etc/chrony/chrony.conf # Добавьте: server 192.168.1.100 iburst prefer sudo systemctl restart chrony
Точность и стабильность
Stratum 1 с GPS: 1-10 микросекунд, отклонение меньше 1 ppm.
Stratum 2 с пулом: 1-10 миллисекунд, отклонение меньше 100 ppm.
Без NTP: 1-10 секунд в сутки, отклонение 10-100 ppm.
Для домашнего использования стратум 1 — overkill. Достаточно стратум 2 (Raspberry Pi + ru.pool.ntp.org + chrony).
FAQ
Pi 4 — достаточно. Pi 5 быстрее, но для NTP-сервера это не критично. Берите Pi 4 (4GB) — экономия 2000 ₽.
Для дома/офиса — нет. ru.pool.ntp.org даёт стратум 2, точность 1-10 мс. GPS нужен для финансовых учреждений и телеком-операторов.
До 1000-5000 клиентов при минимальной нагрузке CPU. Chrony написан на C, очень эффективен.
Да, любой компьютер с Linux подойдёт. Старый ноутбук, неттоп, мини-ПК. Raspberry Pi — самый дешёвый вариант.
PPS (Pulse Per Second) — сигнал от GPS, который даёт 1 импульс ровно в начале каждой секунды с точностью 100 нс. chrony использует PPS для точной привязки времени к UTC.