2017-02-02 7 views
0

ANY 클래스를 사용하여 로컬 재귀 BIND9 DNS에 쿼리를 작성하면 전달자에게 재귀 적으로 class = IN으로 쿼리가 전송됩니다. 그가 보낸 것과 같은 클래스로 재귀 쿼리를 보내려면 어떻게해야합니까? 가능합니까?BIND DNS가 CLASS = ANY (255)를 사용하여 재귀 적으로 쿼리를 보내도록 만드는 방법은 무엇입니까?

내가 원하는 것은 :

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

실제로 어떻게됩니까 :

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

는 config는

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 +tracedig ns -c IN www.google.com +trace의 출력을 비교하여 두 가지가 동일한 조회 프로세스의 일부인 것을 의미하는 것으로 생각하면 합리적으로 명확한 힌트를 얻을 수 있습니다. 그것은 실제로 말이되지 않습니다.

BIND에서 볼 수있는 정확한 동작은 아무도 ANYQCLASS 재귀를 구현하려고 시도한 결과가 아닌 것 같습니다. 쿼리가 IN 쿼리로 바뀌고 더 정확한 응답이 FORMERR (RFC 1035 섹션 4.1.1, "네임 서버가 쿼리를 해석 할 수 없음")이되는 버그라고 합리적으로 논할 수 있습니다.

+0

감사합니다. Calle, 행동을 아주 잘 설명합니다! – academica