我见过的每个消费级网关都托管自己的 DNS 服务器并告知 DHCP 客户端使用它。我已经养成了用 OpenDNS/Google/等覆盖它们的习惯,因为这些 DNS 服务器往往会无缘无故地停止工作。
我的问题是,制造商为什么要添加这种通常不起作用的“功能”呢?我的猜测是:
- 因此用户可以为局域网上的机器注册主机名。
- 缓存。
这两个似乎都不够有说服力,但我不是网络专业人士,所以我可能忽略了一些东西。如果网关告诉 DHCP 客户端使用网关使用的相同 DNS 服务器,这似乎更有意义。
答案1
家庭网关最初在添加 DNS 内容服务器之前就添加了 DNS 代理服务器(后者是在网关上定义主机名到 IP 地址映射的能力)。
他们之所以添加充当 DNS 代理服务器的功能,是为了防止 WAN 接口重新编号时 DNS 中断。如果网关的 WAN 接口动态地被告知要使用的公共 DNS 服务器地址列表(通过 DHCP、PPPoE、PPPoA 等),那么该列表可能会在 DHCP 续订时或 PPP[oE|oA] 链接重新协商时发生变化。如果旧的 DNS 服务器列表在新连接上不再有效/可访问,则无法及时将该更改传达给您的 LAN 客户端。DHCP 无法让服务器立即将配置更新“推送”给客户端。它必须等到客户端需要续订其 DHCP 租约时,这可能是几小时或几天后,具体取决于 DHCP 服务器的配置方式。
因此,通过告诉所有客户端向网关发送 DNS 查询,网关可以始终确保它们到达当前正确的 DNS 服务器,无论 ISP 更改该列表的频率如何。
遗憾的是,市面上有许多廉价/低劣/漏洞百出的消费者家庭网关无法正确实现这一点,因此这项旨在提高 DNS 可靠性的功能实际上却起到了相反的作用。这听起来是你最熟悉的体验。
答案2
这样做主要是为了让 DHCP 客户端能够通过名称而不是 IP 地址来引用其 LAN 上的其他机器。如果您只是传递某些外部 DNS 服务器(如 Google 或 OpenDNS)的名称或 IP 地址,您将失去此功能。
这种功能缺失可以通过特定于操作系统的服务(如适用于 Windows 和 Linux 的 SAMBA 或适用于 Mac 的 Bonjour)部分弥补。但本地 DNS 对 LAN 上的所有机器都同样有效。
该功能可以轻松扩展到静态 IP 地址(例如打印机),这样您实际上不需要记住网络上任何东西的 IP 地址。
此外,随着网络规模的扩大和/或网关上连接的其他 LAN 的存在,本地 DNS 的便利性也迅速增长。例如,我家和大学实验室之间有一个永久的 OpenVPN 连接,两者之间的用户总数超过一百,包括我女儿的 Xbox 站。
不引人注目?当然。不方便?同样肯定不是。
答案3
路由器倾向于使用内部 DNS 服务器在同一网络上进行名称解析,因为如果您从 computer2 ping computer1,则只有路由器会知道正确的 IP。(MariusMatutiae 抢先一步)
它还将像那里的其他 DNS 服务器一样运行(包括您使用的公共服务器),并将开始转到其他 DNS 服务器,直到找到知道 IP 地址和位置的服务器。
这也是同样的原因,如果您在域上运行跟踪路由,它会在到达托管网站的服务器之前与多台服务器进行通信。
答案4
我同意之前关于 DHCP/动态 DNS 的回答。这对某些人来说很重要(我经常在内部使用 DNS)。因此,将此功能作为选项是有意义的,这会使路由器作为产品更有价值。
它还可以在互联网连接中断时提供 DNS。同样,我需要它,这样在断网期间我仍可以使用我的网络。
我觉得 DNS 缓存是一个很大的优势。它使事情变得非常快捷。它易于实现,开销低,并且使事情变得更快。为什么不使用它呢?