1. The problem I’m having:
Obtaining the certificate always fails using DNS challenge on Duck DNS. Based on the logs apparently Caddy is trying to connect to Duck DNS over udp/53, which ends up in “connection refused” or “i/o timeout”.
Does this make sense? I’d think that it would be querying Duck over the HTTPS API to add the TXT record. This is a new Caddy setup on Docker, built with the duckdns module.
2. Error messages and/or full log output:
Caddy is requesting a domain and a star certificate. Both fail with read udp 172.19.0.2:55368->99.79.143.35:53: read: connection refused
or dial tcp 99.79.143.35:53: i/o timeout
.
(The actual domain is redacted to avoid publicizing my IP).
{
"level": "info",
"ts": 1702008471.3784668,
"logger": "tls.obtain",
"msg": "obtaining certificate",
"identifier": "*.services.duckdns.org"
}{
"level": "info",
"ts": 1702008471.3803759,
"logger": "tls.issuance.acme",
"msg": "waiting on internal rate limiter",
"identifiers": ["*.services.duckdns.org"],
"ca": "https://acme-v02.api.letsencrypt.org/directory",
"account": ""
}{
"level": "info",
"ts": 1702008471.3805563,
"logger": "tls.issuance.acme",
"msg": "done waiting on internal rate limiter",
"identifiers": ["*.services.duckdns.org"],
"ca": "https://acme-v02.api.letsencrypt.org/directory",
"account": ""
}{
"level": "info",
"ts": 1702008471.3839319,
"logger": "tls.obtain",
"msg": "lock acquired",
"identifier": "services.duckdns.org"
}{
"level": "info",
"ts": 1702008471.3843093,
"logger": "tls.obtain",
"msg": "obtaining certificate",
"identifier": "services.duckdns.org"
}{
"level": "info",
"ts": 1702008471.3855846,
"logger": "tls.issuance.acme",
"msg": "waiting on internal rate limiter",
"identifiers": ["services.duckdns.org"],
"ca": "https://acme-v02.api.letsencrypt.org/directory",
"account": ""
}{
"level": "info",
"ts": 1702008471.3856406,
"logger": "tls.issuance.acme",
"msg": "done waiting on internal rate limiter",
"identifiers": ["services.duckdns.org"],
"ca": "https://acme-v02.api.letsencrypt.org/directory",
"account": ""
}{
"level": "info",
"ts": 1702008472.0595484,
"logger": "tls.issuance.acme.acme_client",
"msg": "trying to solve challenge",
"identifier": "services.duckdns.org",
"challenge_type": "dns-01",
"ca": "https://acme-v02.api.letsencrypt.org/directory"
}{
"level": "info",
"ts": 1702008472.074053,
"logger": "tls.issuance.acme.acme_client",
"msg": "trying to solve challenge",
"identifier": "*.services.duckdns.org",
"challenge_type": "dns-01",
"ca": "https://acme-v02.api.letsencrypt.org/directory"
}{
"level": "error",
"ts": 1702008477.4608822,
"logger": "tls.obtain",
"msg": "could not get certificate from issuer",
"identifier": "*.services.duckdns.org",
"issuer": "acme-v02.api.letsencrypt.org-directory",
"error": "[*.services.duckdns.org] solving challenges: waiting for solver certmagic.solverWrapper to be ready: checking DNS propagation of \"_acme-challenge.services.duckdns.org\": read udp 172.19.0.2:55368->99.79.143.35:53: read: connection refused (order=https://acme-v02.api.letsencrypt.org/acme/order/...) (ca=https://acme-v02.api.letsencrypt.org/directory)"
}
3. Caddy version:
v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=
4. How I installed and ran Caddy:
Built with a Dockerfile inline the docker-compose file. (See below).
a. System environment:
- Ubuntu 22.04.3 LTS
- Docker Engine 24.0.7
- Docker Compose 2.23.3
b. Command:
sudo docker compose up -d
c. Service/unit/compose file:
docker-compose.yml
:
version: "3.9"
name: proxy
services:
caddy:
container_name: caddy
build:
dockerfile_inline: |
FROM caddy:2.7.5-builder AS builder
RUN xcaddy build --with github.com/caddy-dns/duckdns
FROM caddy:2.7.5
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
restart: unless-stopped
ports:
- 55555:55555
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- /etc/ssl/caddy:/etc/ssl/caddy
- ./site:/srv
- ./data:/data
- ./config:/config
volumes:
data:
external: true
config:
d. My complete Caddy config:
*.services.duckdns.org:55555, services.duckdns.org:55555 {
tls {
dns duckdns 36cb16b0-3fa2-4ea4-92ab-7a0ab66cc701
}
@immich host immich
handle @immich {
reverse_proxy https://192.168.150.40:28376 {
transport http {
tls_server_name immich
}
}
}
}
5. Links to relevant resources:
n/a