如何禁用 bind9 的递归并仅对 DNS 查询进行转发?

如何禁用 bind9 的递归并仅对 DNS 查询进行转发?

我正在学习如何配置 DNS 服务器。我的第一个任务是设置本地转发服务器 - 执行不是执行递归查询但将其转发到其他公共开放 DNS。

好的,这是我的/etc/bind/named.conf.options

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

    recursion no;
    allow-query { localhost; };

    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
    forward only;

    dnssec-enable yes;
    dnssec-validation yes;

    auth-nxdomain no;    # conform to RFC1035
    listen-on port 53 {
        127.0.0.1;
        192.168.1.33;
    };
    listen-on-v6 { any; };
};

但是当我发出

dig askubuntu.com

它返回:

...
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 57563
...
;; WARNING: recursion requested but not available
...
;; SERVER: 127.0.0.1#53(127.0.0.1)
...

据我了解,dig 应该对本地进行 DNS 查询绑定实例,它应该将该请求转发到 8.8.8.8 并返回答案。

然而它抱怨说递归不可用。但我没有请求它。

如何解决这个问题?谢谢。

答案1

对此有一个很好的讨论https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-caching-or-forwarding-dns-server-on-ubuntu-14-04

你所做的基本上是正确的,只是你需要设置“递归是”,即使你的 DNS 设置要求你的服务器是仅转发服务器。这似乎违反直觉,但这就是处方的方式。这是一个示例配置:

acl goodclients {
        192.0.2.0/24;
        localhost;
        localnets;
};

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

        recursion yes;
        allow-query { goodclients; };

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
        forward only;

        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

相关内容