Skip to content

Operationeel beheer

Geert van Zoest edited this page Mar 31, 2026 · 2 revisions

Operationeel beheer

Cron job instellen

Environment variables instellen

Maak een bestand aan met de credentials:

sudo nano /etc/azure-ddns.env

Inhoud:

AZURE_TENANT_ID=aaaabbbb-0000-cccc-1111-dddd2222eeee
AZURE_CLIENT_ID=11112222-bbbb-3333-cccc-4444dddd5555
AZURE_CLIENT_SECRET=A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u
AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000
AZURE_RESOURCE_GROUP=rg-dns
DNS_ZONE_NAME=example.com
DNS_RECORD_NAME=home

Beveilig het bestand:

sudo chmod 600 /etc/azure-ddns.env
sudo chown root:root /etc/azure-ddns.env

Crontab configureren

sudo crontab -e

Voeg toe (elke 5 minuten):

*/5 * * * * . /etc/azure-ddns.env && /usr/local/bin/azure-ddns >> /var/log/azure-ddns.log 2>&1

Uitleg:

  • . /etc/azure-ddns.env — laadt de environment variables
  • /usr/local/bin/azure-ddns — draait het script
  • >> /var/log/azure-ddns.log 2>&1 — schrijft stdout + stderr naar logbestand

Interval kiezen

Interval Cron expressie Geschikt voor
1 minuut * * * * * Kritieke services, veel IP-wijzigingen
5 minuten */5 * * * * Aanbevolen voor de meeste gevallen
15 minuten */15 * * * * Stabiele verbindingen
30 minuten */30 * * * * Niet-kritieke services

Let op: Azure DNS heeft een rate limit van 40 PUT requests per minuut. Bij elke 5 minuten doe je maximaal 12 PUT's per uur (ruim onder de limiet). GET requests zijn gelimiteerd tot 1000/min.

Logbestand beheren

Handmatig bekijken

# Laatste 20 regels
tail -20 /var/log/azure-ddns.log

# Live meekijken
tail -f /var/log/azure-ddns.log

# Alleen errors
grep ERROR /var/log/azure-ddns.log

# Alleen IP-wijzigingen
grep "IP gewijzigd\|DNS record bijgewerkt" /var/log/azure-ddns.log

Logrotate instellen

Voorkom dat het logbestand onbeperkt groeit:

sudo nano /etc/logrotate.d/azure-ddns

Inhoud:

/var/log/azure-ddns.log {
    weekly
    rotate 4
    compress
    missingok
    notifempty
}

Dit houdt 4 weken aan logs bij en comprimeert oude bestanden.

Monitoring

Controleer of de cron job draait

# Check cron logs
grep azure-ddns /var/log/syslog | tail -5

# Check of het process recent gedraaid heeft
ls -la /tmp/azure-ddns.lock

Controleer het DNS record

# Via dig (installeer met: sudo apt-get install dnsutils)
dig +short home.example.com

# Via nslookup
nslookup home.example.com

Controleer je publieke IP

curl -s https://icanhazip.com

Vergelijk dit met het DNS record — ze moeten gelijk zijn.

Verbose modus

Voor extra debug output bij problemen:

# Eenmalig met debug
VERBOSE=1 ./azure-ddns --force

# In crontab (tijdelijk voor debugging)
*/5 * * * * . /etc/azure-ddns.env && VERBOSE=1 /usr/local/bin/azure-ddns >> /var/log/azure-ddns.log 2>&1

Let op: Zet VERBOSE=1 weer uit na debugging — het genereert veel extra logregels. De AZURE_CLIENT_SECRET wordt bewust NIET getoond in verbose output.

Force update

Om het DNS record geforceerd bij te werken (ook als het IP niet gewijzigd is):

. /etc/azure-ddns.env && /usr/local/bin/azure-ddns --force

Script updaten

# Via git
cd /pad/naar/azure-ddns
git pull
sudo cp azure-ddns /usr/local/bin/azure-ddns

# Of direct downloaden
sudo curl -o /usr/local/bin/azure-ddns \
  https://raw.githubusercontent.com/geertvanzoest/azure-ddns/main/azure-ddns
sudo chmod +x /usr/local/bin/azure-ddns

Secret rotatie

Azure client secrets verlopen. Plan een herinnering voor vernieuwing:

  1. Genereer een nieuw secret: az ad app credential reset --id <appId> --years 1
  2. Update /etc/azure-ddns.env met het nieuwe AZURE_CLIENT_SECRET
  3. Test: . /etc/azure-ddns.env && /usr/local/bin/azure-ddns --force
  4. De eerstvolgende cron run gebruikt automatisch het nieuwe secret