Van Gmail naar de meterkast
Vanavond mijn mail weggehaald bij Gmail Workspace. Niet omdat het slecht werkte. Wel omdat een paar miljard regels Google-code mijn inbox lazen. En omdat er in de meterkast nog een oude HP OMEN lag die het anders koud zou hebben.
Doel: mail@peterreckers.nl en mijn agenda draaien op een server die ik bezit, zonder dat Google er iets mee te maken heeft.
De architectuur
Het probleem met thuis-mail: residentieel IP, geen poort 25 uit, slechte reputatie. Niemand accepteert mail rechtstreeks van zo’n IP. Dus splitsen:
- meterkast. HP OMEN op Ubuntu Server, Stalwart als mailserver in een Docker container via Coolify. Hier wonen mijn mailboxen en agenda. Niets aan het publieke internet, alleen bereikbaar via mesh.
- reckers-core. Een kleine Hetzner-doos die ik al had. Stalwart in podman. Doet twee dingen: ontvangt mail voor mijn domein (publiek MX), en stuurt mijn uitgaande mail door naar de wereld (smarthost).
- NetBird mesh. Open source, eigen control plane, alle devices op een privé-overlay. Mijn MacBook, iPhone en beide servers zien elkaar daar. Vanaf elke plek ter wereld is mijn meterkast bereikbaar zonder ook maar één poort op de router open.
- step-ca. Eigen interne Certificate Authority. Eén keer een Root CA trusten op mijn laptop en telefoon, daarna heeft elke service in mijn homelab automatisch geldige TLS via ACME. Voelt als magie, is gewoon kleine open source PKI.
Een paar momenten
Niet alles ging in één keer goed.
Stalwart’s admin-API gaf bij Coolify-deploys spook-UUIDs terug. POST 200, GET 404. Niet meer omheen gewerkt. Raw docker-compose op de host, klaar.
Default Stalwart luistert op SMTP-poorten 25 en 465. Voor mail-clients heb je 587 nodig. Dat ontbrak. Toegevoegd via een nieuwe listener in de admin UI.
De meest leerzame: ik verhuisde de DNS van reckers.ai naar Namecheap-nameservers omdat ik dat domein wilde uitrangeren. Wat ik vergat: het oude A-record mail.reckers.ai ging mee in die opruiming, maar de PTR (reverse DNS) van mijn Hetzner-IP wees daar nog naartoe. Gmail’s forward-confirm check faalde direct. Elke mail die ik probeerde te sturen kreeg een 5.7.25 reject. Tien minuten paniek, daarna PTR via Hetzner Cloud API verzet naar mail.peterreckers.nl en het bijbehorende A-record aangemaakt. Werkte.
Het resultaat
Mail-tester geeft 10 uit 10. SPF, DKIM, DMARC alle drie pass. Mail belandde eerst nog in Gmail spam (nieuwe sender, geen reputatie), tot ik mezelf als contact toevoegde. Daarna inbox. Reputatie bouwen kost een week of twee, dat snap ik.
Mijn iPhone Mail, mijn MacBook Mail, mijn agenda op beide: alles draait nu via die laptop in mijn meterkast. Bereikbaar zonder dat ik mijn router heb opengezet. Op infrastructuur die ik begrijp en bezit.
Volgende: de website waar je dit op leest moet ook daar gaan draaien.