Моя текущая сеть:

Моя текущая сеть:

Моя текущая сеть:

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)...

Вот мои цели:

  1. (готово) Доступ к моим контейнерам Docker по имени. например: nginx.mydomain.com
  2. (готово) Доступ к моим контейнерам Docker без DNS (в случае возникновения проблем). например: 192.168.1.14:10080
  3. Браузер выдает сообщение «безопасно», когда я обращаюсь к своим контейнерам по имени.
  4. Возможно, позже я захочу сделать один или два из них доступными для внешнего использования, поэтому важно сохранить эту возможность легкодоступной, но в любом случае я планирую использовать VPN для всего.

Проблемы, которые я решил на данный момент:

  1. Я не могу предоставить Traefik прямой доступ к 80/443, поскольку эти порты использует NAS.
    • Я поместил Traefik в сеть MacVlan
  2. Контейнеры не смогли пинговать своего родителя
    • Добавление портов в стек (например: «Порты:/n - 180:80/n - 1443») позволило мне получить доступ к контейнеру напрямую с помощью DNS (цель №2), а также решило проблему с пингом к родительскому объекту.

Связанный контент