
Minha rede atual:
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)
Rede Docker Bridge (para que o Traefik funcione)
DockerTraefik - 192.168.10.2 (bridge-static)
DockerNginx1 - 192.168.10.10 (bridge-static)
DockerNginx2 - 192.168.10.20 (bridge-static)
- Estou executando o Docker no meu Synology NAS
- Estou executando DNS em meu Synology NAS (o aplicativo DNS integrado). Pi-Hole, Unbound e Traefik estão sendo executados em um macvlan compartilhado.
- Criei uma rede bridge para o Traefik se conectar a cada contêiner.
- Estou configurando Labels na pilha de cada contêiner no portainer para lidar com a configuração do Traefik.
- Estou tentando seguir o tutorial aquihttps://youtu.be/wLrmmh1eI94mas isso não estava em uma sinologia, então é um pouco diferente.
- Embora eu seja o proprietário do domínio que estou tentando usar, entendo que isso não deveria ser necessário, desde que eu possa apontar para meu servidor DNS Synology que lida com esse domínio.
A principal diferença é que o Synology já está usando 80 e 443 então minha solução foi colocar o Traefik em um macvlan para não ter conflitos de porta.
Quase tudo funcionou, mas estou tendo problemas para descobrir essa (espero que a última). Nos logs do Traefik posso ver que letsencrypt.org está tendo problemas com meu DNS.
Aqui está o erro do log:
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
Configurei o DNS no Synology e configurei meu roteador para ter o Synology como meu primeiro servidor DNS. Quando faço ping em nginx2.mydomain.com do meu PC e ele retorna o IP do contêiner DockerTraefik 192.168.1.14. Acredito que este seja o comportamento correto.
Além disso, quando olho meu arquivo acme.json (que estava vazio), vejo que ele foi preenchido com um certificado que diz "status": "válido" (por enquanto, a produção está vazia). Acredito que este seja o comportamento correto.
Não tenho certeza do que estou perdendo, mas quando navego para nginx2.mydomain.com, o certificado no navegador diz
Emitido para: TRAEFIK DEFAULT CERT Emitido por: TRAEFIK DEFAULT CERT
Espero que diga: Emitido para: nginx2.mydomain.com Emitido por: (STAGING)...
Aqui estão meus objetivos:
- (concluído) Acesse meus contêineres Docker por nome. ex: nginx.meudominio.com
- (concluído) Acesse meus contêineres Docker sem DNS (em caso de problemas). ex: 192.168.1.14:10080
- O navegador diz "seguro" quando acesso meus contêineres pelo nome.
- Posso querer expor um ou dois deles externamente mais tarde, portanto, manter essa opção facilmente disponível é fundamental, mas ATM pretendo usar uma VPN para tudo.
Problemas que resolvi até agora:
- Não posso dar ao Traefik acesso direto ao 80/443 porque o NAS está usando essas portas.
- Coloquei o Traefik em uma rede macvlan
- Os contêineres não conseguiram executar ping no pai
- Ao adicionar portas à pilha (ex: "Portas:/n - 180:80/n - 1443"), isso me permitiu acessar o contêiner diretamente com o DNS (meta nº 2) e também corrigiu o problema de ping para o pai.