dnsmasq:一个域名,一半是私人的,一半是公共的?

dnsmasq:一个域名,一半是私人的,一半是公共的?

我们的内部办公网络具有与我们公司在线状态相同的顶级域名,例如ourdomain.com

对于外部世界,任何公共主机(例如,,,blog.ourdomain.com等等)都配置在我们的域名托管商 AWS Route 53 的 DNS 中。download.ourdomain.comwww.ourdomain.com

对于办公室内联网,我们运行一个简单的dnsmasqDHCP 和 DNS(和 VPN,但那是另一回事);办公室内的内部服务器和台式机(例如具有 DHCP 地址的笔记本电脑)的名称解析工作正常。该dnsmasq实例不向公众开放。

到目前为止,我们dnsmasq通过维护一个文件来讲述我们的公共服务器,该文件由一行/etc/hosts.dnsmasq包含在主文件中,类似于众所周知的文件,并具有以下示例内容:/etc/dnsmasq.confaddn-hosts=/etc/hosts.dnsmasq/etc/hosts

12.34.56.78    blog
12.34.56.79    download
12.34.56.80    www

我们手动维护此文件,这变得很麻烦。我们希望摆脱它并改进我们的dnsmasq设置,以便它执行以下操作:

  1. 如果dnsmasq有“自己的”DNS信息(例如DHCP或与主机名关联的静态IP地址)用于来自内部办公网络的查询,则提供该信息
  2. 否则,查询公共 DNS,并将结果转发回内联网上的提问者

问:这可以用 来实现吗dnsmasq?它是否需要办公网络的子域名?(如果可能的话,我们希望避免这种情况)如果需要,该怎么做?我觉得我肯定已经看过文档dnsmasq一百遍了;它们很棒,但我可能只是在看解决方案,而没有看到它。

另外:据我理解,这样的设置不同于裂脑DNS,因为我们不使用一个名称服务器根据查询的来源返回不同的响应,而是对同一个域使用一个公共名称服务器和一个私有名称服务器。

这是常见设置吗?如果不是,当组织在公共和私人存在中使用相同的 TLD 时,是否有一种规范的方法来配置其 DNS?

答案1

这是一个常见的设置吗?

我在 ServerFault 上看到过多个问题,要求进行与您想要的类似的设置,所以我猜这是一种常见的设置。但由于这实际上是不可能的,我会说这是管理员的常见设置,他们并不真正了解 DNS 的工作原理。(抱歉,我不想冒犯您 - 也不想冒犯这个论坛上的任何人)。

我已经为这个问题提供了一个可能的答案,即一个服务器同时托管内部 DNS 服务器和外部 DNS 服务器这里。但是这个答案使用 BIND 作为 DNS 服务器,而不是 dnsmasq。

这可行吗(使用 dnsmasq)?

如前所述,不可能对给定区域具有权威性如果您自己没有答案,请将查询转发到其他名称服务器。我在另一个问题中提供的答案是一种解决方法。

当组织对公共和私人存在使用相同的域名时,是否有一种规范的方法来配置他们的 DNS?

我想说他们要么在内部使用子域,要么使用拆分 DNS。需要同时存在于内部和外部视图中的记录需要在两个区域中复制。这可以使用自动化(例如 Ansible)来简化。

答案2

我不确定当最初提出这个问题时这是否可行。然而,这似乎仍然是一个常见问题,似乎无处可回答,而 dnsmasq 可以完美地做到这一点!它甚至在某种程度上是默认的。

只需看一下这个最小配置:

domain=example.com

listen-address=192.168.120.1
interface=eth0
dhcp-range=192.168.120.10,192.168.120.20,12h

hostA如果您在 中有一个本地主机/etc/hosts,一个名称为 的 DHCP 客户端hostB和一个hostCdnsmasq 不知道但其上游服务器知道的服务器,则所有服务器都将正确解析: hostAhostB在本地解析,dnsmasq 向上游询问hostC然后也会解析。

这对于家庭网络中的小型分割 DNS 设置非常有用:只需让 dnsmasq 管理您的网络内主机并添加也应在外部解析到您的全局可访问 DNS 的主机。

请注意,大多数指南都会添加local=/example.com/配置。这实际上会阻止 dnsmasq 向上游服务器请求此域。因此在这种情况下,您不想使用此选项

您也可以在 OpenWRT 中配置此项。只需将该Local Server字段保留为空即可。

相关内容