如何解决本地未找到同一区域的DNS名称,但在另一个DNS服务器上存在的问题?

4
我需要运行一个本地的BIND DNS服务器来为一系列Linux容器提供服务。假设区域是example.com。
我的基础设施中已经有一个example.com域名,我想使用我的本地DNS服务器覆盖其中的一些记录(必须是DNS而不是本地主机)。
有没有一种方法告诉BIND检查我的本地DNS服务器,如果没有找到记录,则查找另一个DNS服务器上相同区域的记录。
我尝试过设置转发器,但似乎只适用于不同区域而不是同一区域。
有什么建议吗?
3个回答

5
您可以使用响应策略区(以下称为rpz),以覆盖通过您的bind服务器查询的任何名称。
路径是指Debian。
选项部分,即/etc/bind/named.conf.options中添加:
options {
    # Create a response-policy zone to allow overrides
    response-policy { zone "rpz"; };
};

/etc/bind/named.conf.local中添加rpz区域:
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

4

很遗憾,要实现你想要的功能没有简单的方法。

如果你愿意费点儿功夫,可以为你想要覆盖的每个DNS名称在父域中定义一个区域文件,例如:

named.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

1
此外,您可以尝试使用绑定转发器。基本上,如果您的DNS服务器不知道答案,它将向转发器请求IP解析。

I.e.:

# 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;
      };
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接