Oprindeligt var mit blog-setup planlagt som et rent IPv6-projekt via WireGuard, da det hele kører på en homeserver (man kan i øvrigt få gratis IPv6-adresser hos route64.org). For at øge tilgængeligheden har jeg nu tilføjet en ekstern IPv4-proxy (tak til @Larvitz).
I den forbindelse opstod der dog straks SSL-problemer: Da både A- og AAAA-recorden oprindeligt kørte via proxyen, fejlede Let's Encrypt-valideringen på min server.
Løsningen: „IPv6-hacket“
Løsningen var eksplicit at pege AAAA-posten direkte mod min servers WireGuard-IP i stedet for også at lede den gennem proxyen.
- Domæne:
blog.burningboard.org
- A-record (Proxy):
194.28.98.217
- AAAA-record (Server):
2a11:6c7:f05:a8::2 (WireGuard)
Gennem denne direkte AAAA-post til min WireGuard-IP kan Let’s Encrypt fortsat nå min server direkte via IPv6 (da AAAA-recorden som standard prioriteres) og udstede SSL-certifikatet. IPv4-trafikken videresendes krypteret fra proxyen til mig.
Den endelige konfiguration
For at kommunikationen skal fungere problemfrit, var vi nødt til at tilpasse Caddy-serverne:
1. På min server (NixOS, blog.nix)
For at de rigtige besøgs-IP'er ankommer korrekt og ikke bliver overskrevet af proxyens IP, skal denne markeres som betroet:
services.caddy.globalConfig = ''
servers {
trusted_proxies static 2a06:9801:1c:1000::10
}
'';
2. På den eksterne proxy (Caddy)
For at proxyen kan kontakte min server korrekt via HTTPS, skal den sende værtsnavnet (SNI) med:
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
}
}
Bloggen er nu tilgængelig via både IPv4 og IPv6, sikkert krypteret, og min hjemme-IP forbliver stadig privat! 🚀
Det vigtigste først: De vante Markdown-filer forbliver fundamentet – jeg er bare stor fan af denne ukomplicerede løsning. Men under motorhjelmen er der sket meget:
Jeg har skruet en del på setuppet:
📂 MD-filer: Blogstrukturen forbliver simpel på Markdown-basis.
🌍 Mere global end nogensinde: Min blog understøtter nu oversættelser til 43 sprog. Ja, inklusive klingonsk! 🖖 (Qapla'!)

Planen var en fuldautomatisk realtidsoversættelse baseret på browserens sproggenkendelse. Spoiler: Det virkede kun delvist. Man mærker det: AI er imponerende, men endnu ikke helt "der", hvor vi gerne vil have den.
Løsningen: Jeg oversætter nu blot hvert indlæg på forhånd til alle de fastlagte sprog, hvilket også er betydeligt bedre for søgemaskinerne (SEO). Hvis den automatiske genkendelse svigter, kan I manuelt vælge jeres foretrukne sprog via globus-ikonet, som derefter gemmes helt ukompliceret via en cookie.
Oversættelserne udføres nu med Gemini 3 Flash, hvilket giver overraskende gode resultater. Man bør dog holde et vågent øje med AI'en: I den første bulk-kørsel blev tagsene fejlagtigt også oversat, hvilket naturligvis ikke var planlagt.
Koden er stadig tilgængelig (skriv bare en besked til mig, hvis du er interesseret) 👍 Vær dog opmærksom på, at systemet nu kræver sin egen Gemini API-nøgle 🔑.
Jeg har for nylig skiftet min blog fra WriteFreely til en egenudviklet løsning: MD-Blog (MD står naturligvis for Markdown). Anledningen var en mislykket opdatering af det gamle system – men i sidste ende var det det perfekte skub til at forenkle alt radikalt og få fuld kontrol over designet.
Kernen i det hele er simple Markdown-filer i data/-mappen, som bliver omdannet til moderne HTML i realtid. Resultatet er lynhurtigt, fungerer uden en database og ser nu præcis ud, som jeg havde forestillet mig, takket være mit eget designsystem (inklusive Dark Mode). Der er endda en moderne Mastodon-delingsknap med ombord nu.
Hvis I er interesserede i koden eller det enkle setup, er I velkomne til at kontakte mig på Mastodon!