Iš pradžių mano tinklaraščio sąranka buvo planuojama kaip grynas IPv6 projektas per „WireGuard“, nes viskas veikia namų serveryje (beje, nemokamus IPv6 adresus galite gauti route64.org). Norėdamas padidinti pasiekiamumą, pridėjau išorinį IPv4 tarpinį serverį (proxy) (ačiū @Larvitz).
Tačiau iškart iškilo SSL problemų: kadangi iš pradžių tiek A, tiek AAAA įrašai buvo nukreipti per tarpinį serverį, „Let's Encrypt“ patvirtinimas mano serveryje nepavyko.
Sprendimas: „IPv6-Hack“
Sprendimas buvo nukreipti AAAA įrašą tiesiogiai į mano serverio „WireGuard“ IP adresą, užuot jį taip pat leidus per tarpinį serverį.
- Domenas:
blog.burningboard.org - A įrašas (Proxy):
194.28.98.217 - AAAA įrašas (Serveris):
2a11:6c7:f05:a8::2(„WireGuard“)
Dėl šio tiesioginio AAAA įrašo į mano „WireGuard“ IP adresą, „Let’s Encrypt“ ir toliau pasiekia mano serverį tiesiogiai per IPv6 (nes AAAA įrašui pagal numatytuosius nustatymus teikiama pirmenybė) ir išduoda SSL sertifikatą. IPv4 srautas yra užšifruojamas tarpinio serverio ir perduodamas man.
Galutinė konfigūracija
Kad komunikacija vyktų sklandžiai, turėjome pakoreguoti „Caddy“ serverius:
1. Mano serveryje („NixOS“, blog.nix)
Kad tikrieji lankytojų IP adresai būtų gauti teisingai ir nebūtų perrašyti tarpinio serverio IP adresu, šis turi būti pažymėtas kaip patikimas:
services.caddy.globalConfig = ''
servers {
trusted_proxies static 2a06:9801:1c:1000::10
}
'';
2. Išoriniame tarpiniame serveryje („Caddy“)
Kad tarpinis serveris teisingai kreiptųsi į mano serverį per HTTPS, jis turi nusiųsti mazgo pavadinimą (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
}
}
Tinklaraštis dabar pasiekiamas per IPv4 ir IPv6, saugiai užšifruotas, o mano namų IP adresas vis tiek išlieka privatus! 🚀