diff --git a/inventory.yml b/inventory.yml
index beed07b..d9459f3 100644
--- a/inventory.yml
+++ b/inventory.yml
@@ -46,6 +46,16 @@ all:
         sudo: yes
         docker: yes
 
+    # Data for DD24 dyndns updates
+    dyndns_domain: "dyndns.n39.eu"
+    dyndns_password: !vault |
+      $ANSIBLE_VAULT;1.1;AES256
+      65653833376630636530373933326362316164353965643732323634393934383764376563613063
+      6632333438636434376666666132313139393363366665380a353737326231613862333866323031
+      30353966366436613433363937643463613332643133643637643232633238373638303063646635
+      3132306530356431630a333538616466643933643230383165646362643738616237383937666332
+      3164
+
   hosts:
     tau.netz39.de:
       server_admin: "admin+tau@netz39.de"
diff --git a/pottwal.yml b/pottwal.yml
index 035052a..a4df212 100644
--- a/pottwal.yml
+++ b/pottwal.yml
@@ -28,6 +28,8 @@
       vars:
         docker_data_root: "/srv/docker"
     - role: apache
+    - role: dd24-dyndns-cron
+      # variables are set in the inventory
 
   tasks:
 
diff --git a/roles/dd24-dyndns-cron/defaults/main.yml b/roles/dd24-dyndns-cron/defaults/main.yml
new file mode 100644
index 0000000..0f9336d
--- /dev/null
+++ b/roles/dd24-dyndns-cron/defaults/main.yml
@@ -0,0 +1,5 @@
+# DD24 Cron configuration
+---
+dyndns_domain: www.example.com
+dyndns_password: yourpassword
+dyndns_ip: auto
diff --git a/roles/dd24-dyndns-cron/handlers/main.yml b/roles/dd24-dyndns-cron/handlers/main.yml
new file mode 100644
index 0000000..49c802c
--- /dev/null
+++ b/roles/dd24-dyndns-cron/handlers/main.yml
@@ -0,0 +1,10 @@
+# handlers file for cron-dd24-dyndns
+---
+- name: reload cron
+  ansible.builtin.shell:
+    cmd: service cron reload
+    warn: no
+# Use the shell call because the task sometimes has problems finding the service state
+#  service:
+#    name: cron
+#    state: restarted
diff --git a/roles/dd24-dyndns-cron/tasks/main.yml b/roles/dd24-dyndns-cron/tasks/main.yml
new file mode 100644
index 0000000..5060260
--- /dev/null
+++ b/roles/dd24-dyndns-cron/tasks/main.yml
@@ -0,0 +1,18 @@
+---
+- name: Make sure cron and curl are installed
+  apt:
+    name:
+      - cron
+      - curl
+    state: present
+
+- name: Setup cron file for DD24 updates
+  ansible.builtin.template:
+    src: "templates/dd24-dyndns.cron.j2"
+    dest: "/etc/cron.d/dd24-dyndns"
+    owner: root
+    group: root
+    mode: "0644"
+  notify: reload cron
+  # There is ansible.builtin.cron, but this makes configuration much
+  # more complicated, so we stick to the template.
diff --git a/roles/dd24-dyndns-cron/templates/dd24-dyndns.cron.j2 b/roles/dd24-dyndns-cron/templates/dd24-dyndns.cron.j2
new file mode 100644
index 0000000..e3119ab
--- /dev/null
+++ b/roles/dd24-dyndns-cron/templates/dd24-dyndns.cron.j2
@@ -0,0 +1,6 @@
+# /etc/cron.d/dd24-dyndns: Cron call to renew DynDNS entry
+
+SHELL=/bin/sh
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+*/5 * * * * root curl "https://dynamicdns.key-systems.net/update.php?hostname={{dyndns_domain}}&password={{dyndns_password}}&ip={{dyndns_ip}}" > /dev/null