내 현재 네트워크:

내 현재 네트워크:

내 현재 네트워크:

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 브리지 네트워크(Trefik이 작동하려면)

DockerTraefik  - 192.168.10.2  (bridge-static)
DockerNginx1   - 192.168.10.10 (bridge-static)
DockerNginx2   - 192.168.10.20 (bridge-static)
  • Synology NAS에서 Docker를 실행하고 있습니다.
  • 내 Synology NAS(내장 DNS 앱)에서 DNS를 실행하고 있습니다. Pi-Hole, Unbound 및 Traefik이 공유 macvlan에서 실행되고 있습니다.
  • Traefik이 각 컨테이너에 연결할 수 있도록 브리지 네트워크를 만들었습니다.
  • Traefik 구성을 처리하기 위해 portainer의 각 컨테이너 스택에 레이블을 구성하고 있습니다.
  • 여기 튜토리얼을 따라하려고합니다.https://youtu.be/wLrmmh1eI94하지만 이것은 시놀로지가 아니었기 때문에 약간 다릅니다.
  • 사용하려는 도메인을 소유하고 있지만 해당 도메인을 처리하는 Synology DNS 서버를 가리킬 수 있는 한 그것이 필요하지 않다는 것을 알고 있습니다.

주요 차이점은 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

Synology에서 DNS를 설정했고 라우터가 Synology를 첫 번째 DNS 서버로 사용하도록 설정했습니다. 내 PC에서 nginx2.mydomain.com을 ping하면 DockerTraefik 컨테이너 192.168.1.14의 IP가 반환됩니다. 나는 이것이 올바른 행동이라고 믿습니다.

또한 내 acme.json 파일(비어 있음)을 보면 "status": "valid"(현재 준비 상태, 프로덕션은 비어 있음)라는 인증서로 채워져 있는 것을 볼 수 있습니다. 나는 이것이 올바른 행동이라고 믿습니다.

무엇이 누락되었는지 잘 모르겠지만 nginx2.mydomain.com을 탐색하면 브라우저의 인증서에 다음과 같이 표시됩니다.

발급처: TRAEFIK DEFAULT CERT 발급처: TRAEFIK DEFAULT CERT

발행처: nginx2.mydomain.com 발행처: (STAGING)...

내 목표는 다음과 같습니다.

  1. (완료) 이름으로 내 Docker 컨테이너에 액세스합니다. 예: nginx.mydomain.com
  2. (완료) DNS 없이 Docker 컨테이너에 액세스합니다(문제가 있는 경우). 예: 192.168.1.14:10080
  3. 이름으로 내 컨테이너에 액세스하면 브라우저에 "보안"이라고 표시됩니다.
  4. 나중에 그 중 하나 또는 두 개를 외부에 노출하고 싶을 수도 있으므로 해당 옵션을 쉽게 사용할 수 있도록 유지하는 것이 중요하지만 ATM은 모든 것에 VPN을 사용할 계획입니다.

지금까지 해결한 문제:

  1. NAS가 해당 포트를 사용하고 있기 때문에 Traefik에게 80/443에 대한 직접 액세스 권한을 부여할 수 없습니다.
    • Macvlan 네트워크에 Traefik을 넣었습니다
  2. 컨테이너가 상위 컨테이너를 핑할 수 없습니다.
    • 스택에 포트를 추가함으로써(예: "포트:/n - 180:80/n - 1443") DNS를 사용하여 컨테이너에 직접 액세스할 수 있었고(목표 #2) 상위 항목에 대한 핑 문제도 해결되었습니다.

관련 정보