Возраст рукопожатия WireGuard — не тайм-аут сессии
Таймеры перевыбора ключей управляют ключами, а не доступом пользователей. Чтение latest-handshakes говорит о состоянии протокола одного пира, а не о том, истёк ли срок его авторизации.
Пир, который перестал пропускать трафик, не теряет из-за этого свой ключ, а свежее рукопожатие не доказывает, что кто-то продлил разрешение на его использование. Таймеры WireGuard поддерживают ключи свежими, а пакеты — в движении; они не моделируют пользователя, который выходит из системы через заданное число минут. Здесь путают три вопроса, и у каждого свои доказательства. Это различие определяет, каким инструментом пользоваться.
Три вопроса, один вывод команды
Операторы спрашивают, доступен ли пир, был ли он активен и разрешён ли он до сих пор. Первое — состояние протокола, второе — счётчики трафика, третье — авторизация. Только первые два можно прочитать с интерфейса WireGuard, и их постоянно используют, чтобы ответить на все три.
| Question | Evidence it needs | What does not answer it |
|---|---|---|
| Is the peer reachable now? | A recent handshake and a working return path | An interface that exists |
| Has it been active? | Transfer counters moving over time | A handshake timestamp alone |
| Is access still granted? | The configuration or controller that authorizes it | Any protocol timer |
Читайте строки как три отдельных расследования. Первые две дешёвы, и на них можно ответить по собственным счётчикам интерфейса. Третья требует конфигурации, которая предоставляет доступ, а она живёт в другом файле или другой системе. Выбрать не ту строку — значит попросить таймер протокола выполнять работу политики.
Чем на самом деле управляют таймеры
Протокол определяет константы для повтора рукопожатия, ротации транспортных ключей и отбрасывания пакетов, защищённых старым ключом. Они реагируют на трафик и на состояние, а не на календарь и не на политику, которая говорит, что человек может быть подключён до 17:00. Поэтому простаивающий пир может часами выглядеть неактивным и при этом оставаться авторизованным.
PersistentKeepalive часто принимают за недостающий тайм-аут. Он отправляет аутентифицированные пустые пакеты, чтобы поддерживать сопоставление NAT живым, а установка его в ноль останавливает эти пакеты, ничего не отзывая.
Читайте состояние времени выполнения по каждому пиру, используя открытый ключ, а не комментарий:
wg show wg0 latest-handshakes
wg show wg0 transfer
Свежее рукопожатие говорит о том, что одно рукопожатие завершилось. Оно не говорит, что частная служба за туннелем доступна, а старая метка времени может принадлежать пиру, который просто молчит.
Почему простаивающий пир — не вышедший из системы
В WireGuard нет объекта сессии с началом и концом. Пир — это открытый ключ с разрешёнными адресами, а рукопожатие, защищающее его трафик, заменяется по мере необходимости без какого-либо видимого пользователю входа. Считать отсутствие недавнего трафика выходом из системы — значит перевернуть модель.
Если настоящая жалоба в том, что соединение не работает после простоя, причина обычно в другом: истёкшее сопоставление NAT, устройство, которое спало, или межсетевой экран, потерявший состояние. Проверяйте, отправляя трафик с дальней стороны и запуская новый поток, и сравнивайте, что меняется.
Поместите срок туда, где живёт авторизация
Если доступ должен закончиться в определённое время, срок принадлежит тому, что предоставляет доступ. Контроллер, который выдаёт конфигурации пиров, может требовать повторного одобрения, прежде чем выдать новую, и это свойство контроллера, а не скрытый параметр на интерфейсе.
Для пиров, управляемых вручную, удаление должно дойти до двух мест: работающего интерфейса и сохранённой конфигурации. Удаление пира только во время работы отменяется перезапуском или циклом согласования, который восстанавливает удостоверение, которое вы считали истёкшим:
sudo wg set wg0 peer <public-key> remove
sudo wg-quick save wg0
Затем проверяйте границу, а не ярлык. Убедитесь, что пир отклоняется после срока, что путь продления работает и что состояние переживает перезагрузку менеджера. Возраст рукопожатия — полезный операционный сигнал, и это не запись о доступе.