Seit ich auf NetBird umgestellt habe, gibt es keinen Caddy mehr, aus dem ich mir Zertifikate kopieren könnte. Früher war das einfach: Caddy holt sich ein Let's Encrypt-Zertifikat, ich kopiere die Dateien in den Zielcontainer, fertig. Die Zertifikate aus dem in Netbird integrierten Traefik herauszufummeln ist möglich, aber umständlich.
Jetzt brauchen also Dienste wie Mailserver ihre eigenen Zertifikate. Und da kein HTTP-Port nach außen steht, kommt nur die DNS-Challenge in Frage. Certbot löst das über einen TXT-Eintrag in der DNS-Zone, aber das ist erschreckend unintuitiv mit Debian und Netcup.
Warum DNS-Challenge?
Die HTTP-Challenge braucht einen öffentlichen Port 80. Im NetBird-Mesh gibt es den nicht. Die DNS-Challenge braucht nur Zugriff auf die DNS-Zone – der Server muss nicht von außen erreichbar sein.
| Challenge | Voraussetzung | Nachteil |
|---|---|---|
| HTTP | Port 80 öffentlich | Nicht im Mesh nutzbar |
| DNS | API-Zugang zur Zone | Plugin muss nachgerüstet werden |
certbot-dns-netcup
Es gibt ein Plugin certbot-dns-netcup – aber es ist **nicht im Debian-Repository**. Es muss per pip in einer virtuellen Python- Umgebung installiert werden. Das ist der Hauptgrund, warum die Einrichtung sich umständlicher als nötig anfühlte.
Voraussetzungen
- Debian 13 (Trixie)
- Python 3 + pip + venv
- Netcup-Account mit DNS-Zone
- API-Key und API-Password aus dem Netcup-Kundenpanel
Schritt 1: Virtuelle Umgebung anlegen
Certbot darf nicht systemweit mit pip installiert werden – das würde mit apt-Paketen kollisieren. Deshalb eine venv:
python3 -m venv /opt/certbot-venv
/opt/certbot-venv/bin/pip install certbot certbot-dns-netcup
Certbot und das Netcup-Plugin zusammen installiert. Der Pfad zum Binary ist jetzt /opt/certbot-venv/bin/certbot.
Schritt 2: Netcup-API-Zugang einrichten
Im Netcup-Kundenpanel unter Meine Daten → API findest du:
- API-Key (kryptischer String)
- API-Password (selbst gewählt)
- Customer-ID (deine Netcup-Kundennummer)
Diese Werte speicherst du sicher auf dem Server:
mkdir -p /etc/letsencrypt
cat > /etc/letsencrypt/netcup.ini << 'EOF'
dns_netcup_api_key = dein-api-key
dns_netcup_api_password = dein-api-password
dns_netcup_customer_id = deine-kundennummer
EOF
chmod 600 /etc/letsencrypt/netcup.ini
Schritt 3: Zertifikat anfordern
/opt/certbot-venv/bin/certbot certonly \
--dns-netcup \
--dns-netcup-credentials /etc/letsencrypt/netcup.ini \
-d mail.frischux.de
Certbot ruft die Netcup-API auf, setzt den TXT-Eintrag, wartet auf Validierung, und entfernt den Eintrag wieder. Alles automatisch.
Für mehrere Domains:
/opt/certbot-venv/bin/certbot certonly \
--dns-netcup \
--dns-netcup-credentials /etc/letsencrypt/netcup.ini \
-d mail.frischux.de \
-d smtp.frischux.de \
-d imap.frischux.de
Schritt 4: Auto-Renew
Certbot hat einen integrierten Renew-Timer. Aber der muss auf die venv zeigen:
cat > /etc/systemd/system/certbot-renew.service << 'EOF'
[Unit]
Description=Certbot Renew
After=network-online.target
[Service]
Type=oneshot
ExecStart=/opt/certbot-venv/bin/certbot renew --quiet
EOF
cat > /etc/systemd/system/certbot-renew.timer << 'EOF'
[Unit]
Description=Run Certbot renew twice daily
[Timer]
OnCalendar=*-*-* 03,15:00:00
RandomizedDelaySec=3600
Persistent=true
[Install]
WantedBy=timers.target
EOF
systemctl daemon-reload
systemctl enable --now certbot-renew.timer
Das Renew nutzt dieselben Credentials – das netcup.ini muss nicht nochmal angefasst werden.
Schritt 5: Zertifikate einbinden
Die Zertifikate landen unter /etc/letsencrypt/live/mail.frischux.de/:
cert.pem – Zertifikat ( intermediäres CA included)
chain.pem – CA-Kette
fullchain.pem – Zertifikat + CA-Kette (für die meisten Dienste)
privkey.pem – privater Schlüssel
Für den Mailserver reicht meist fullchain.pem + privkey.pem.
Was mich gestört hat
Die Einrichtung ist nicht kompliziert, aber sie ist **umständlicher als nötig**. Bei Cloudflare oder Hetzner gibt es apt-installierbare Plugins. Netcup ist da in der Steinzeit:
- Kein Paket in Debian
- pip-Installation in venv nötig
- Kein systemd-Service mitgeliefert
- Documentation spärlich
Aber es funktioniert. Man muss es einmal aufgesetzt haben, danach läuft es automatisch.
Fazit
DNS-Challenge mit Netcup ist machbar, aber der Weg über pip und venv ist nicht der eleganteste. Wer kann, sollte seinen DNS bei einem Anbieter hosten, der ein apt-Paket bietet. Wer bei Netcup bleibt, findet hier den Weg, der es tut.
Der erste Aufwand ist lästig. Danach läuft es automatisch – Certbot holt sich alle 90 Tage ein neues Zertifikat, die TXT-Einträge werden gesetzt und wieder gelöscht, ohne Zutun.
