Возник вопрос по работе в Traefik с SSL сертификатами к домену от reg.ru при сером динамическом IP. Задача - ходить внутри сети по доменным именам с сертами. Находясь вне дома окажусь внутри через Netbird, этого достаточно.
Ранее стоял Nginx Proxy Manager, серты получал скриптом с помощью certbot и плагином для работы с reg.ru (по DNS Challenge, в качестве IP указывал в ЛК внутренний адрес NPM), потом подкладывал ручками в NPM.
Т.к. предыдущий инстанс хоумлабы помер (он был полутестовый), решил в новом перейти на Traefik (установлен в LXC по методичке Stilicho) и пока не получается наладить работу с сертами. Вижу, что Traefik работает с провайдерами, доступными Lego for ACME и там есть reg.ru в списке доступных DNS Providers (тыц). Однако наладить получение серта так и не получилось, и не разобрался как подкладывать Traefik’у полученные скриптом серты. Вроде известный продавец доменов, а инфы толком нет, не нашёл кейсов кто и как делал. В идеале автоматизировать бы получение и обновление сертов через DNS Challenge.
Может кто-то уже проходил такой путь с reg.ru и поделится, что и где нужно прописывать / настраивать?
Вот такой статический конфиг (/etc/traefik/traefik.yaml):
global:
checkNewVersion: true # traefik стоит 3.5.2
sendAnonymousUsage: false
# Enable traefik ui dashboard
api:
dashboard: true
insecure: true # false # access to http://traefikIP:8080/dashboard/ is disabled
debug: true
disableDashboardAd: false # true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
serversTransport:
insecureSkipVerify: true
providers:
file:
directory: /etc/traefik/dynamic
watch: true
#filename: /etc/traefik/config.yaml # when a specific file is desired
#-https://doc.traefik.io/traefik/https/acme/
certificatesResolvers:
regru:
acme:
storage: /etc/traefik/acme.json
dnsChallenge:
provider: regru
delayBeforeCheck: 5 # пробовал разные варианты, например 60
# resolvers: # пробовал добавлять и разные комбинации, не помогло
# - 77.88.8.8:53
# - 77.88.8.1:53
# - 1.1.1.1:53
# - 8.8.8.8:53
Вот динамический конфиг (/etc/traefik/dynamic/config.yaml):
http:
# https://doc.traefik.io/traefik/routing/routers/
routers:
# harden dashboard access: can only be accessed with a username/password
dashboard:
entryPoints:
- websecure
rule: "Host(`traefik-dashboard.mydomain.ru`)"
service: api@internal
middlewares:
- auth
tls:
certResolver: regru
middlewares:
# Middleware for Redirection
# This can be used instead of global redirection
#
auth:
basicAuth:
users: # users and their MD5 hashed passwords, granted access to the traefik dashboard
- "admin:hashedpassword" # openssl passwd -1 "hashedpassword"
#
https-redirect:
redirectScheme:
scheme: https
permanent: true
#
default-headers:
headers:
frameDeny: true
browserXssFilter: true
contentTypeNosniff: true
forceSTSHeader: true
stsIncludeSubdomains: true
stsPreload: true
stsSeconds: 15552000
customFrameOptionsValue: SAMEORIGIN
customRequestHeaders:
X-Forwarded-Proto: https
tls:
options:
default:
minVersion: VersionTLS12 # change to a lower version if you expect to service Internet traffic from around the world
curvePreferences: # below priority sequence can be changed
- X25519 # the most commonly used 128-bit
- CurveP256 # the next most commonly used 128-bit
- CurveP384 # 192-bit
- CurveP521 # 256-bit
sniStrict: true # true if our own certificates should be enforced
cipherSuites:
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
stores:
default:
defaultGeneratedCert:
resolver: regru
domain:
main: mydomain.ru
sans:
- "*.mydomain.ru"
Вот что происходит в консоли:
root@traefik:~# export REGRU_USERNAME="myemail@mailprovider.ru"
root@traefik:~# export REGRU_PASSWORD="mypassword"
root@traefik:~# traefik
2025-09-22T10:46:34+03:00 ERR Error while creating certificate store error="unable to find certificate for domains \"*.mydomain.ru,mydomain.ru\": falling back to the internal generated certificate" tlsStoreName=default
2025-09-22T10:46:34+03:00 ERR Error while creating certificate store error="unable to find certificate for domains \"*.mydomain.ru,mydomain.ru\": falling back to the internal generated certificate" tlsStoreName=default
2025-09-22T10:49:10+03:00 ERR Unable to obtain ACME certificate for domain error="unable to generate a certificate for the domains [mydomain.ru *.mydomain.ru]: error: one or more domains had a problem:\n[*.mydomain.ru] propagation: time limit exceeded: last error: authoritative nameservers: NS ns2.reg.ru.:53 did not return the expected TXT record [fqdn: _acme-challenge.mydomain.ru., value: <somevalue>]: <somevalue>\n[mydomain.ru] propagation: time limit exceeded: last error: authoritative nameservers: NS ns2.reg.ru.:53 did not return the expected TXT record [fqdn: _acme-challenge.mydomain.ru., value: <somevalue>]: qerGznFtt5HHne0aIXTmIdF6lYeCXCKzq4wJcXvSif8\n" ACME CA=https://acme-v02.api.letsencrypt.org/directory acmeCA=https://acme-v02.api.letsencrypt.org/directory domains=["mydomain.ru","*.mydomain.ru"] providerName=regru.acme tlsStoreName=default
Было бы круто всё таки наладить выпуск сами Traefik’ом. Есть мысли, что поправить нужно?
в качестве альтернативного варианта я активно использую acme-dns. Суть в том, что это отдельный DNS сервер, при регистрации вы получаете файл с кредами от него, а потом надо руками 1 раз прописать CNAME записи в своей админке, которые будут вести на этот acme-dns DNS сервер
В lego не делал, для certbot писал свой скрипт для yandex cloud, он брал системный аккаунт виртуалки и с ним обновлял DNS зону
Ну и в случае отсутствия провайдера всегда можно воспользоваться acme-dns, у меня корпоративный развернут для дополнительной безопасности. Дома пользовал публичный.
Резюмирую по своему опыту с reg.ru, Traefik и SSL.
Выпускать сертификаты напрямую из Traefik не вышло (описано выше, скорее всего кэширование - записи появлялась на reg.ru)
При установке Traefik в LXC не получилось и использовать имеющиеся сертификаты (которые получал скриптом certbot + плагин для reg.ru): или явные ошибки ловил, или не подтягивались серты в Traefik. Возможно, что-то не понял.
acme-dns не пробовал
При установке Traefik в Docker имеющиеся сертификаты получилось прокинуть без проблем, хотя конфиги ± те же. Заработало.
При установке Traefik в Docker пробовать наладить автоматическое получение сертификатов к домену reg.ru самим уже не стал, остановился на варианте 4.
Пока кажется, что работать с Traefik проще когда он в Docker.
Вот тут описывал. 1 раз для домена надо прописать cname записи в своем основном домене, а потом certbot уже работает через API с acme-dns сервером. т.е. можно подцепить к любому DNS провайдеру.
Из минусов невозможность привязки нескольких аккаунтов к одному домену, но я решал тем, что копировал acme-dns.json на другие сервера