Traefik на Synology: LetsEncrypt сообщает, что у него проблемы с DNS, но файл сертификата выглядит действительным
Моя текущая сеть:
Router - 192.168.1.1 (static)
Windows PC - 192.168.1.10 (static)
Synology NAS - 192.168.1.11 (static)
DockerPihole - 192.168.1.12 (macvlan-static)
DockerUnbound - 192.168.1.13 (macvlan-static)
DockerTraefik - 192.168.1.14 (macvlan-static)
Сеть Docker Bridge (для работы Traefik)
DockerTraefik - 192.168.10.2 (bridge-static)
DockerNginx1 - 192.168.10.10 (bridge-static)
DockerNginx2 - 192.168.10.20 (bridge-static)
- Я использую Docker на своем Synology NAS.
- Я использую DNS на своем Synology NAS (встроенное приложение DNS). Pi-Hole, Unbound и Traefik работают в общем macvlan.
- Я создал мостовую сеть для подключения Traefik к каждому контейнеру.
- Я настраиваю метки в стеке каждого контейнера в portainer для обработки конфигурации Traefik.
- Я пытаюсь следовать этому руководству здесь https://youtu.be/wLrmmh1eI94 , но это не было на Synology, поэтому оно немного отличается.
- Хотя я владею доменом, который пытаюсь использовать, я понимаю, что в этом нет необходимости, если я могу указать на свой DNS-сервер Synology, который обрабатывает этот домен.
Основное отличие состоит в том, что Synology уже использует 80 и 443, поэтому я решил поместить Traefik в macvlan, чтобы не было конфликтов портов.
У меня почти все работает, но мне трудно разобраться с этой (надеюсь, последней) вещью. В журналах Traefik я вижу, что у letsencrypt.org проблемы с моим DNS.
Вот ошибка в журнале:
level=error
msg=Unable to obtain ACME certificate for domains "nginx2.mydomain.com":
unable to generate a certificate for the domains [nginx2.mydomain.com]:
error: one or more domains had a problem:
[nginx2.mydomain.com] acme: error: 400 :: urn:ietf:params:acme:error:dns :: DNS problem: NXDOMAIN looking up A for nginx2.mydomain.com
- check that a DNS record exists for this domain; DNS problem: NXDOMAIN looking up AAAA for nginx2.mydomain.com
- check that a DNS record exists for this domain
providerName=staging.acme
routerName=nginx2@docker
rule=Host(`nginx2.mydomain.com`)
ACME CA=https://acme-staging-v02.api.letsencrypt.org/directory
Я настроил DNS в Synology, и на моем маршрутизаторе Synology стал моим первым DNS-сервером. Когда я пингую nginx2.mydomain.com со своего компьютера, он возвращает IP-адрес контейнера DockerTraefik 192.168.1.14. Я считаю, что это правильное поведение.
Кроме того, когда я просматриваю свой файл acme.json (который был пуст), я вижу, что он заполнен сертификатом с надписью «статус»: «действителен» (на данный момент промежуточный этап, производство пусто). Я считаю, что это правильное поведение.
Я не уверен, что мне не хватает, но когда я перехожу на nginx2.mydomain.com, сертификат в браузере говорит:
Выдано: TRAEFIK DEFAULT CERT Выдано: TRAEFIK DEFAULT CERT
Я ожидаю, что там будет написано: Выдано: nginx2.mydomain.com Выдано: (STAGING)...
Вот мои цели:
- (готово) Получите доступ к моим контейнерам Docker по имени. пример: nginx.mydomain.com
- (готово) Доступ к моим контейнерам Docker без DNS (в случае возникновения проблем). например: 192.168.1.14:10080
- Браузер говорит «безопасно», когда я обращаюсь к своим контейнерам по имени.
- Возможно, позже я захочу открыть доступ к одному или двум из них извне, поэтому ключевым моментом является обеспечение легкого доступа к этой опции, но ATM я планирую использовать VPN для всего.
Проблемы, которые я решил на данный момент:
- Я не могу предоставить Traefik прямой доступ к 80/443, потому что NAS использует эти порты.
- Я поместил Traefik в сеть macvlan.
- Контейнеры не смогли пинговать своего родителя
- Добавление портов в стек (например: «Порты:/n — 180:80/n — 1443») позволило мне получить доступ к контейнеру напрямую через DNS (цель № 2), а также устранило проблему с пингом для родительского контейнера.