我可以将内部 DNS 请求路由到另一台服务器吗?

网络工程 路由 路由器 dns
2022-02-16 10:18:14

我有一堆内部计算机,访问特定的 DNS 服务器(内部服务器)。我想设置一些冗余,以防 DNS 服务器出现故障,并在路由器级别快速设置路由,以将任何发往 DNS 服务器(10.0.1.2)的流量转发到路由器(8.8.8.8)等级。那可能吗?我正在使用 Watchguard,但我不一定要寻找路由器特定的答案。

例如 -

客户端向路由器发送 DNS 请求10.0.1.2 ,看到这个,然后重新路由到8.8.8.8而不是10.0.1.2

4个回答

您通过 DHCP 将备用 DNS 服务器地址分发给您的端点。这就是它的完成方式。不应涉及路由器。

如果要转换网络地址,则称为 NAT。大多数人使用带有 NAT 的源翻译,但您也可以使用目标翻译。这可以通过一些供应商来完成。

您所描述的问题是,如果发出 DNS 请求的主机与 DNS 服务器位于同一网络上,那么流量将永远不会通过路由器,因此永远不会被转换。

此外,在使用 NAT 时,您将始终进行转换,或者在主 DNS 服务器出现问题时需要手动配置它。更好的方法是在主机中分配多个 DNS 服务器,大多数主机操作系统都允许这样做。它可以在每台主机上手动完成,或者如果这是主机的寻址方式,则可以通过 DHCP 完成。

要执行这样的翻译,需要注意一些事项

  1. 路由器需要具有适当灵活的 NAT 实现。
  2. 流量需要实际到达路由器
  3. 返回的流量需要通过同一个路由器返回,这样才能正确地进行反向转换。

第 1 点对于 Linux NAT 来说当然是正确的,我无法评论其他实现。

如果 DNS 服务器与客户端位于不同的子网上,则第 2 点很好,但如果它们位于同一子网上,则需要一些技巧。可以有一个脚本让路由器接管 DNS 服务器的 IP 地址,但是当 DNS 服务器恢复运行时,您需要处理潜在的 IP 冲突。

第 3 点意味着你需要考虑你的路由。如果从客户端机器到互联网只有一条路径并且返回的路径相同,那么你就可以了。否则你可能会遇到问题。

总体而言,虽然当然可以实现这似乎是一个坏主意。更明智的做法是只拥有两个 DNS 服务器,然后适当地设置“主要”和“次要”DNS 服务器设置。

完成此任务的最佳方法是创建另一个内部 DNS 服务器并确保主 DNS 服务器和辅助 DNS 服务器同步。

并在客户端工作站的网络适配器属性中配置主 DNS 服务器 IP 地址和辅助 DNS 服务器 IP 地址

如果主 DNS 服务器出现故障,辅助 DNS 服务器将承担工作量。客户端工作站将在工作站上配置的辅助 IP 地址上发送递归查询。