Bind9-将特定记录转发到另一个名称服务器

Bind9-将特定记录转发到另一个名称服务器

我有一个主区域 (example.com) 和几个属于该区域的 A 记录 (server1.example.com、server2.example.com 等)。这些记录解析为内部托管的服务器。我想将另一条记录 (server3.example.com) 解析为外部名称服务器 (cloudflare 或 google)。我找到了很多关于如何对子域执行此操作或如何为某些外部域创建覆盖的示例,但找不到这种特定情况的示例。

为了提供更多背景信息,我这样做的唯一原因是将 server3.example.com 域重定向到特定的 URL。

我知道 Bind9 无法做到这一点,但我的公共名称服务器可以很容易地做到这一点。我的公共名称服务器正确地提供了此重定向,但这对我的内部客户端不起作用。

我目前正在使用内部 apache 服务器来创建重定向,但我想简化这个过程并消除 apache。

谢谢!

答案1

首先,DNS 无法重定向到 HTTP URL,因为这总是需要 Web 服务器。

DNS 服务器仅提供 DNS 记录。

其他供应商可能会使用他们的 DNS 控制面板来允许他们的客户拥有一个简单的界面来设置伪 DNS 记录来管理电子邮件别名和/或 HTTP 重定向,但这意味着这些供应商仍然运行实现 SMTP 的电子邮件服务器或 Web 服务器,分别使用 HTTP 协议来实现电子邮件转发或 Web 浏览器重定向。

笔记:通常,这种重定向服务不会重定向 HTTPS Web 请求,这在您使用 HSTS 等时可能会出现问题。

另请参阅此处的我的解释:如何使用 TXT 记录支持 HTTPS? (问答的标题已经暗示了这种困惑)


我认为您的 DNS 提供商的重定向服务只会在他们自己的 DNS 服务器中查找。因此,您需要首先确保您的域example.com或最好是server3.example.com子域的 DNS 区域存在,以便您为重定向创建特殊用途的伪 DNS 记录。

我不确定我是否正确理解了你的问题,也不确定这是否已经是事实。


然后,您可以在实际/内部权威 DNS 中创建一个记录,直接指向该提供商使用的重定向服务器的 IP 地址:

server3.example.com.  IN A 192.168.1.2  

或者(回答你的字面问题)DNS有三种方法来“重定向/转发”DNS 记录:

  • CNAME 一个名称到另一个名称的别名:DNS 查找将继续通过使用新名称重试查找。

      server3.example.com. IN CNAME redirects.provider.example.net.
    
  • DNAME名称及其所有子名称的别名,与 CNAME 不同,CNAME 只是确切名称的别名。与 CNAME 记录一样,DNS 查找将通过使用新名称重试查找来继续。

    server3.example.com. IN DNAME redirects.provider.example.net.
    
  • NS委派 DNS 区域使用给定的权威名称服务器。

    server3.example.com. IN NS ns1.provider.example.net.
    server3.example.com. IN NS ns2.provider.example.net.
    

答案2

@HBrujin 的回答是准确的,但可能并不像它应该的那样具有启发性和完整性。

但很难找到这种特殊情况的例子。

....因为 DNS 并非设计为以这种方式工作。server3.example.com 不可能由与 *.example.com 不同的 DNS 服务器处理。

(cloudflare 或 google)

如果您知道 cloudflare 或 google 用来描述服务位置的名称,那么您应该向 example.com 区域添加 CNAME 记录,例如

server3.example.com CNAME host1234.cloudflare.net

现在,当您https://server3.example.com在浏览器中输入内容时,它会找到 CNAME 记录,然后查找链中的下一个记录(并不断重复),直到找到 IP 地址(A 或 AAA)。但是,当它尝试打开到找到的端点的连接时,它会首先发送“server3.example.com”的 SNI 请求,随后的 HTTP 请求将包含标头“Host: server3.example.com”。

值得注意的是,有时我们想要向不同位置的客户端显示不同的 DNS 信息。在单个主机上,您可以通过在 hosts 文件(Linux/Unix/MacOS 上的 /etc/hosts,MS-Windows 上的 C:\Windows\sytem32\drivers\etc\hosts)中添加记录来覆盖 DNS 中的信息。要干扰大量机器的 DNS(在您控制的网络内),dnsmasq(替代 Bind)很有用。

相关内容