Prvotno je postava mog bloga bila planirana kao čisti IPv6 projekt putem WireGuarda, budući da se cijela stvar pokreće na kućnom poslužitelju (besplatne IPv6 adrese se, usput, mogu dobiti na route64.org). Kako bih povećao dostupnost, sada sam dodao vanjski IPv4 proxy (hvala @Larvitz).

Pritom su se odmah pojavili SSL problemi: Budući da su prvotno i A i AAAA zapisi išli preko proxyja, Let's Encrypt validacija na mom poslužitelju nije uspjela.

Rješenje: „IPv6 hack“

Rješenje je bilo usmjeriti AAAA zapis eksplicitno izravno na WireGuard IP adresu mog poslužitelja, umjesto da ga također vodim preko proxyja.

  • Domena: blog.burningboard.org
  • A zapis (Proxy): 194.28.98.217
  • AAAA zapis (Poslužitelj): 2a11:6c7:f05:a8::2 (WireGuard)

Ovim izravnim AAAA zapisom na moju WireGuard IP adresu, Let’s Encrypt i dalje izravno pristupa mom poslužitelju putem IPv6 (budući da AAAA zapis ima prioritet prema zadanim postavkama) i izdaje SSL certifikat. IPv4 promet se od proxyja prosljeđuje meni u kriptiranom obliku.

Konačna konfiguracija

Kako bi komunikacija tekla bez poteškoća, morali smo prilagoditi Caddy poslužitelje:

1. Na mom poslužitelju (NixOS, blog.nix)

Kako bi stvarne IP adrese posjetitelja ispravno stizale i kako ih ne bi prepisala IP adresa proxyja, on mora biti označen kao pouzdan:

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

2. Na vanjskom proxyju (Caddy)

Kako bi proxy ispravno komunicirao s mojim poslužiteljem putem HTTPS-a, mora poslati naziv hosta (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 sada dostupan putem IPv4 i IPv6, sigurno je kriptiran, a moja kućna IP adresa i dalje ostaje privatna! 🚀