Origine mia blog-agordo estis planita kiel pura IPv6-projekto per WireGuard, ĉar la tuto estas funkciigata sur hejma servilo (senpagajn IPv6-adresojn oni cetere ricevas ĉe route64.org). Por plibonigi la atingeblon, mi nun aldonis eksteran IPv4-prokurilon (Dankon al @Larvitz).

Tamen tuj aperis SSL-problemoj: Ĉar origine kaj la A- kaj la AAAA-rikordo iris tra la prokurilo, la validigo de Let's Encrypt malsukcesis sur mia servilo.

La solvo: La „IPv6-truko“

La solvo estis direkti la AAAA-rikordon eksplicite al la WireGuard-IP de mia servilo, anstataŭ gvidi ĝin same tra la prokurilo.

  • Domanio: blog.burningboard.org
  • A-rikordo (Prokurilo): 194.28.98.217
  • AAAA-rikordo (Servilo): 2a11:6c7:f05:a8::2 (WireGuard)

Per tiu rekta AAAA-rikordo al mia WireGuard-IP, Let’s Encrypt daŭre atingas mian servilon rekte per IPv6 (ĉar la AAAA-rikordo estas defaŭlte prioritatita) kaj eldonas la SSL-atestilon. La IPv4-trafiko estas plusendita al mi ĉifrite de la prokurilo.

La fina agordo

Por ke la komunikado funkciu senprobleme, ni devis adapti la Caddy-servilojn:

1. Sur mia servilo (NixOS, blog.nix)

Por ke la veraj IP-adresoj de la vizitantoj alvenu ĝuste kaj ne estu anstataŭigitaj per la IP de la prokurilo, tiu ĉi devas esti markita kiel fidinda:

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

2. Sur la ekstera prokurilo (Caddy)

Por ke la prokurilo ĝuste kontaktu mian servilon per HTTPS, ĝi devas kune sendi la gastigan nomon (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
    }
}

La blogo nun estas atingebla per IPv4 kaj IPv6, sekure ĉifrita, kaj mia hejma IP-adreso tamen restas privata! 🚀