
Моя текущая сеть:
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 (который был пуст), я вижу, что он был заполнен сертификатом, который говорит "status": "valid" (на данный момент промежуточный, производственный пустой). Я считаю, что это правильное поведение.
Я не уверен, что я упускаю, но когда я перехожу на nginx2.mydomain.com, сертификат в браузере говорит:
Выдано: TRAEFIK DEFAULT CERT Выдано: TRAEFIK DEFAULT CERT
Я ожидаю, что там будет написано: Выдано: nginx2.mydomain.com Выдано: (STAGING)...
Вот мои цели:
- (готово) Доступ к моим контейнерам Docker по имени. например: nginx.mydomain.com
- (готово) Доступ к моим контейнерам Docker без DNS (в случае возникновения проблем). например: 192.168.1.14:10080
- Браузер выдает сообщение «безопасно», когда я обращаюсь к своим контейнерам по имени.
- Возможно, позже я захочу сделать один или два из них доступными для внешнего использования, поэтому важно сохранить эту возможность легкодоступной, но в любом случае я планирую использовать VPN для всего.
Проблемы, которые я решил на данный момент:
- Я не могу предоставить Traefik прямой доступ к 80/443, поскольку эти порты использует NAS.
- Я поместил Traefik в сеть MacVlan
- Контейнеры не смогли пинговать своего родителя
- Добавление портов в стек (например: «Порты:/n - 180:80/n - 1443») позволило мне получить доступ к контейнеру напрямую с помощью DNS (цель №2), а также решило проблему с пингом к родительскому объекту.