
現在のネットワーク:
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 ブリッジ ネットワーク (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 が各コンテナに接続するためのブリッジ ネットワークを作成しました。
- Traefik 構成を処理するために、portainer で各コンテナのスタックにラベルを構成しています。
- 私はここのチュートリアルに従おうとしていますhttps://youtu.be/wLrmmh1eI94ただし、これは Synology 上のものではないため、若干異なります。
- 私が使用しようとしているドメインは私が所有していますが、そのドメインを処理する Synology DNS サーバーを指定できる限り、それは必要ないはずです。
主な違いは、Synology がすでに 80 と 443 を使用していることです。そのため、ポートの競合が発生しないように、Traefik を macvlan に配置するという解決策がありました。
ほとんどすべては機能していますが、この 1 つのこと (できれば最後) を理解するのに苦労しています。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 コンテナーの IP 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
- (完了) DNS なしで Docker コンテナにアクセスします (問題が発生した場合)。例: 192.168.1.14:10080
- 名前でコンテナにアクセスすると、ブラウザに「安全です」と表示されます。
- 後で 1 つまたは 2 つを外部に公開する可能性があるため、そのオプションを簡単に利用できるようにしておくことが重要ですが、現時点ではすべてに VPN を使用する予定です。
これまでに解決した問題:
- NAS がこれらのポートを使用しているため、Traefik に 80/443 への直接アクセスを許可することはできません。
- Traefikをmacvlanネットワークに配置しました
- コンテナは親にpingできませんでした
- スタックにポートを追加することで (例: 「Ports:/n - 180:80/n - 1443」)、DNS を使用してコンテナーに直接アクセスできるようになり (目標 #2)、親への ping の問題も修正されました。