Prvotno je bila nastavitev mojega bloga načrtovana kot čisti projekt IPv6 prek WireGuarda, saj vse skupaj gostuje na domačem strežniku (brezplačne naslove IPv6 lahko mimogrede dobite na route64.org). Da bi izboljšal dostopnost, sem zdaj dodal zunanji IPv4-proxy (hvala @Larvitz).

Pri tem pa so se takoj pojavile težave s SSL: Ker sta prvotno tako zapis A kot AAAA potekala prek proxyja, potrjevanje Let's Encrypt na mojem strežniku ni uspelo.

Rešitev: „IPv6-hek“

Rešitev je bila, da sem zapis AAAA eksplicitno usmeril neposredno na naslov IP WireGuard mojega strežnika, namesto da bi ga prav tako speljal prek proxyja.

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

S tem neposrednim zapisom AAAA na moj naslov IP WireGuard Let’s Encrypt še naprej doseže moj strežnik neposredno prek IPv6 (ker ima zapis AAAA privzeto prednost) in izda certifikat SSL. Promet IPv4 pa proxy šifrirano posreduje meni.

Končna konfiguracija

Da bi komunikacija potekala nemoteno, smo morali prilagoditi strežnike Caddy:

1. Na mojem strežniku (NixOS, blog.nix)

Da bi pravi naslovi IP obiskovalcev prispeli pravilno in jih naslov IP proxyja ne bi prepisal, ga je treba označiti kot zaupanja vrednega:

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

2. Na zunanjem proxyju (Caddy)

Da bi proxy pravilno komuniciral z mojim strežnikom prek HTTPS, mora poslati ime gostitelja (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 zdaj dosegljiv prek IPv4 in IPv6, varno šifriran, moj domači naslov IP pa kljub temu ostaja zaseben! 🚀