Posted on :: 264 Words :: Tags: , , , , , ,

Dynamic DNS (DDNS) automatically updates DNS records when your IP address changes. This guide shows how to set up DDNS using ddns-updater, desec.io, and Podman Quadlets.

Setup

1. Create Kubernetes YAML

Create /opt/container/ddns-updater/kube.yaml (rootfull) or ~/container/ddns-updater/kube.yaml (rootless):

---
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: ddns-updater
    io.containers.autoupdate: registry
  name: ddns-updater
spec:
  containers:
    - image: docker.io/qmcgaw/ddns-updater:latest
      name: v4
      env:
      - name: LOG_LEVEL
        value: INFO
      - name: SERVER_ENABLED
        value: "false"
      - name: PERIOD
        value: 5m
      - name: CONFIG
        value: >
          {
            "settings": [
              {
                "provider": "desec",
                "domain": "ddns.example.com",
                "token": "your_desec_token_here",
                "ip_version": "ipv4"
              }
            ]
          }

    - image: docker.io/qmcgaw/ddns-updater:latest
      name: v6
      env:
      - name: LOG_LEVEL
        value: INFO
      - name: SERVER_ENABLED
        value: "false"
      - name: HEALTH_SERVER_ADDRESS
        value: "127.0.0.1:9998"
      - name: PERIOD
        value: 5m
      - name: CONFIG
        value: >
          {
            "settings": [
              {
                "provider": "desec",
                "domain": "ddns.example.com",
                "ipv6_suffix": ""
                "token": "your_desec_token_here",
                "ip_version": "ipv6"
              }
            ]
          }

2. Create Podman Quadlet

Create /etc/containers/systemd/ddns-updater.kube (rootfull) or ~/.config/containers/systemd/ddns-updater.kube (rootless):

[Install]
WantedBy=default.target

[Unit]
Description=Dynamic DNS Updater for desec.io
After=network-online.target
Wants=network-online.target

[Kube]
Yaml=/opt/container/ddns-updater/kube.yaml
Network=host

[Service]
Restart=always
RestartSec=10
TimeoutStartSec=900

3. Enable and Start

For rootfull:

sudo systemctl daemon-reload
sudo systemctl enable --now ddns-updater

For rootless:

systemctl --user daemon-reload
systemctl --user enable --now ddns-updater

Monitoring

Check status:

# rootfull
systemctl status ddns-updater

# rootless
systemctl --user status ddns-updater

View logs:

podman logs ddns-updater-v4
podman logs ddns-updater-v6

Test DNS resolution:

dig +short A ddns.example.com
dig +short AAAA ddns.example.com