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.