我正在为一个朋友构建一个黑盒 NAS,它将运行一些 Docker 容器,其中包含 NextCloud 和其他一些服务。我所说的黑匣子的意思是,它应该以不需要配置的方式进行设置,只需将其插入路由器即可工作。
我想使用通配符域设置 dnsmasq,该域应将所有请求重定向到反向代理,然后该代理将在内部将请求重定向到正确的服务。但这意味着 DNS 需要指向其自身,这是有问题的,因为这台机器是通过 DHCP 从路由器获取其 IP。
地址=/mydomain.com/<host_ip>
我当前唯一的想法是在网络在线时运行 systemd 服务,然后使用主机当前的 IP 更新conf文件,但这看起来很hacky。有没有办法用 dnsmasq 本身来自动执行此操作?
(我的回答反映了典型的SOHO环境)
如果客户端至少需要进行少量配置(如果我们还包括路由器),则无法执行此操作,因为您需要将客户端计算机的请求定向到正确的 IP 地址,NextCloud 等服务将在该地址运行。
由于您朋友的 DHCP 服务已经有一个或多个 DNS 服务器条目(默认情况下)对应于 ISP 的递归 DNS 服务器之一,因此您需要否决这一机制。
我可以看到您希望通过零接触配置来实现此服务,但如果您使用本地 DNS 服务器,那么您至少必须设置一个固定 IP 地址,该地址在路由器上的 DHCP 设置中引用。
我建议执行以下操作之一:
-运行本地递归 DNS 服务器,添加区域 mydomain.com,设置指向反向代理 IP 地址的 A 记录,并在路由器上设置此 DNS 服务器。(在这种情况下,您将通过客户端的微小配置完全控制 DNS 设置,但需要做更多的工作和责任,因为这还必须回复任何与 Web 相关的 DNS 查询。
-修改客户端计算机上的主机文件,您可以在其中添加每个子域的目标 IP 地址(反向代理的 IP)条目。(我会在小型环境中推荐此方法)
您可以通过运行从 FTP 拉取主机文件的启动脚本来使此方法更加优雅,这样您就可以在更新域映射时实现集中式解决方案。)脚本必须放置在每个客户端设备上,这在移动设备上可能很麻烦。
正如您所看到的,您需要考虑责任和客户端配置来找到正确的解决方案,但它们都不涉及客户端的 0% 配置。