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ä! 🚀