# Chrony вместо ntpd

Индекс LLMS: [llms.txt](/llms.txt)

---

В Debian/Ubuntu и RHEL/CentOS `ntpd` давно пора менять на `chrony`. Он быстрее сходится к точному времени, лучше работает при нестабильных сетях и меньше нагружает систему. В современных дистрибутивах `chrony` уже стоит по умолчанию — но если он ещё не развёрнут, переход занимает минуту.

## Установка

На RHEL-подобных:

```bash
sudo dnf install chrony -y
sudo systemctl enable --now chronyd
```

На Debian/Ubuntu:

```bash
sudo apt install chrony -y
sudo systemctl enable --now chronyd
```

Если на машине раньше работал `ntpd`, остановите и отключите его, чтобы не было конфликта портов:

```bash
sudo systemctl stop ntpd
sudo systemctl disable ntpd
```

## Конфигурация makestep

Ключевая директива в `/etc/chrony/chrony.conf` (или `/etc/chrony.conf` на RHEL) — `makestep`. Она определяет, как `chronyd` ведёт себя при старте: корректирует ли время плавно или резко.

```conf
makestep 1.0 3
```

> [!NOTE] makestep
> Формат: `makestep <max_offset> <max_updates>`. Если смещение больше `<max_offset>` секунд и количество обновлений не превышает `<max_updates>`, chrony делает резкую корректировку вместо постепенной подстройки. По умолчанию стоит `makestep 1.0 3` — три раза за первые три синхронизации допускается прыжок до 1 секунды.

Типичная ошибка — поставить `makestep -1 1` и ожидать, что при старте сервер с большим смещением подстроится мгновенно. На практике отрицательное значение работает только при определённых условиях. Для надёжного старта используйте положительное число и ограничьте количество шагов.

## Директива allow

По умолчанию `chronyd` работает только как клиент. Чтобы разрешить синхронизацию другим хостам через этот сервер, добавьте `allow`:

```conf
allow 10.0.0.0/24
```

> [!TIP] allow
> Можно указывать отдельные IP, подсети или несколько строк `allow` для разных сетей. Без этой директивы машина принимает запросы только от localhost.

Если нужно запретить конкретный хост, используйте `deny` — она работает после `allow` и перекрывает его:

```conf
allow 10.0.0.0/24
deny 10.0.0.42
```

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

```bash
sudo systemctl restart chronyd
```

## Проверка через timedatectl

`timedatectl` показывает текущее состояние синхронизации и источник времени:

```bash
timedatectl
```

Пример вывода:

```
               Local time: Wed 2025-01-15 14:23:01 MSK
           Universal time: Wed 2025-01-15 11:23:01 UTC
                 RTC time: Wed 2025-01-15 11:23:01
                Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
```

Ключевые поля для диагностики:

| Поле | Значение при проблеме | Что означает |
|---|---|---|
| `System clock synchronized` | `no` | chrony ещё не догнал |
| `NTP service` | `inactive` | служба не запущена или не активирована |
| `RTC in local TZ` | `yes` | аппаратные часы в локальном поясе — частая проблема на виртуалках |

Для детальной информации о текущих источниках:

```bash
chronyc sources -v
```

Если `NTP service: active` и `System clock synchronized: yes` — всё работает. Если нет, проверьте `sudo systemctl status chronyd` и сетевой доступ к NTP-серверам (порт 123 UDP).
