Как заставить 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 ответ
Интересный угловой корпус.
Оставляя в стороне все "Зачем тебе это делать?" вещь, я думаю, что ответ заключается в том, что это на самом деле не очень четко, что рекурсия с QCLASS
ANY
средства.
RFC 1035 указывает, что NS
запись содержит данные о сервере имен "для указанного класса и домена" (RFC 1035 раздел 3.3.11). Это означает, что могут быть разные NS RRSets для разных классов. Это, в свою очередь, означает, что рекурсия, достигающая точки с такими различными наборами, должна будет разделяться и продолжаться с обоих наборов серверов имен. Не существует определенной процедуры для объединения результата такой разделенной рекурсии в один ответ, и у одной рекурсии не может быть более одного ответа. Таким образом, не четко определенный процесс. Существует также дополнительное осложнение, что оба RFC 1034 и 1035 указывают, что ответ на QCLASS
ANY
запрос никогда не может быть авторитетным.
Вы можете получить достаточно четкий намек на то, что произойдет, просто сравнив результаты dig ns -c CH www.google.com +trace
а также dig ns -c IN www.google.com +trace
и пытаясь представить, что это будет означать, что оба эти элемента являются частями одного и того же процесса поиска. Это на самом деле не имеет смысла.
Я подозреваю, что точное поведение, которое вы видите из BIND, является просто следствием того, что никто никогда не пытался реализовать ANY
QCLASS
рекурсии. Можно обоснованно утверждать, что это ошибка, что ваш запрос превращается в IN
запрос, и что более правильный ответ будет FORMERR
(RFC 1035 раздел 4.1.1, "Сервер имен не смог интерпретировать запрос").