我当前的网络:

我当前的网络:

我当前的网络:

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)
  • 我在 Synology NAS 上运行 Docker
  • 我在 Synology NAS(内置 DNS 应用程序)上运行 DNS,Pi-Hole、Unbound 和 Traefik 在共享 macvlan 中运行。
  • 我为 Traefik 创建了一个桥接网络,以连接每个容器。
  • 我正在 portainer 中每个容器堆栈上配置标签来处理 Traefik 配置。
  • 我正在尝试按照这里的教程进行操作https://youtu.be/wLrmmh1eI94但这不是在 synology 上,所以略有不同。
  • 虽然我确实拥有我尝试使用的域名,但我的理解是,只要我可以指向处理该域名的 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 ping nginx2.mydomain.com 时,它返回 DockerTraefik 容器的 IP 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. (完成)无需 DNS 即可访问我的 Docker 容器(以防出现问题)。例如:192.168.1.14:10080
  3. 当我通过名称访问我的容器时,浏览器显示“安全”。
  4. 我可能希望稍后将其中的一两个公开到外部,因此保持该选项易于获得是关键,但目前我计划对所有内容都使用 VPN。

到目前为止我已经解决的问题:

  1. 我无法让 Traefik 直接访问 80/443,因为 NAS 正在使用这些端口。
    • 我将 Traefik 放在 macvlan 网络中
  2. 容器无法 ping 其父容器
    • 通过向堆栈添加端口(例如:“端口:/n - 180:80/n - 1443”),我可以直接使用 DNS 访问容器(目标 2),并且还修复了父级的 ping 问题。

相关内容