我们的内部办公网络具有与我们公司在线状态相同的顶级域名,例如ourdomain.com
。
对于外部世界,任何公共主机(例如,,,blog.ourdomain.com
等等)都配置在我们的域名托管商 AWS Route 53 的 DNS 中。download.ourdomain.com
www.ourdomain.com
对于办公室内联网,我们运行一个简单的dnsmasq
DHCP 和 DNS(和 VPN,但那是另一回事);办公室内的内部服务器和台式机(例如具有 DHCP 地址的笔记本电脑)的名称解析工作正常。该dnsmasq
实例不向公众开放。
到目前为止,我们dnsmasq
通过维护一个文件来讲述我们的公共服务器,该文件由一行/etc/hosts.dnsmasq
包含在主文件中,类似于众所周知的文件,并具有以下示例内容:/etc/dnsmasq.conf
addn-hosts=/etc/hosts.dnsmasq
/etc/hosts
12.34.56.78 blog
12.34.56.79 download
12.34.56.80 www
我们手动维护此文件,这变得很麻烦。我们希望摆脱它并改进我们的dnsmasq
设置,以便它执行以下操作:
- 如果
dnsmasq
有“自己的”DNS信息(例如DHCP或与主机名关联的静态IP地址)用于来自内部办公网络的查询,则提供该信息 - 否则,查询公共 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
和一个hostC
dnsmasq 不知道但其上游服务器知道的服务器,则所有服务器都将正确解析:
hostA
并hostB
在本地解析,dnsmasq 向上游询问hostC
然后也会解析。
这对于家庭网络中的小型分割 DNS 设置非常有用:只需让 dnsmasq 管理您的网络内主机并添加也应在外部解析到您的全局可访问 DNS 的主机。
请注意,大多数指南都会添加local=/example.com/
配置。这实际上会阻止 dnsmasq 向上游服务器请求此域。因此在这种情况下,您不想使用此选项。
您也可以在 OpenWRT 中配置此项。只需将该Local Server
字段保留为空即可。