Traefik Config mit Netcup als Resolver für DNS Challenge

  • Hallo,

    ich hab in den letzten zwei Tage jetzt meine komplette Home Infrastructure angepasst und endlich Traefik als Reverse Proxy konfiguriert.

    Ich stoße nun aber leider auf recht komisches Problem wo ich mir nicht genau sicher bin wie ich das beheben kann.

    Config:

    Code
    .ENV File
    NETCUP_CUSTOMER_NUMBER=xxxxx
    NETCUP_API_KEY=xxxxxxxxxxx
    NETCUP_API_PASSWORD=xxxxxxxxx
    NETCUP_POLLING_INTERVAL=60
    NETCUP_PROPAGATION_TIMEOUT=1800
    Code
    docker-compose.yaml #für Traefik
    ---
    services:  traefik:    image: traefik:v3.4.1    container_name: traefik    ports:      - "80:80"      - "443:443"      - "8080:8080"    environment:      - NETCUP_CUSTOMER_NUMBER=${NETCUP_CUSTOMER_NUMBER}      - NETCUP_API_KEY=${NETCUP_API_KEY}      - NETCUP_API_PASSWORD=${NETCUP_API_PASSWORD}    volumes:      - /var/run/docker.sock:/var/run/docker.sock      - ./config/traefik.yaml:/etc/traefik/traefik.yaml:ro      - ./data/certs:/var/traefik/certs/:rw    networks:      - frontend    restart: unless-stopped
    networks:  frontend:    external: true
    Code
    traefik.yaml #Static Configuration
    global:  checkNewVersion: false  sendAnonymousUsage: false
    log:  level: DEBUG
    api:  dashboard: true  insecure: true
    entryPoints:  web:    address: :80  websecure:    address: :443
    certificatesResolvers:  netcup:    acme:      email: "xxxx@mail.com"      storage: /var/traefik/certs/netcup-acme.json      caServer: 'https://acme-v02.api.letsencrypt.org/directory'      keyType: EC256      dnsChallenge:        provider: netcup        resolvers:          - "46.38.243.234:53"          - "1.1.1.1:53"
    providers:  docker:    endpoint: "unix:///var/run/docker.sock"    exposedByDefault: false
    Code
    docker-compose.yaml #Nginx Test Server
    ---
    services:  nginx:    container_name: nginx    image: nginx:latest    networks:      - frontend    labels:      - traefik.enable=true      - traefik.http.routers.nginx-http.rule=Host(`nginx.mydomain.at`)      - traefik.http.routers.nginx-http.entrypoints=web      - traefik.http.routers.nginx-https.tls=true      - traefik.http.routers.nginx-https.tls.certresolver=netcup      - traefik.http.routers.nginx-https.entrypoints=websecure      - traefik.http.routers.nginx-https.rule=Host(`mydomain.at)    restart: unless-stopped
    networks:  frontend:    external: true
    Code
    Error Code von docker-comopose logs bei Traefik Container
    
    2025-06-24T06:47:31Z ERR github.com/traefik/traefik/v3/pkg/provider/acme/provider.go:484 > Unable to obtain ACME certificate for domains error="unable to generate a certificate for the domains [nginx.mydomain.at]: error: one or more domains had a problem:\n[nginx.mydomain.at] propagation: time limit exceeded: last error: authoritative nameservers: NS third-dns.netcup.net.:53 did not return the expected TXT record [fqdn: _acme-challenge.nginx.mydomain.at., value: ofkrDl0nDaZ1UU1APEt7JJn7DYXSXy8dBaFxwcQg1ag]: \n" ACME CA=https://acme-v02.api.letsencrypt.org/directory acmeCA=https://acme-v02.api.letsencrypt.org/directory domains=["nginx.mydomain.at"] providerName=netcup.acme routerName=nginx-https@docker rule=Host(`nginx.mydomain.at`)

    Habe eigentlich extra die NETCUP_PROPAGATION_TIMEOUT höher gesetzt da man in manchen Forum Posts gesehen hat das es damit dezente Probleme gibt.

    Meine öffentliche IP von meinem Heimnetz ist im CCP bei der Domäne unter DNS hinterlegt und wurde auch validiert.

    Freigegebene Ports für den Server sind: 22,53,80,443

    Bin mir jetzt nicht genau sicher wo jetzt das Problem liegt und finde eigentlich dazu auch nichts im Internet.

    Bei den CertResolver hab ich die netcup DNS Domain hinterlegt und Cloudflare um sicherzugehen das er die Domain im Notfall auch anderst auflösen kann. Bin mir da aber auch nicht zu 100% sicher ob da alles passt.

    Vielleicht kann mir ja da wer weiterhelfen.

  • Nicht lange genug gewartet oder tatsächlich den Record nicht gesetzt?

    error: one or more domains had a problem:\n[nginx.mydomain.at] propagation: time limit exceeded: last error: authoritative nameservers: NS third-dns.netcup.net.:53 did not return the expected TXT record

    Schau mal in den DNS-Einstellungen der Domain, was da gesetzt ist. Es kann z.B. auch daran liegen, dass zu viele TXT-Records existieren, vielleicht von vorherigen gescheiterten Versuchen, die dann nicht wieder gelöscht wurden.

    Einmal editiert, zuletzt von NaN (25. Juni 2025 um 15:01)

  • Nicht lange genug gewartet oder tatsächlich den Record nicht gesetzt?

    Schau mal in den DNS-Einstellungen der Domain, was da gesetzt ist. Es kann z.B. auch daran liegen, dass zu viele TXT-Records existieren, vielleicht von vorherigen gescheiterten Versuchen, die dann nicht wieder gelöscht wurden.

    Hab da bis jetzt nur einen TXT Record gesehen den hab ich jetzt vorerst mal gelöscht und das Timeout Interval auf 14400 erhöht. Mal schauen ob das genug Zeit ist für die Propagation.

    Aber so wies aussieht kommt der Call an und laut api logs wird der TXT Record auch gesetzt.

    Kann nur mal testen ob 30min ausrreichend sind sonst vlt mal auf 60min erhöhen falls das nicht ausrreicht.


    Das einzige was in den DEbug Logs noch auffällt (Wo ich mir aber nicht sicher bin ob das relevant ist) wäre das hier

    Code
    traefik  | 2025-06-25T13:18:00Z DBG github.com/traefik/traefik/v3/pkg/tls/tlsmanager.go:228 > Serving default certificate for request: "default.exp-tas.com"
    traefik  | 2025-06-25T13:18:00Z DBG log/log.go:245 > http: TLS handshake error from 172.18.0.1:55018: EOF
    traefik  | 2025-06-25T13:18:02Z DBG github.com/traefik/traefik/v3/pkg/tls/tlsmanager.go:228 > Serving default certificate for request: "westus-0.in.applicationinsights.azure.com"
    traefik  | 2025-06-25T13:18:02Z DBG log/log.go:245 > http: TLS handshake error from 172.18.0.1:60220: EOF

    Sollte meines Verständnis nach eigentlich keine Auswirkung auf die DNS Propagation haben

  • Normalerweise müsste irgendwas über 10 Minuten schon reichen. So träge sind die Netcup-Server auch wieder nicht. Aber da du jetzt eine sehr lange Zeit eingestellt hast, kannst du in der Zeit mal nachsehen, ob wirklich der Record da gesetzt wird, wo er hingehört.

  • Normalerweise müsste irgendwas über 10 Minuten schon reichen. So träge sind die Netcup-Server auch wieder nicht. Aber da du jetzt eine sehr lange Zeit eingestellt hast, kannst du in der Zeit mal nachsehen, ob wirklich der Record da gesetzt wird, wo er hingehört.

    Hab jetzt mal auf 1h Timeout gestellt hab noch festgestellt das ich vergessen habe die Timeout Variable in den Container mitzugeben deswegen hat das Ding schon nach 15min nen Timeout gehabt.

    So Laut API Logs bekommt er das:

    Code
    25.06.2025 15:42:35     updateDnsRecords     Erfolgreich     DNS records successful updated

    Was zeitlich mit den Start der DNS Challenge aus den Traefik Logs zusammenpasst:

    Code
    traefik  | 2025-06-25T13:42:35Z DBG github.com/go-acme/lego/v4@v4.23.1/log/logger.go:48 > [INFO] [nginx.mydomain.at] acme: Trying to solve DNS-01 lib=lego
    traefik  | 2025-06-25T13:42:35Z DBG github.com/go-acme/lego/v4@v4.23.1/log/logger.go:48 > [INFO] [nginx.mydomain.at] acme: Checking DNS record propagation. [nameservers=46.38.225.225:53,188.68.63.68:53,37.221.199.199:53,46.38.243.234:53] lib=lego
    traefik  | 2025-06-25T13:44:35Z DBG github.com/go-acme/lego/v4@v4.23.1/log/logger.go:48 > [INFO] Wait for propagation [timeout: 1h0m0s, interval: 2m0s] lib=lego

    Also kann ich jetzt eh nur mal warten hab in den DNS Settings noch zwei alte Einträge von zwei Versuchen zuvor erhalten. vielleicht fehlt ja wirklich nur 2-3min mehr als die Default 15min als Timeout

  • So das ist jetzt auch interessant nach 1h ist die Propagation in ein Timeout gerannt

    mit den Standard Error wie zuvor jedoch findet man in den Netcup API Logs das hier:

    Code
    25.06.2025 16:44:36     updateDnsRecords     Erfolgreich     DNS records successful updated     mydomain.at

    Was zeitlich sich genau overlapped mit den Error des Traefik Container.

    Code
    traefik  | 2025-06-25T14:44:37Z DBG github.com/go-acme/lego/v4@v4.23.1/log/logger.go:48 > [INFO] retry due to: acme: error: 400 :: POST :: https://acme-v02.api.letsencrypt.org/acme/authz/2484875001/542026012491 :: urn:ietf:params:acme:error:badNonce :: Unable to validate JWS :: JWS has an invalid anti-replay nonce: "b-B2QIrEodrYz_cM6E9eyQoridEaRHd_QZFU0dkwWvZJ_ivI0MQ" lib=lego
    traefik  | 2025-06-25T14:44:37Z DBG github.com/go-acme/lego/v4@v4.23.1/log/logger.go:48 > [INFO] Deactivating auth: https://acme-v02.api.letsencrypt.org/acme/authz/2484875001/542026012491 lib=lego
    traefik  | 2025-06-25T14:44:37Z ERR github.com/traefik/traefik/v3/pkg/provider/acme/provider.go:484 > Unable to obtain ACME certificate for domains error="unable to generate a certificate for the domains [nginx.mydomain.at]: error: one or more domains had a problem:\n[nginx.mydomain.at] propagation: time limit exceeded: last error: authoritative nameservers: NS root-dns.netcup.net.:53 did not return the expected TXT record [fqdn: _acme-challenge.nginx.mydomain.at., value: PlJhPrMocGVa0nvs-Y-CoesHq3thg4ZwMz4IwDVP4Sc]: Kzt1KbpcPT2S5mM_rsciStmmeyIgTbCZQ0aGLZHvpSQ\n" ACME CA=https://acme-v02.api.letsencrypt.org/directory acmeCA=https://acme-v02.api.letsencrypt.org/directory domains=["nginx.mydomain.at"] providerName=netcup.acme routerName=nginx-https@docker rule=Host(`nginx.mydomain.at`)

    Ich bin mir da schön langsam nicht mal mehr sicher ob da nicht was in der lego ACME script falsch ist

  • Zu lange gewartet, Nonce abgelaufen. So eine lange Wartezeit kann aber nicht nötig sein, also wird sich das erledigen, wenn du mit einer zu erwarteten Wartezeit hinkommst. Du solltest jetzt aber wissen, ob der TXT-Record richtig eingetragen wurde.

  • Zu lange gewartet, Nonce abgelaufen. So eine lange Wartezeit kann aber nicht nötig sein, also wird sich das erledigen, wenn du mit einer zu erwarteten Wartezeit hinkommst. Du solltest jetzt aber wissen, ob der TXT-Record richtig eingetragen wurde.

    Also ich bekomme die TXT Einträge in der DNS Übersicht aber ich weiß halt einfach nicht woran es dann scheitert

  • Wenn der Record richtig gesetzt aber nicht gesehen wird, stimmt wohl mit der DNS-Auflösung etwas nicht. Du hast die drei autoritativen Netcup-Nameserver angegeben und eine weitere Adresse. Ist 46.38.243.234 wirklich ein Nameserver? Das ist eine Adresse bei Netcup, vielleicht deine? (Wenn es deine ist, solltest du dich darum kümmern.)

  • Wenn der Record richtig gesetzt aber nicht gesehen wird, stimmt wohl mit der DNS-Auflösung etwas nicht. Du hast die drei autoritativen Netcup-Nameserver angegeben und eine weitere Adresse. Ist 46.38.243.234 wirklich ein Nameserver? Das ist eine Adresse bei Netcup, vielleicht deine? (Wenn es deine ist, solltest du dich darum kümmern.)

    Ich hab jetzt auch noch mit den Nameservern

    resolvers: - "46.38.225.230:53" - "46.38.252.230:53"

    probiert leider auch ohne Erfolg. Das sind halt die Nameserver die ich finde wenn man nach Netcup Nameserver suche. Die angegebene 4.te Adresse wurde Standard bei der Domäne hinterlegt welche nicht mir gehört. Die hat nur dieses Domäne ist geparkt gehabt aber ist auch im DNS Registrar nicht mehr vorhanden. Also was könnte ich überhaupt noch probieren wenn die TXT Records gesetzt werden aber er irgendwie die DNS Propagation nicht hinbekommt?

  • Der Server mit Traefik läuft doch bei dir zu Hause, nicht bei Netcup, oder? Dann kannst du die rekursiven Resolver von Netcup nicht verwenden. Die weigern sich, für Externe zu arbeiten. Wenn es mit den autoritativen Servern nicht funktioniert, nimm halt 9.9.9.9, 8.8.8.8 oder 1.1.1.1 (Quad9, Google, Cloudflare). Die TTL der TXT-Records ist hoffentlich kurz. Dann sollte das die Wartezeit nicht zu sehr verlängern.

    Einmal editiert, zuletzt von NaN (25. Juni 2025 um 22:39)

  • Der Server mit Traefik läuft doch bei dir zu Hause, nicht bei Netcup, oder? Dann kannst du die rekursiven Resolver von Netcup nicht verwenden. Die weigern sich, für Externe zu arbeiten. Wenn es mit den autoritativen Servern nicht funktioniert, nimm halt 9.9.9.9, 8.8.8.8 oder 1.1.1.1 (Quad9, Google, Cloudflare). Die TTL der TXT-Records ist hoffentlich kurz. Dann sollte das die Wartezeit nicht zu sehr verlängern.

    Ja der Server läuft zuhause. Was wären denn die offiziellen Netcup Resolver? Die auch von außen erreichbar sind? Sonst probier ichs mal mit den 1.1.1.1 und 8.8.8.8 und schau obs damit funkt

  • Es gibt nur die autoritativen Server, die rekursive Anfragen nicht bearbeiten, und die Resolver, die nur für Netcup-IP-Adressen arbeiten. Wenn du einen rekursiven Resolver für deinen Heim-Server brauchst, kannst du den von deinem Internetprovider nehmen, den von deinem Router, der den vom Provider verwendet, einen der vielen öffentlichen Resolver, oder einen eigenen Resolver betreiben, aber keinen von Netcup.

  • Es gibt nur die autoritativen Server, die rekursive Anfragen nicht bearbeiten, und die Resolver, die nur für Netcup-IP-Adressen arbeiten. Wenn du einen rekursiven Resolver für deinen Heim-Server brauchst, kannst du den von deinem Internetprovider nehmen, den von deinem Router, der den vom Provider verwendet, einen der vielen öffentlichen Resolver, oder einen eigenen Resolver betreiben, aber keinen von Netcup.

    Spannend mit "1.1.1.1:53" und "8.8.8.8:53" funktionierts jetzt und braucht eigentlich immer 30min bis das Zertifikat fertig am Server ist Startpunkt war zb. heute 7:56 und habe den DNS Propagation Task genau um 8:26 abgeschlossen

    Mal testen die Tage wie gut das laufen wird. Und ob die Zeit noch kürzer wird das ich das Timeout reduzieren kann