Pôvodne bol môj blog nastavený ako čisto IPv6 projekt cez WireGuard, keďže celý beží na domácom serveri (mimochodom, bezplatné IPv6 adresy môžete získať na route64.org). Aby som zvýšil dostupnosť, pridal som teraz externý IPv4 proxy (vďaka @Larvitz).

Okamžite sa však vyskytli problémy so SSL: Keďže pôvodne cez proxy prechádzal záznam A aj AAAA, overenie Let's Encrypt na mojom serveri zlyhalo.

Riešenie: „IPv6 hack“

Riešením bolo nasmerovať AAAA záznam explicitne priamo na WireGuard IP adresu môjho servera, namiesto toho, aby bol tiež vedený cez proxy.

  • Doména: blog.burningboard.org
  • A záznam (Proxy): 194.28.98.217
  • AAAA záznam (Server): 2a11:6c7:f05:a8::2 (WireGuard)

Vďaka tomuto priamemu AAAA záznamu na moju WireGuard IP adresu sa Let’s Encrypt naďalej dostane k môjmu serveru priamo cez IPv6 (keďže záznam AAAA je štandardne prioritizovaný) a vystaví SSL certifikát. IPv4 prevádzka je z proxy servera posielaná ku mne v šifrovanej podobe.

Finálna konfigurácia

Aby komunikácia prebiehala hladko, museli sme upraviť Caddy servery:

1. Na mojom serveri (NixOS, blog.nix)

Aby sa skutočné IP adresy návštevníkov prenášali správne a neboli prepísané IP adresou proxy servera, musí byť tento proxy označený ako dôveryhodný:

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

2. Na externom proxy (Caddy)

Aby proxy správne komunikoval s mojím serverom cez HTTPS, musí posielať aj názov hostiteľa (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
    }
}

Blog je teraz dostupný cez IPv4 aj IPv6, je bezpečne zašifrovaný a moja domáca IP adresa napriek tomu zostáva súkromná! 🚀