Как заставить BIND DNS рекурсивно отправлять запрос с CLASS = ANY (255)?

Если я сделаю запрос к моему локальному рекурсивному DNS BIND9 с классом (не типом!) ЛЮБОЙ, он рекурсивно отправит запрос серверу пересылки, но с классом = IN Как заставить его отправить рекурсивный запрос того же класса, что и я? Является ли это возможным?

Что я хочу:

****** QUERY WITH CLASS "ANY" *********************** CLASS "ANY" *************
* ME *----------------------->* Local Recursive DNS *------------>* FORWARDER *
******                        ***********************             *************

Что на самом деле происходит:

****** QUERY WITH CLASS "ANY" *********************** CLASS "IN" *************
* ME *----------------------->* Local Recursive DNS *----------->* FORWARDER *
******                        ***********************            *************

Конфиг

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

    allow-query { any; };

    forwarders {
            8.8.8.8
    };
    forward only;

    listen-on {
            ...
    };

    auth-nxdomain no;    # conform to RFC1035
};

1 ответ

Решение

Интересный угловой корпус.

Оставляя в стороне все "Зачем тебе это делать?" вещь, я думаю, что ответ заключается в том, что это на самом деле не очень четко, что рекурсия с QCLASSANY средства.

RFC 1035 указывает, что NS запись содержит данные о сервере имен "для указанного класса и домена" (RFC 1035 раздел 3.3.11). Это означает, что могут быть разные NS RRSets для разных классов. Это, в свою очередь, означает, что рекурсия, достигающая точки с такими различными наборами, должна будет разделяться и продолжаться с обоих наборов серверов имен. Не существует определенной процедуры для объединения результата такой разделенной рекурсии в один ответ, и у одной рекурсии не может быть более одного ответа. Таким образом, не четко определенный процесс. Существует также дополнительное осложнение, что оба RFC 1034 и 1035 указывают, что ответ на QCLASSANY запрос никогда не может быть авторитетным.

Вы можете получить достаточно четкий намек на то, что произойдет, просто сравнив результаты dig ns -c CH www.google.com +trace а также dig ns -c IN www.google.com +traceи пытаясь представить, что это будет означать, что оба эти элемента являются частями одного и того же процесса поиска. Это на самом деле не имеет смысла.

Я подозреваю, что точное поведение, которое вы видите из BIND, является просто следствием того, что никто никогда не пытался реализовать ANYQCLASS рекурсии. Можно обоснованно утверждать, что это ошибка, что ваш запрос превращается в IN запрос, и что более правильный ответ будет FORMERR (RFC 1035 раздел 4.1.1, "Сервер имен не смог интерпретировать запрос").

Другие вопросы по тегам