我有一个私有网络,其中有几台 OpenWrt 路由器连接一些本地子网。我在几台路由器上使用 NAT,以便通过不同的提供商访问互联网。
我运行本地 DNS 递归缓存解析器 (Unbound),它为所有本地子网上的所有客户端提供服务。
每个路由器都会处理其本地子网的 DHCP 并分配主机名。但所有子网都在 my-example.com 下。(因此路由器 1 的客户端可能是“client1.router1.my-example.com”)
我希望所有路由器都将其 DHCP 客户端报告给提供 DNS 的主路由器,以便任何本地子网上的任何客户端都可以通过名称访问任何其他客户端。(路由已经正常工作;我可以通过 IP 地址从任何客户端访问任何客户端。)
似乎我需要在主 DNS 机器上设置一些类似私有动态 DNS 的东西,但我找不到合适的包。
如何才能使我的所有本地 DHCP 客户端名称(来自不同路由器下的所有子网)可供本地网络中的所有其他客户端使用?
答案1
您可以保持 DNS 原样,但配置中央 Unbound 服务器以根据后缀将请求转发到正确的名称服务器。这可以使用forward-zone
或stub-zone
块来完成。(两者的操作非常相似,但在您的情况下stub-zone
更正确,因为您将其直接指向权威服务器,而forward-zone
预期指向另一个递归解析器。)例如:
stub-zone:
name: "router1.my-example.com."
stub-addr: <IPv4 address of router1>
stub-addr: <IPv6 address of router1>
stub-first: yes
(在公共 DNS 中,您通常会设置子域名代表团使用NS
记录 - 这将告诉解析器例如<foo>.router1.my-example.com
由不同的服务器处理。)
或者会可以设置动态 DNS,以便路由器直接在中央服务器上注册记录,但这可能需要切换到完全不同的软件。在中央服务器端,您可能希望用 BIND9 或其他可以托管区域并支持 RFC 2136“DNS 更新”协议的软件替换 Unbound,而在路由器上,您需要一个知道如何提交此类更新的 DHCP 服务器。
我不确定 OpenWRT 是否还有其他选项,但我怀疑路由器目前正在运行 Dnsmasq,它可以处理动态主机名,因为这一切都在同一个进程中——同一个程序处理 DNS 和 DHCP。但它不知道如何在其他地方提交 DNS 更新。您需要使用 Dnsmasq--dhcp-script
才能使其nsupdate
以正确的参数运行。(ISC DHCP 服务器支持 DDNS 并且经常与 BIND 配对,但不再维护。)