コミュニティソリューション

ZimaOS 手動 DNS:セルフホスト DNS の依存ループを回避する

A ZimaOS host used its own AdGuard container as the only manually configured DNS resolver, causing the AdGuard image update to fail when DNS disappeared.

結論:ZimaOSの唯一のDNSリゾルバーを、同じZimaOSホスト上で動作するAdGuardコンテナに依存させない

今回のアップデートが失敗した理由は明確です。ZimaOSは新しいAdGuardイメージを取得するためにDNSを必要としていましたが、設定されていた唯一のDNSサーバーが、再起動・置き換え中のAdGuardコンテナでした。これにより循環依存が発生します。2つ目のDNSフィールドがあれば可用性は向上しますが、アップデート対象のサービスにアップデートサーバーの名前解決を依存する設計にすべきではありません。

現在のZimaOSドキュメントでは、手動DNSサーバーフィールドは1つだけと記載されている

2026年9月版のZimaOSネットワーク設定ガイドでは、手動モードの項目としてIPアドレス、サブネットマスク、ゲートウェイ、そして単数形のDNSサーバーが説明されています。公開ガイドでは現在、GUIで複数のDNSエントリーを設定できるとは記載されていないため、2025年の機能リクエストが実装済みだと考えないでください。

ZimaOSホストには独立したリゾルバーを使用する

適切な構成は次のとおりです。

  • ZimaOSホスト → ルーター/ISP/Cloudflare/その他の独立したリゾルバー。
  • LANクライアント → フィルタリング用のAdGuard Home。
  • AdGuardのアップストリーム → 信頼できるリゾルバー。

これにより、AdGuardの再起動やアップグレード中も、ホストはDockerレジストリやリモートサービスの名前解決を継続できます。

AdGuard Homeハードウェアガイドではアプリの役割を説明しており、Pi-hole DNSガイドでも、クライアントのDNSフィルタリングとホストインフラストラクチャの依存関係を分離する同じ考え方が説明されています。

セカンダリDNSは必ずしも厳密なフェイルオーバーではない

多くのOSやリゾルバーは、2つ目のDNSサーバーを「1つ目が停止した場合のみ使う」のではなく、設定された複数のDNSサーバーに問い合わせる場合があります。そのため、すべてのクライアントにフィルタリングを適用する必要がある場合、クライアントにパブリックリゾルバーをセカンダリとして設定すると、一部の問い合わせがAdGuardを迂回する可能性があります。冗長性はフィルタリング層の背後に配置するか、独立したリゾルバーをインフラストラクチャホスト専用にしてください。

パブリックリゾルバーの参照先

Cloudflareは1.1.1.1リゾルバーのアドレスを公開しており、GoogleはGoogle Public DNSの設定方法を案内しています。プライバシー、フィルタリング、可用性の要件に合うものを使用してください。

ローカルDNSコンテナをアップデートする前の簡単なテスト

nslookup registry-1.docker.io
nslookup github.com

次に、AdGuardコンテナを一時的に停止し、ZimaOSホストから同じ名前解決を再度実行してください。DNSが利用できなくなる場合、ホストには依然として循環依存があり、次回のDNSコンテナのアップデートで問題が発生する可能性があります。