A idade do handshake do WireGuard não é um tempo limite de sessão
Os temporizadores de renovação de chaves governam chaves, não o acesso dos usuários. Ler latest-handshakes informa sobre o estado de protocolo de um par, não sobre se a autorização dele expirou.
Um par que para de passar tráfego não perde a chave por isso, e um handshake novo não prova que alguém renovou a permissão de usá-la. Os temporizadores do WireGuard mantêm as chaves novas e os pacotes fluindo; eles não modelam um usuário que sai após um número definido de minutos. Três perguntas se confundem aqui, e cada uma tem evidências diferentes. A distinção decide qual ferramenta usar.
Três perguntas, uma saída de comando
Operadores perguntam se um par é alcançável, se esteve ativo e se ainda é permitido. A primeira é estado de protocolo, a segunda são contadores de tráfego e a terceira é autorização. Só as duas primeiras podem ser lidas de uma interface do WireGuard, e elas são usadas rotineiramente para responder às três.
| 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 |
Leia as linhas como três investigações separadas. As duas primeiras são baratas e podem ser respondidas pelos próprios contadores da interface. A terceira precisa da configuração que concede acesso, que fica em outro arquivo ou em outro sistema. Escolher a linha errada é pedir a um temporizador de protocolo que faça o trabalho de uma política.
O que os temporizadores realmente governam
O protocolo define constantes para nova tentativa de handshake, rotação de chaves de transporte e rejeição de pacotes protegidos por uma chave antiga. Elas respondem ao tráfego e ao estado, não a um calendário nem a uma política que diga que uma pessoa pode se conectar até as 17:00. É por isso que um par ocioso pode parecer inativo por horas e continuar autorizado.
PersistentKeepalive costuma ser confundido com o tempo limite que falta. Ele envia pacotes vazios autenticados para manter vivo um mapeamento NAT, e defini-lo como zero interrompe esses pacotes sem revogar nada.
Leia o estado de execução por par, usando a chave pública em vez do comentário:
wg show wg0 latest-handshakes
wg show wg0 transfer
Um handshake recente diz que um handshake foi concluído. Ele não diz que o serviço privado atrás do túnel é alcançável, e um carimbo de data antigo pode pertencer a um par que está simplesmente calado.
Por que um par ocioso não é um par desconectado
O WireGuard não tem um objeto de sessão com início e fim. Um par é uma chave pública com endereços permitidos, e o handshake que protege o tráfego dele é substituído conforme necessário sem nenhum login visível ao usuário. Tratar a ausência de tráfego recente como desconexão inverte o modelo.
Se a queixa real é que uma conexão falha após ficar ociosa, a causa costuma estar em outro lugar: um mapeamento NAT expirado, um dispositivo que dormiu ou um firewall que descartou o estado. Teste enviando tráfego do outro lado e iniciando um novo fluxo, e compare o que muda.
Coloque o prazo onde vive a autorização
Se o acesso deve terminar em um horário específico, o prazo pertence ao que concede o acesso. Um controlador que emite configurações de pares pode exigir uma aprovação renovada antes de entregar uma nova, e isso é uma propriedade do controlador e não um parâmetro escondido na interface.
Para pares gerenciados à mão, a remoção precisa chegar aos dois lugares: a interface em execução e a configuração salva. Remover o par apenas em tempo de execução é desfeito por um reinício ou por um ciclo de reconciliação, que restaura a identidade que você achava expirada:
sudo wg set wg0 peer <public-key> remove
sudo wg-quick save wg0
Depois teste a fronteira em vez do rótulo. Confirme que o par é rejeitado após o prazo, confirme que o caminho de renovação funciona e confirme que o estado sobrevive a uma recarga do gerenciador. A idade de um handshake é um sinal operacional útil, e não é um registro de acesso.