Назад | Перейти на главную страницу

Подавить раздел полномочий BIND на полномочном сервере с отключенной рекурсией

Я использую авторитетный сервер с отключенной рекурсией для хостов вне моей сети в BIND 9.11.3. При запросе доменов, не находящихся в ведении сервера, с хоста за пределами моей сети, я не получаю ответа и список корневых серверов в разделе полномочий. Я понимаю, почему это происходит, и мне интересно, можно ли полностью отключить раздел полномочий. Есть ли вариант, похожий на минимальные ответы который не вернет никаких авторитетных данных, когда рекурсия недоступна?

Пример раскопок:

; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> @NS google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6847
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 5ed7760df1d65f05baba487c5b75a318b3065456b81ca133 (good)
;; QUESTION SECTION:
;google.com.                        IN      A

;; AUTHORITY SECTION:
.                   518400  IN      NS      D.ROOT-SERVERS.NET.
.                   518400  IN      NS      F.ROOT-SERVERS.NET.
.                   518400  IN      NS      B.ROOT-SERVERS.NET.
.                   518400  IN      NS      L.ROOT-SERVERS.NET.
.                   518400  IN      NS      I.ROOT-SERVERS.NET.
.                   518400  IN      NS      A.ROOT-SERVERS.NET.
.                   518400  IN      NS      E.ROOT-SERVERS.NET.
.                   518400  IN      NS      C.ROOT-SERVERS.NET.
.                   518400  IN      NS      M.ROOT-SERVERS.NET.
.                   518400  IN      NS      H.ROOT-SERVERS.NET.
.                   518400  IN      NS      K.ROOT-SERVERS.NET.
.                   518400  IN      NS      G.ROOT-SERVERS.NET.
.                   518400  IN      NS      J.ROOT-SERVERS.NET.

;; Query time: 36 msec

Мои варианты выглядят так:

options {
        listen-on { any; };
        directory "/var/cache/bind";
        allow-recursion { acls; };

        rate-limit {
                responses-per-second 10;
                exempt-clients { acls; };
                window 5;
        };

        allow-query-cache { any; };
        allow-query { any; };
        allow-update { none; };
        dnssec-enable no;
        dnssec-validation no;
        minimal-responses yes;
        forwarders {
                208.67.222.222;
                208.67.220.220;
        };
};

Я провел небольшое тестирование и считаю, что ваша проблема связана со следующей строкой:

    allow-query-cache { any; };

Ваша конфигурация запрещает общедоступную рекурсию, но по-прежнему разрешает доступ к кешу. Обычно удаленный клиент получает rcode REFUSED когда рекурсия не включена, но поскольку доступ к кэшу был явно разрешен, клиент получает наиболее конкретный ответ, который возможен из кеша, который не содержит этого ответа.

Мой специалист по DNS рекомендовал бы отключить рекурсию + кеширование на авторитетном сервере во всех случаях, когда в этом нет явной необходимости. Если вы уверены, что вам необходимо сохранить эту функциональность, то лучше всего применить один и тот же ACL к обоим. (или просто удалите allow-query-cache в целом, поскольку по умолчанию используется значение allow-recursion)

Я бы не стал рассматривать то, что вы описываете нормальным поведением для BIND9 (он определенно не ведет себя так с конфигурацией по умолчанию), однако я почти уверен, что понимаю, что его вызывает.

На вашем официальном сервере также включена рекурсия (не обязательно хорошая идея), но заблокирована (лучше), однако вы специально разрешаете всем доступ к уже кешированный полученные результаты.

Если вы удалите allow-query-cache { any; };, он должен ответить REFUSED (как и ожидалось).