# NTP Service

> Настройка NTP на VyOS: синхронизация времени, NTP клиент и сервер, stratum иерархия, chrony, NTS security для Yandex Cloud и VK Cloud

Source: https://opennix.org/docs/vyos/services/vyos-ntp/


NTP (Network Time Protocol) - протокол для синхронизации времени компьютерных систем через сеть.

## Обзор

VyOS использует chrony (начиная с версии 1.4) для реализации NTP клиента и сервера.

NTP обеспечивает:
- Синхронизацию системного времени с точностью до миллисекунд
- Автоматическую коррекцию времени
- Обработку leap seconds (високосных секунд)
- Иерархическую систему time servers (stratum)
- Работу как клиента и сервера одновременно

**Протокол**: UDP порт 123

**Текущая версия**: NTPv4 (RFC 5905)

## Базовая конфигурация

### NTP клиент

Синхронизация с публичными NTP серверами:

```
set service ntp server 0.pool.ntp.org
set service ntp server 1.pool.ntp.org
set service ntp server 2.pool.ntp.org
commit
```

По умолчанию VyOS использует:
- time1.vyos.net
- time2.vyos.net
- time3.vyos.net

### NTP сервер

Разрешение клиентам синхронизироваться с VyOS:

```
set service ntp listen-address '192.168.1.1'
set service ntp allow-client address '192.168.1.0/24'
commit
```

## Конфигурация NTP серверов

### Добавление сервера

```
set service ntp server <hostname|IP>
```

Примеры:
```
set service ntp server pool.ntp.org
set service ntp server time.google.com
set service ntp server 216.239.35.0
```

### Опции сервера

#### prefer - Предпочтительный сервер

Приоритет сервера при выборе источника времени:

```
set service ntp server 0.pool.ntp.org prefer
```

#### noselect - Не использовать для синхронизации

Сервер мониторится, но не используется:

```
set service ntp server backup.ntp.org noselect
```

#### pool - Pool режим

Автоматическое разрешение имени и добавление нескольких серверов:

```
set service ntp server pool.ntp.org pool
```

Один DNS-запрос может вернуть множество IP-адресов, все будут использованы.

#### nts - Network Time Security

Шифрованное NTP соединение:

```
set service ntp server time.cloudflare.com nts
```

NTS обеспечивает аутентификацию и конфиденциальность NTP трафика.

#### ptp - PTP Transport

Использование Precision Time Protocol транспорта:

```
set service ntp server ntp.example.com ptp
```

#### interleave - Interleaved Mode

Улучшенная точность синхронизации:

```
set service ntp server ntp.example.com interleave
```

## NTP Pool

### Публичные NTP Pools

**NTP Pool Project** (pool.ntp.org):
```
set service ntp server 0.pool.ntp.org
set service ntp server 1.pool.ntp.org
set service ntp server 2.pool.ntp.org
set service ntp server 3.pool.ntp.org
```

**Региональные pools**:
```
# Россия
set service ntp server 0.ru.pool.ntp.org
set service ntp server 1.ru.pool.ntp.org

# Европа
set service ntp server 0.europe.pool.ntp.org
set service ntp server 1.europe.pool.ntp.org

# Северная Америка
set service ntp server 0.north-america.pool.ntp.org
```

**Вендор-специфичные**:
```
# Debian
set service ntp server 0.debian.pool.ntp.org

# Ubuntu
set service ntp server ntp.ubuntu.com
```

### Крупные провайдеры

**Google Public NTP**:
```
set service ntp server time.google.com
set service ntp server time1.google.com
set service ntp server time2.google.com
set service ntp server time3.google.com
set service ntp server time4.google.com
```

**Cloudflare NTP** (с NTS):
```
set service ntp server time.cloudflare.com nts
```

**Facebook NTP**:
```
set service ntp server time.facebook.com
```

## NTP Server Configuration

### Listen Address

Адреса для прослушивания NTP запросов:

```
set service ntp listen-address '192.168.1.1'
set service ntp listen-address '10.0.0.1'
set service ntp listen-address '2001:db8::1'
```

По умолчанию слушает на всех интерфейсах.

### Allow Client

Разрешение клиентам синхронизироваться:

```
set service ntp allow-client address '192.168.1.0/24'
set service ntp allow-client address '10.0.0.0/8'
set service ntp allow-client address '2001:db8::/32'
```

Без `allow-client` сервер будет только синхронизироваться сам, но не обслуживать клиентов.

## Leap Second

Обработка високосных секунд:

```
set service ntp leap-second <mode>
```

Режимы:

- **ignore** - игнорировать leap second
- **smear** - размазывать коррекцию на несколько часов
- **system** - использовать системную обработку
- **timezone** - использовать timezone данные

Рекомендуется:
```
set service ntp leap-second smear
```

## Hardware Timestamping

Аппаратные временные метки для повышения точности:

```
set service ntp timestamp interface eth0
```

Опции фильтра:

```
set service ntp timestamp interface eth0 receive-filter all
```

Режимы фильтра:
- **all** - все пакеты
- **ntp** - только NTP
- **ptp** - только PTP
- **none** - нет аппаратных меток

## VRF Support

Запуск NTP в определенном VRF:

```
set service ntp vrf MGMT
```

## Примеры конфигурации

### Базовый NTP клиент

```
# Синхронизация с публичными серверами
set service ntp server 0.pool.ntp.org
set service ntp server 1.pool.ntp.org
set service ntp server time.google.com prefer

commit
```

### NTP сервер для локальной сети

```
# Upstream серверы
set service ntp server 0.pool.ntp.org
set service ntp server 1.pool.ntp.org
set service ntp server 2.pool.ntp.org

# Слушать на LAN интерфейсе
set service ntp listen-address '192.168.1.1'

# Разрешить клиентам из LAN
set service ntp allow-client address '192.168.1.0/24'

commit
```

### Корпоративная конфигурация

```
# Корпоративные NTP серверы
set service ntp server ntp1.corp.local prefer
set service ntp server ntp2.corp.local
set service ntp server ntp3.corp.local

# Резервные публичные
set service ntp server time.google.com
set service ntp server time.cloudflare.com nts

# Сервер для подсетей
set service ntp listen-address '192.168.10.1'
set service ntp listen-address '192.168.20.1'

# Разрешить корпоративные сети
set service ntp allow-client address '192.168.0.0/16'
set service ntp allow-client address '10.0.0.0/8'

# Leap second
set service ntp leap-second smear

commit
```

### High-precision NTP

```
# Stratum 1 серверы
set service ntp server ntp1.example.com interleave
set service ntp server ntp2.example.com interleave
set service ntp server ntp3.example.com interleave

# Hardware timestamping
set service ntp timestamp interface eth0
set service ntp timestamp interface eth0 receive-filter ntp

commit
```

### Региональная конфигурация (Россия)

```
# Российские NTP серверы
set service ntp server 0.ru.pool.ntp.org pool
set service ntp server 1.ru.pool.ntp.org pool
set service ntp server ntp.ix.ru
set service ntp server ntp1.vniiftri.ru
set service ntp server ntp2.vniiftri.ru

# Резервные глобальные
set service ntp server time.google.com

# Локальный сервер
set service ntp listen-address '192.168.1.1'
set service ntp allow-client address '192.168.1.0/24'

commit
```

### Multi-site с VRF

```
# Management VRF
set service ntp vrf MGMT

# Upstream в management сети
set service ntp server 10.0.0.10
set service ntp server 10.0.0.11

# Слушать в management
set service ntp listen-address '10.0.1.1'
set service ntp allow-client address '10.0.0.0/8'

commit
```

### Secure NTP с NTS

```
# Только серверы с NTS
set service ntp server time.cloudflare.com nts
set service ntp server ntppool1.time.nl nts
set service ntp server nts.ntp.se nts

# Leap second
set service ntp leap-second smear

commit
```

## Операционные команды

### Просмотр статуса синхронизации

```
show ntp
```

Вывод показывает:
- Текущее состояние синхронизации
- Список серверов и их статус
- Stratum уровень
- Offset (смещение времени)
- Jitter (дрожание)

### Информация о NTP

```
show ntp info
```

Детальная информация о NTP демоне.

### Источники времени

```
show ntp sources
```

Список всех upstream NTP серверов.

### Статистика

```
show ntp activity
```

Статистика активности NTP.

### Рестарт сервиса

```
restart ntp
```

## Мониторинг и диагностика

### Проверка синхронизации

```
show ntp
```

Обратите внимание на:
- **Символ `*`** перед сервером означает текущий источник синхронизации
- **Offset** должен быть близок к нулю (< 10ms в норме)
- **Jitter** должен быть низким (< 5ms хорошо)

### Логи

```
show log | grep ntp
monitor log | grep chronyd
```

### Проверка доступности сервера

С клиента:
```bash
ntpdate -q 192.168.1.1
```

или

```bash
chronyc -h 192.168.1.1 tracking
```

### Проверка firewall

Убедитесь что UDP порт 123 открыт:
```
show firewall ipv4 input filter
```

## Устранение неполадок

### Время не синхронизируется

Проверьте статус:
```
show ntp
```

Проверьте доступность upstream серверов:
```
ping 0.pool.ntp.org
```

Проверьте firewall на WAN:
```
show firewall ipv4 output filter
```

Перезапустите NTP:
```
restart ntp
```

### Большое смещение времени

Если offset > 1 секунда, может потребоваться ручная установка времени:
```
set system time-zone UTC
```

Или использовать ntpdate для первоначальной синхронизации.

### NTP сервер не отвечает клиентам

Проверьте `allow-client`:
```
show service ntp
```

Проверьте firewall:
```
set firewall ipv4 input filter rule 50 action accept
set firewall ipv4 input filter rule 50 destination port 123
set firewall ipv4 input filter rule 50 protocol udp
set firewall ipv4 input filter rule 50 source address 192.168.1.0/24
commit
```

Проверьте `listen-address`:
```
show service ntp
```

### Конфликт с systemd-timesyncd

chrony конфликтует с systemd-timesyncd. Убедитесь что только один сервис запущен.

## Безопасность

### Ограничение клиентов

Всегда используйте `allow-client`:
```
set service ntp allow-client address '192.168.1.0/24'
```

### Firewall правила

```
# Входящие NTP запросы
set firewall ipv4 input filter rule 50 action accept
set firewall ipv4 input filter rule 50 destination port 123
set firewall ipv4 input filter rule 50 protocol udp
set firewall ipv4 input filter rule 50 source address 192.168.1.0/24

# Исходящие для синхронизации
set firewall ipv4 output filter rule 50 action accept
set firewall ipv4 output filter rule 50 destination port 123
set firewall ipv4 output filter rule 50 protocol udp
```

### Rate limiting

Защита от NTP amplification атак:
```
set firewall ipv4 input filter rule 50 limit rate 10/second
```

### NTS

Используйте Network Time Security где возможно:
```
set service ntp server time.cloudflare.com nts
```

## Лучшие практики

1. **Множественные источники** - используйте минимум 3-4 NTP сервера
2. **Географическая близость** - выбирайте серверы близко к вашей локации
3. **Stratum diversity** - используйте серверы разных stratum уровней
4. **prefer сервер** - выбирайте наиболее надежный как предпочтительный
5. **Резервирование** - комбинируйте локальные и публичные серверы
6. **Firewall** - ограничивайте доступ к NTP сервису
7. **Мониторинг** - отслеживайте offset и jitter регулярно
8. **NTS** - используйте где доступно для безопасности
9. **Leap second** - настройте обработку для критичных систем
10. **Hardware timestamping** - включайте для высокой точности

## Stratum иерархия

- **Stratum 0** - Атомные часы, GPS (reference clocks)
- **Stratum 1** - Серверы напрямую подключенные к Stratum 0
- **Stratum 2** - Серверы синхронизированные со Stratum 1
- **Stratum 3-15** - Последующие уровни

VyOS обычно работает как Stratum 3-4 когда синхронизируется с публичными серверами.

## Производительность

Типичная точность:
- **LAN**: ±1ms
- **WAN**: ±10ms
- **Интернет**: ±50ms
- **С hardware timestamping**: ±10μs (микросекунды)

## Следующие шаги

- [System Time Zone](/docs/vyos/system/vyos-timezone/) - настройка часового пояса
- [Firewall](/docs/vyos/firewall/) - защита NTP сервиса
- [Monitoring](/docs/vyos/services/) - мониторинг NTP метрик

