我有一个域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
通配符是不可能的,所以我决定使用不同的方法:
- 所有外部站点均托管在该
example.com
域上。 - 所有内部站点均托管在该
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。