我需要为一系列 Linux 容器运行本地 BIND DNS 服务器。假设区域是 example.com
我的基础架构中已经有一个 example.com 域,我想使用我的本地 DNS 服务器覆盖一些记录(它必须是 DNS 而不是本地主机)。
有没有办法告诉 BIND 检查我的本地 DNS 服务器,如果没有找到记录,请在另一台 DNS 服务器上查找同一区域的记录。
我曾尝试设置转发器,但我认为这仅适用于不同的区域而不是同一个区域。
有任何想法吗?
rpz
您可以使用允许覆盖通过绑定服务器查询的任何名称的响应策略区域(以下称为)。
路径指的是 Debian。
在options
部分中/etc/bind/named.conf.options
,添加:
options {
# Create a response-policy zone to allow overrides
response-policy { zone "rpz"; };
};
在中添加rpz
区域/etc/bind/named.conf.local
:
zone rpz {
type master;
file "/etc/bind/db.rpz";
allow-query { none; };
};
最后,rpz
区域文件/etc/bind/db.rpz
:
; BIND zone file for rpz zone
;
$TTL 600
@ SOA localhost. root.localhost. (
2017100300 ; Serial
86400 ; Refresh
10800 ; Retry
3600000 ; Expire
600 ; Negative Cache TTL
)
NS localhost.
google.com CNAME forcesafesearch.google.com.
example.com A 192.0.2.123
没有简单的方法可以做你想做的事。
对于繁琐的解决方案,您可以为要在父区域中覆盖的每个 DNS 名称定义一个区域文件,例如:
命名的.conf:
zone "foo.domain" {
type master;
file "foo.domain";
}
zone "bar.domain" {
type master;
file "bar.domain";
}
foo.domain:
foo.domain. SOA ...
NS foo.domain.
A 1.2.3.4
bar.domain:
bar.domain. SOA ...
NS foo.domain.
A 2.3.4.5
您也可以尝试使用绑定转发器。基本上,您的 DNS 服务器(如果它不知道答案)会向转发器请求 IP 解析。
IE:
# vi /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
listen-on { 127.0.0.1; 192.168.1.0/24; };
forwarders {
10.138.27.194;
};
};