当本地区域不匹配时,如何将本地区域的 DNS 请求转发到外部 DNS(BIND9)

当本地区域不匹配时,如何将本地区域的 DNS 请求转发到外部 DNS(BIND9)

我有一个域example.com,并使用 Azure DNS 来解析互联网上可见的所有主机名。我已将其定义mail.example.com为指向198.51.100.123,外部客户端可以毫无问题地解析它。

我的 LAN 上也使用example.com了 ,并使用 bind 解析所有本地 IP 地址,这对于本地主机名来说很有效。我的 DHCP 服务器也知道如何处理这个问题并正确更新区域文件。其他区域的所有 DNS 请求都会转发到 Cloudflare DNS。

我希望我的服务器使用本地名称服务器,如果它在本地区域文件中找不到条目,​​它应该联系 Azure 服务器并进行检查。当我将以下条目添加到我的区域文件时,它适用于这些主机名:

external-dns            A       1.1.1.1
vpn                     NS      external-dns
www                     NS      external-dns
ftp                     NS      external-dns

通配符在 Bind9 中不再起作用,因此我无法使用* NS external-dns。还有其他方法可以实现此目的吗?

答案1

使用response-policy区域而不是主区域example.com

当尝试解析主机名时,bind 将response-policy首先查看区域文件,如果找不到答案,它将继续查找。

以下是一个示例设置:

options {
    # Your normal options
    response-policy { zone "local_example_com"; };
};
zone "local_example_com" {
    type master;
    file "master/local_example.zone";
    allow-query {none;};
};

然后添加一个名为的区域文件,master/local_example.zone包含以下内容:

$TTL 24H
@    SOA LOCALHOST. named-mgr.example.com (1 1d 1h 30d 2h)
     NS  LOCALHOST.

host1.example.com     A   192.168.1.1
host2.example.com     A   192.168.1.2
host3.example.com     A   192.168.1.3
host4.example.com     A   192.168.1.4

当您尝试解析时host1.example.com,它将从区域获取答案response-policy,当您尝试解析时,mail.example.com它将使用名称服务器解析它example.com

答案2

通配符是不可能的,所以我决定使用不同的方法:

  1. 所有外部站点均托管在该example.com域上。
  2. 所有内部站点均托管在该int.example.com域上。

不会example.com发生任何变化,并且仍然在 Azure DNS 中可用(就像以前一样)。内部 Bind 服务器现在托管域int.example.com,DHCP 服务器也已更新为本int.example.com地域。

我希望我的内部网站能够通过 HTTPS 访问,因此我需要能够使用 LetsEncrypt 为域创建证书int.example.com。LetsEncrypt 无法访问我的内部服务,因此我必须恢复到 DNS 验证。

我将该int.example.com区域添加为 Azure DNS 中的子区域example.com。此区域不会有任何 DNS 条目,因为我们为此使用本地服务器。我们不想将任何内部信息暴露给外部 DNS 服务器。其唯一目的是 LetsEncrypt 的 DNS 验证,因此 AcmeSh 应该具有创建/删除 TXT 记录的正确凭据。我遵循本指南创建正确的凭据。我的设置是使用 Azure DNS,但它应该适用于任何支持子区域的 DNS。

相关内容