WireGuard Error: System time out of sync: Handshake timestamp rejected — Исправление
WireGuard отклоняет пакеты инициализации соединения из-за невалидной или устаревшей метки времени TAI64N. Туннель не поднимается.
- В логах ядра Linux:
wireguard: wg0: Handshake initiation has bad timestamp / older than previous. - После перезагрузки одного из клиентов (особенно роутеров OpenWrt или плат Raspberry Pi без батарейки RTC) соединение не устанавливается до ручного перевода часов.
- Счетчик рукопожатий не увеличивается.
- В выводе
timedatectlстатусSystem clock synchronized: no.
1. Принцип монотонных меток TAI64N в протоколе Noise
Каждый пакет Handshake Initiation содержит 12-байтную зашифрованную метку точного времени в формате TAI64N. Сервер сохраняет наибольшую метку времени, полученную от данного пира, и **отклоняет любые входящие пакеты с меткой, меньшей или равной сохраненной** (защита от повторов).
2. Проверка состояния часов и NTP на хосте
timedatectl statusЕсли системное время отстает или спешит, включите службу точного времени:
# Включение синхронизации через systemd-timesyncd
timedatectl set-ntp true
# Либо установка Chrony для мгновенной синхронизации
apt-get install -y chrony || dnf install -y chrony
systemctl enable --now chronyd3. Исправление проблем на роутерах OpenWrt и устройствах без RTC (Raspberry Pi)
Устройства без аппаратных часов RTC при старте сбрасывают время в 1970 год, из-за чего сервер WireGuard отклоняет их пакеты, так как ранее уже получал пакеты с меткой 2024 года:
# На клиенте OpenWrt / Embedded Linux:
# Принудительно установите текущую дату перед запуском интерфейса:
ntpd -q -p pool.ntp.org
# Либо запишите скрипт в /etc/init.d/sysfixtime4. Сброс сохраненной метки времени на стороне сервера
Если часы клиента были временно переведены в будущее, сервер будет отклонять пакеты до наступления этой даты. Выполните сброс сессии пира на сервере:
# Удаление и повторное добавление пира для сброса счетчика TAI64N:
PEER_KEY="<Client_PublicKey>"
wg set wg0 peer "$PEER_KEY" remove
wg set wg0 peer "$PEER_KEY" allowed-ips 10.0.0.2/325. Проверка установления рукопожатия
wg show wg0 Частые вопросы (FAQ)
Что такое метка времени TAI64N?
TAI64N — это стандартизированный 96-битный формат представления астрономического времени с наносекундной точностью, исключающий проблемы високосных секунд и перевода часов.
Почему при сбросе батарейки BIOS/RTC перестает работать WireGuard?
После сброса батарейки материнская плата возвращается в дату выпуска (например, 2018 год). Сервер WireGuard видит пакет из 'прошлого' по сравнению с предыдущей сессией и немедленно уничтожает его.
Можно ли отключить проверку timestamp в WireGuard?
Нет. Проверка TAI64N является фундаментальной частью протокола Noise_IK и защищает всю криптографическую сессию от повторного использования скомпрометированных пакетов.
Какая точность NTP требуется для нормальной работы WireGuard?
Достаточно точности в пределах нескольких секунд. Главное условие — монотонное возрастание времени при каждой новой попытке инициализации.