Alun perin blogini oli suunniteltu puhtaaksi IPv6-projektiksi WireGuardin kautta, koska se pyörii kotipalvelimella (ilmaisia IPv6-osoitteita saa muuten osoitteesta route64.org). Saavutettavuuden parantamiseksi otin nyt käyttöön ulkoisen IPv4-proxyn (kiitos @Larvitz).

Tämän myötä ilmeni kuitenkin heti SSL-ongelmia: Koska alun perin sekä A- että AAAA-tietueet kulkivat proxyn kautta, Let's Encrypt -varmennus epäonnistui palvelimellani.

Ratkaisu: ”IPv6-kikka”

Ratkaisuna oli ohjata AAAA-tietue suoraan palvelimeni WireGuard-IP-osoitteeseen sen sijaan, että sekin kulkisi proxyn kautta.

  • Domain: blog.burningboard.org
  • A-tietue (Proxy): 194.28.98.217
  • AAAA-tietue (Palvelin): 2a11:6c7:f05:a8::2 (WireGuard)

Tämän suoran WireGuard-IP-osoitteeseen osoittavan AAAA-tietueen ansiosta Let’s Encrypt tavoittaa palvelimeni edelleen suoraan IPv6:n kautta (koska AAAA-tietue on oletuksena ensisijainen) ja myöntää SSL-sertifikaatin. IPv4-liikenne välitetään minulle proxyn kautta salattuna.

Lopullinen konfiguraatio

Jotta viestintä toimisi sujuvasti, meidän piti muokata Caddy-palvelimia:

1. Palvelimellani (NixOS, blog.nix)

Jotta vierailijoiden todelliset IP-osoitteet saapuvat oikein eivätkä korvaudu proxyn IP-osoitteella, proxy on merkittävä luotetuksi:

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

2. Ulkoisella proxylla (Caddy)

Jotta proxy ottaa yhteyttä palvelimeeni oikein HTTPS-yhteydellä, sen on lähetettävä isäntänimi (SNI) mukana:

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
    }
}

Blogi on nyt saavutettavissa sekä IPv4- että IPv6-yhteyksillä, turvallisesti salattuna, ja kotini IP-osoite pysyy silti yksityisenä! 🚀