Originalmente, a configuração do meu blog foi planejada como um projeto puramente IPv6 via WireGuard, já que tudo é operado em um servidor doméstico (aliás, você pode obter endereços IPv6 gratuitos em route64.org). Para aumentar a acessibilidade, adicionei agora um proxy IPv4 externo (obrigado @Larvitz).

No entanto, surgiram imediatamente problemas de SSL: como originalmente tanto o registro A quanto o AAAA passavam pelo proxy, a validação do Let's Encrypt no meu servidor falhou.

A Solução: O "Hack de IPv6"

A solução foi apontar explicitamente o registro AAAA diretamente para o IP do WireGuard do meu servidor, em vez de também encaminhá-lo pelo proxy.

  • Domínio: blog.burningboard.org
  • Registro A (Proxy): 194.28.98.217
  • Registro AAAA (Servidor): 2a11:6c7:f05:a8::2 (WireGuard)

Através deste registro AAAA direto para o meu IP do WireGuard, o Let’s Encrypt continua alcançando meu servidor diretamente via IPv6 (já que o registro AAAA é priorizado por padrão) e emite o certificado SSL. O tráfego IPv4 é repassado para mim de forma criptografada pelo proxy.

A Configuração Final

Para que a comunicação funcione sem problemas, tivemos que ajustar os servidores Caddy:

1. No meu servidor (NixOS, blog.nix)

Para que os IPs reais dos visitantes cheguem corretamente e não sejam sobrescritos pelo IP do proxy, este deve ser marcado como confiável:

services.caddy.globalConfig = ''
  servers {
      trusted_proxies static 2a06:9801:1c:1000::10
  }
'';

2. No proxy externo (Caddy)

Para que o proxy se comunique corretamente com o meu servidor via HTTPS, ele deve enviar o hostname (SNI):

reverse_proxy [https://[2a11:6c7:f05:a8::2]:443](https://[2a11:6c7:f05:a8::2]:443) {
    header_up Host {host}
    transport http {
        tls_server_name blog.burningboard.org
    }
}

O blog agora está acessível via IPv4 e IPv6, criptografado com segurança, e meu IP doméstico continua privado! 🚀