Opprinnelig var bloggoppsettet mitt planlagt som et rent IPv6-prosjekt via WireGuard, ettersom det hele kjøres på en hjemmeserver (gratis IPv6-adresser kan man forresten få hos route64.org). For å øke tilgjengeligheten har jeg nå lagt til en ekstern IPv4-proxy (takk til @Larvitz).

I den forbindelse oppstod det umiddelbart SSL-problemer: Siden både A- og AAAA-oppføringene opprinnelig gikk via proxyen, feilet Let's Encrypt-valideringen på serveren min.

Løsningen: «IPv6-hacket»

Løsningen var å peke AAAA-oppføringen eksplisitt direkte til serverens WireGuard-IP, i stedet for å rute den via proxyen også.

  • Domene: blog.burningboard.org
  • A-Record (Proxy): 194.28.98.217
  • AAAA-Record (Server): 2a11:6c7:f05:a8::2 (WireGuard)

Gjennom denne direkte AAAA-oppføringen til min WireGuard-IP, når Let’s Encrypt fortsatt serveren min direkte via IPv6 (siden AAAA-oppføringer prioriteres som standard) og utsteder SSL-sertifikatet. IPv4-trafikken blir videresendt kryptert fra proxyen til meg.

Den endelige konfigurasjonen

For at kommunikasjonen skal fungere knirkefritt, måtte vi tilpasse Caddy-serverne:

1. På min server (NixOS, blog.nix)

For at de ekte besøks-IP-ene skal ankomme korrekt og ikke bli overskrevet av proxyens IP, må denne markeres som tiltrodd:

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

2. På den eksterne proxyen (Caddy)

For at proxyen skal kontakte serveren min korrekt via HTTPS, må den sende med vertsnavnet (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
    }
}

Bloggen er nå tilgjengelig via både IPv4 og IPv6, er sikkert kryptert, og hjemme-IP-en min forblir fortsatt privat! 🚀