A interface sobe, a configuração do par parece correta e nenhum handshake chega a ser concluído. Adicionar uma rota padrão através do túnel é o passo que muitas vezes causa isso: a mesma tabela de rotas agora decide para onde devem ir os próprios pacotes cifrados do túnel, e a resposta que produz volta para dentro do túnel. Nada pode transportar o pacote externo que transportaria o interno, então a conexão para antes de começar. A reparação é pequena, mas tem uma ordem, e a verificação importa mais do que a edição.

Confirme o loop antes de alterar uma rota

Leia o endereço atual do endpoint do par e depois pergunte à pilha de roteamento para onde iria um pacote para esse endereço. Se a resposta indicar a interface do túnel, o loop está confirmado e não é necessário mais diagnóstico. Guarde as duas saídas no registo de alterações antes de tocar em qualquer coisa, porque a comparação após a reparação são os mesmos dois comandos. Um loop não é subtil depois de visto; a dificuldade é que a interface parece saudável enquanto isso acontece.

sudo wg show wg1 endpoints
ip route get 198.51.100.20
ip rule show

Inclua as regras de política nessa captura. Uma rota padrão que parece correta na tabela principal ainda pode perder para uma regra que seleciona outra tabela para tráfego marcado ou não marcado, e o loop reaparecerá com uma tabela de rotas que parece bem.

Leia o caminho do endpoint, não o caminho do túnel

O caminho do endpoint é a rota que os datagramas cifrados percorrem até o endereço público do par, e tem de permanecer fora do túnel enquanto o túnel existir. O caminho do túnel é tudo o que é permitido ao par transportar. Esses dois caminhos partilham uma tabela de rotas, e é exatamente por isso que uma única entrada que apanha tudo os pode colapsar um dentro do outro. Separar o tráfego do túnel do transporte próprio do túnel é todo o problema de conceção, e cada ferramenta suportada resolve-o num ponto ligeiramente diferente.

Verifique as duas famílias de endereços separadamente se a interface transportar ambas. Uma exclusão IPv4 a funcionar não diz nada sobre se o endpoint IPv6 ainda está acessível, e uma configuração mista pode parecer funcionar até o endereço IPv6 do par ser selecionado.

Restaure o caminho do endpoint com uma única alteração coerente

Existem duas abordagens suportadas, e misturá-las é como uma configuração a funcionar se torna imprevisível. A primeira é deixar a ferramenta que detém a interface gerir todo o túnel: wg-quick tem um tratamento dedicado para um intervalo de pares padrão que instala uma tabela separada, regras de política e uma marca de socket, o que mantém os pacotes externos fora do túnel. Deixe essa maquinaria intacta em vez de reproduzir metade dela à mão. Uma configuração que mistura uma rota padrão adicionada à mão com um gestor que já instala marcas e regras tende a falhar após a reconexão, quando o gestor reescreve o estado que o passo manual assumia.

A segunda é um desenho manual em que o endpoint recebe uma rota de host explícita através do gateway físico. Adicione essa rota antes da padrão, substitua em vez de acrescentar para que uma entrada obsoleta não possa ganhar, e confirme a pesquisa depois.

sudo ip route replace 198.51.100.20/32 via 192.0.2.1 dev eth0
ip route get 198.51.100.20
sudo ip route add default dev wg1

Verifique e depois guarde uma forma de voltar

Um carimbo temporal de handshake que avança é a primeira prova, e é mais forte do que uma interface que apenas existe. Siga-o com um teste de aplicação através do túnel, depois baixe a interface de propósito e confirme que o host regressa a um estado utilizável em vez de manter uma rota padrão que aponta para nada. Esse último passo é o que as pessoas saltam, e é o que decide se um reinício deixará a máquina sem ligação.

sudo wg show wg1 latest-handshakes
sudo wg-quick down wg1
ip route show default
ip route get 198.51.100.20

Antes de tudo isto, guarde o estado de encaminhamento atual e certifique-se de que existe uma via de entrada que não dependa do túnel: uma consola, um endereço de gestão fora de banda ou um colega no local. Uma máquina remota que perde a rota padrão não é recuperável pela ligação que acabou de perder, e o passo mais seguro do runbook é o que é dado antes do primeiro comando.

Artigos relacionados