Lets Encrypt certificaten synchroniseren naar AdGuard Home op Synology
Synology DSM 7 kan automatisch Let’s Encrypt certificaten ophalen en verlengen, erg handig. Het probleem is dat andere services op de NAS, zoals AdGuard Home in Docker, geen toegang hebben tot die certificaten. Je zou ze elke keer handmatig moeten kopiëren na verlenging.
Ik heb een klein script geschreven dat controleert of de certificaten zijn gewijzigd, en zo ja, ze kopieert naar de AdGuard Home configuratiemap en de container herstart.
#!/bin/bash
set -e
CERT_DIR="/usr/syno/etc/certificate/_archive/XXXXXX"
DEST="/volume1/docker/dns/adguardhome/config/certs"
LOG="/var/log/adguard-cert-update.log"
mkdir -p "$DEST"
if ! cmp -s "$CERT_DIR/fullchain.pem" "$DEST/fullchain.pem" || \
! cmp -s "$CERT_DIR/privkey.pem" "$DEST/privkey.pem"; then
cp "$CERT_DIR/fullchain.pem" "$DEST/"
cp "$CERT_DIR/privkey.pem" "$DEST/"
chmod 644 "$DEST/fullchain.pem"
chmod 600 "$DEST/privkey.pem"
docker restart dns-adguardhome
echo "$(date): Certificates updated and AdGuard Home restarted." >> "$LOG"
else
echo "$(date): Certificates unchanged, no action taken." >> "$LOG"
fi
exit 0
CERT_DIR verwijst naar de plek waar DSM het certificaat opslaat. Elk certificaat krijgt een eigen subdirectory onder /usr/syno/etc/certificate/_archive/ met een willekeurige naam. Je kunt de jouwe vinden door te kijken welke map het certificaat voor jouw domein bevat.
Het script gebruikt cmp om de huidige certificaten te vergelijken met de eerder gekopieerde versies. Alleen wanneer er iets is gewijzigd worden de nieuwe bestanden gekopieerd, de juiste permissies gezet, en de AdGuard Home container herstart. Alles wordt gelogd zodat je kunt verifiëren dat het werkt.
Certificaatmap vinden
Maak een SSH-verbinding met je Synology en bekijk het archief:
ls /usr/syno/etc/certificate/_archive/
Elke subdirectory bevat fullchain.pem, privkey.pem, en andere bestanden. Bekijk het INFO-bestand in elke directory om te vinden welke bij jouw domein hoort:
cat /usr/syno/etc/certificate/_archive/*/INFO
Plannen
Ga in DSM naar Configuratiescherm > Taakplanner en maak een nieuwe Geactiveerde taak > Door gebruiker gedefinieerd script. Stel het in om als root te draaien bij het opstarten, of maak een geplande taak die dagelijks draait. Plak het pad naar het script als commando.
Als alternatief kun je een cron-job toevoegen via SSH:
echo "0 3 * * * /path/to/sync-certs.sh" >> /etc/crontab
AdGuard Home configureren
Ga in de instellingen van AdGuard Home naar Versleuteling en stel de certificaat- en sleutelpaden in op:
- Certificaat:
/opt/adguardhome/certs/fullchain.pem - Privésleutel:
/opt/adguardhome/certs/privkey.pem
Zorg ervoor dat de certs-directory op de host in de container is gemount op het verwachte pad.