配置 Bind9 以尝试 NXDOMAIN 上的下一个转发器

配置 Bind9 以尝试 NXDOMAIN 上的下一个转发器

我正在尝试在我的计算机上配置 Bind9 服务器,以尝试允许解析器统一解析地址,因为我本地网络上的 DNS 服务器没有为本地网络以外的任何内容设置转发器或根提示(这 100% 超出了我的控制范围)。实际上,在本地网络上,我只能解析域example.com(及其子域)上的名称。

但是,网络确实能够通过 HTTP 代理服务器访问互联网,并且我已经设法设置了一个 DNS-over-HTTPS 存根服务器,以通过此代理解析网络外部的域。

诀窍是以某种方式让我的系统解析器解析名称,而不管它们的区域位于何处。

更糟糕的是,我所在的本地网络正在使用“分区”DNS 策略,其中一些子域example.com只能从本地网络解析,而另一些子域则从互联网解析(需要我通过 HTTP 代理才能访问它们)。所以我认为我不能只根据域名将查询转发到一个转发器。

我以为可以通过在模式下设置 Bind9forward-only并为其提供两个转发器(一个 IP 用于内部网络上的 DNS,另一个是本地存根服务器)来实现这一点,并认为有一种方法可以配置它,以便在无法使用第一个转发器解析名称时移动下一个转发器。但是,我不断收到 NXDOMAIN 答案,而我非常清楚这些域存在于特定 DNS 服务器的区域中,这让我相信,如果一个转发器提供 NXDOMAIN,Bind9 就不会尝试两个转发器(因为 Bind9 无法做到这一点,或者我配置错误)。

好的,这是我的设置。

/etc/bind/named.conf

options {
        directory "/var/cache/bind";

        forwarders {
                // resolved, http_dns_proxy
                127.0.0.53; 127.0.0.4;
        };

        forward only;
        listen-on port 53 {127.0.0.1;};
        querylog yes;


        auth-nxdomain no;    # conform to RFC1035
};

/etc/resolv.conf

nameserver 127.0.0.1
search example.com

http_dns_proxy像这样运行:

sudo ./https_dns_proxy -t http://internal-http-proxy.example.com:3128 -a 127.0.0.4 -p 53

systemd-resolved正在监听 127.0.0.53:53 并向其从 DHCP 中提取的 DNS 服务器发送查询。

好吧,我知道这听起来很疯狂,但是几乎有效。当所有程序都在运行时,我可以执行dig www.google.comdig internal.example.com,前者通过解析http_dns_proxy,后者通过我的网络 DNS 服务器解析,但两者都通过 Bind9。问题非常不一致。一半的时间它会工作,另一半的时间它开始只使用其中一个转发器来解析名称(如果它无法解析,则给我 NXDOMAIN),直到我刷新 Bind9 缓存。

所以我想问您:有没有办法配置 Bind9,以在出现 NXDOMAIN 时强制其选择列表中的下一个转发器?如果没有,是否有可以实现的 DNS 实现?

笔记:我完全清楚我所尝试做的事情并不符合 DNS 的设计方式(或者说不应该用于此)。

相关内容