Alguém tem experiência ou conhece uma solução de código aberto para configurar VPNs Site a Site de alta disponibilidade? Tenho 3 locais para interconectar e tenho testado soluções em laboratório, mas não consigo encontrar uma que funcione sem perda ou tempo de inatividade substancial à medida que o túnel é restabelecido. O layout é composto por 2 caixas PFSense (com a última versão 2.5.2) em par CARP em cada local usando OpenVPN para o Site a Site, mas começou a perder pacotes assim que passamos o tráfego por ele (usando iperf, atingindo cerca de 40 Mbps). Troquei as configurações do pfsense para usar IPSEC, e isso passou um gig completo sem perda, mas durante os testes de failover, há um atraso considerável no restabelecimento do túnel quando o PFSense Master no papel de responder IPSEC cai e o de backup assume como respondente. As configurações DPD do IPSEC no PFSense refletem na configuração do strongswan, mas não são respeitadas, então não importa o quão baixo eu as configure.
Neste ponto, estou pensando em usar OpenVPN, StrongSwan ou algum outro servidor VPN instalado sozinho (diretamente no sistema operacional que melhor se adapte) e combiná-lo com alguma solução de vrrp/heartbeat/keepalived, o que estou disposto a fazer, mas pensei em procurar por opções na comunidade antes de seguir esse caminho, pois aceito toda a dor e dor de cabeça que vêm com isso.
Quão grande é o atraso substancial? Se for muito justo, talvez valha a pena duplicar os pacotes em 2 links VPN distintos? Se não for tão crítico, use roteamento dinâmico e ajuste os timeouts?
A Wireguard é mais ou menos sem estado, eu acho, com OpenVPN/IPsec acho que você pode brincar com timeouts/DPD.
OpenVPN é lento por definição. A coisa interessante sobre o WireGuard é que ele não traz túneis para cima ou para baixo, ele simplesmente envia pacotes. Tenho alguns roteadores vyos em execução (também gratuitos) com túneis WireGuard, e OSPF por cima. No seu caso, eu configuraria duas caixas vyos em cada local com um endereço HA CARP/vrrp, construindo túneis redundantes entre todos os locais, e usando OSPF sobre isso para encontrar um caminho redundante. OSPF sobre WireGuard requer algumas configurações específicas, me avise para detalhes. (Cada par de túneis uma porta diferente que aceita tráfego de 0.0.0.0/0)
Talvez seja necessário fazer uma malha completa em vez de HA em cada site com Wireguard.
Você também pode tentar zerotier, é baseado na nuvem para configuração inicial do túnel, mas roteia o tráfego localmente com suporte a jumbo frames, então o vxlan deve passar facilmente pelo túnel criptografado.
Leva cerca de 4 minutos para o túnel ser destruído e restabelecido, uma diferença grande em relação aos 3,5 segundos quando o mestre do outro lado (o iniciador IPSEC) cai. Minimizar esse tempo seria ideal, se possível, sem mencionar que há tráfego intermitente de RTP pelos links.
Isso parece interessante. Estou familiarizado com VyOS e com configurações de pares HA com IPSEC, mas não tentei WireGuard com OSPF no VyOS. Pode ser uma opção sólida.
Deixe-me ver se estou entendendo corretamente. Configurar um par HA do VyOS rodando WireGuard VPNs com os outros pares em ambos os sites, criando efetivamente 4 túneis em cada caixa? (Site A1 para Site B1, Site B2, Site C1, e Site C2, e assim por diante até todos conversarem) e usar OSPF para orquestrar o tráfego?
Openbsd tem uma implementação de ike bastante sólida, capaz de rodar em HA. Fácil de configurar também.
Isso exige copiar configurações manualmente (ou automatizar por scripts), o que pode ser chato. Ainda assim, fico surpreso com o quão bem os recursos do openbsd estão integrados - se estou lendo corretamente, o CARP tem um “contador de depreciação” que o bgpd e o sasyncd (ipsec) usam para determinar qual é o mestre. Ao contrário do keepalived no linux, que executa um script shell para acionar a sincronização de conexões e outras operações de mestre/segundo.
O OP ainda pode ter o mesmo problema fundamental, mas é difícil saber sem testar em laboratório.
Boa pergunta. Para IPsec, tentei uma lado iniciando e o outro respondendo somente (testei várias variações mudando de Policy para routed VTI e testando ambos iniciando, foi uma bagunça, difícil ou impossível), e para o teste do OpenVPN, estava usando UDP, tentando várias configurações para aumentar a velocidade, mas não consegui obter o suficiente.
Note que, como o UDP é sem conexão, a falha de conexão é definida pelas opções --ping e --ping-restart.
…
--ping n
Pinga o remoto pelo canal de controle TCP/UDP se nenhum pacote for enviado por pelo menos n segundos
…
--ping-restart n
Semelhante a --ping-exit, mas dispara uma reinicialização SIGUSR1 após n segundos sem receber um ping ou outro pacote do remoto. Esta opção é útil em casos onde o peer remoto tem um IP dinâmico e um nome DNS de baixa TTL é usado para rastrear o IP usando um serviço como http://dyndns.org/ + um cliente DNS dinâmico como ddclient.
O OpenVPN tem uma documentação excelente, recomendo dar uma olhada.
Wireguard não funciona para mim. Tentei configurá-lo em uma máquina, mas ela não reconhecia o peer configurado. Acabei removendo tudo, começando de novo e consegui conectá-lo parcialmente, mas as opções na interface não correspondem à documentação do Netgate, então acho que estou perdendo alguma coisa. Talvez eu consiga conectá-lo com mais tempo e esforço, mas como é para um ambiente de produção, vou esperar algumas versões até que amadureça e deixe de ser ‘experimental’.
Portanto, o problema não ocorre ao usar OpenVPN, então não há necessidade, mas não posso passar o tráfego necessário pelo OpenVPN, começo a ter perda de pacotes em torno de 40 Mbps, por isso estou tentando usar IPSEC, pois suportará muito mais tráfego sem problemas.
Estou trabalhando nessa configuração, levando 10 vezes mais tempo do que o necessário para realmente aprender todas as peças (copiar e colar funciona, mas não é escalável ou benéfico a longo prazo para mim).
Tenho o site A com 2 VM VyOS (A1 e A2) e o site B com 2 VM VyOS (B1 e B2), tenho o VRRP em execução em cada site, e configurei um túnel WireGuard único de A1 para B1 com rotas estáticas em cada um para direcionar o tráfego através dele e funciona corretamente. Agora preciso criar os túneis adicionais do WireGuard, que já mapeei e estou pronto para carregar (A1>B2, A2>B1, A2>B2), mas estou travando na lógica do OSPF e como implementar isso. Vi nos exemplos de configuração de firewall que você compartilhou em outro tópico, mas entre esses e a documentação do VyOS aqui, não tenho certeza se há necessidade de configurações de Importação/Export ou como completar a configuração. O mapeamento de como o OSPF vai anunciar as rotas e como configurar tudo ainda não está claro para mim, já que é um site a site com conexão direta e minhas LANs são separadas por vários roteadores interligados, o que normalmente é o que o OSPF é usado.
Encontrei alguns exemplos que vou seguir e tentar, mas como você já fez isso em vários sites, gostaria de uma solução rápida para a configuração ideal para mim
Verifiquei o outro tópico e ele diz que você analisou os tempos de DPD, mas acho que o strongswan também possui uma ação de DPD. Você já verificou isso?
controla o uso do protocolo Dead Peer Detection (DPD, RFC 3706) onde mensagens de notificação R_U_THERE (IKEv1) ou mensagens INFO vazias (IKEv2) são enviadas periodicamente para verificar a atividade do peer IPsec. Os valores clear, hold e restart ativam o DPD e determinam a ação a ser tomada em caso de timeout. Com clear, a conexão é fechada sem ações adicionais. hold instala uma política de captura, que irá capturar tráfego correspondente e tentar renegociar a conexão sob demanda. restart imediatamente tenta renegociar a conexão. O padrão é none, que desativa o envio ativo de mensagens DPD.
Pode ser mais sofisticado fazer isso com 2 links VPN e roteamento dinâmico, especialmente se o par de IPSEC HA não trocar informações de SA, o que significa que eles não estão cientes do estado um do outro.