[server] 네임 서버가 TCP를 통한 쿼리에 응답해야한다는 것이 사실입니까?

여러 대형 웹 호스트의 DNS 서버 모니터링을 설정하는 프로세스입니다. 내 목표는 ping에 대한 응답을 추적하여 DNS 서버 응답 시간을 비교하는 것입니다.

이 과정에서 Bluehost 이름 서버가 ping에 응답하지 않는 것을 발견했습니다. bluehost.com 에서 Pingdom DNS Check를 실행하여 자세한 정보를 얻으려고 시도했는데 다음 오류가 발생했습니다.

네임 서버 ns1.bluehost.com (74.220.195.31)은 TCP를 통한 쿼리에 응답하지 않습니다.

이름 서버가 TCP를 통해 전송 된 쿼리에 응답하지 못했습니다. 이름 서버가 올바르게 설정되지 않았거나 방화벽에서 필터링이 잘못 구성되어 있기 때문일 수 있습니다. DNS가 영역 전송을 제공하지 않는 한 DNS에 TCP가 필요하지 않다는 것은 일반적으로 오해입니다. 네임 서버 관리자는 TCP가 일반적으로 필요하다는 것을 인식하지 못합니다.

다음을 알고 싶습니다.

  • 위의 진술은 어느 정도까지 사실입니까?
  • 이름 서버가 TCP를 통한 쿼리에 응답하지 않는 의미는 무엇입니까?


답변

Pingdom의 진단 텍스트는 정확합니다. TCP는 영역 전송만을위한 것이 아닙니다 .

DNS 서버 구현 이제 RFC 5966에 따라 “DNS 전송을 통한 TCP- 구현 요구 사항”에 따라 TCP를 지원하기 위해 “필수”(RFC에 필요한 것이있는만큼)가 필요합니다 .

이것은 서버 소프트웨어 구현에 대한 요구 사항이며, 서버 작동 에는 엄격하게 적용 되지 않으며 운영 실습은 다루지 않습니다.

즉, 특정 DNS 서버가 TCP를 지원하도록 구성되어 있지 않거나 차단 된 경우 장기적인 영향으로 인해 DNSSEC를 올바르게 지원할 수 없게됩니다. 마찬가지로 응답이 512 바이트를 초과하는 다른 DNS 데이터도 차단 될 수 있습니다.

고지 사항 : 나는 그 RFC를 썼습니다.

편집 RFC 5966은 이제 RFC 7766 으로 대체되었습니다.


답변

TCP 및 UDP를 지원해야합니다-TCP는 응답 크기> 512 바이트 (영역 전송 포함)입니다 (어쨌든 읽은 내용에 따라. 나는 보통 NS의 TCP 및 UDP를 활성화합니다 …)


답변

이 주제에 대한 RFC의 의견을 아는 것이 좋으며, 우리는 이미 그에 대한 권위있는 답변을 가지고 있지만 실제적인 목적으로 DJBDNS의 저자 인 Daniel J. Bernstein 교수의 조언을 매우 즐겁게 찾을 수 있습니다.

http://cr.yp.to/djbdns/tcp.html#why (2003-01-16)

TCP 쿼리는 언제 전송됩니까?

다음 상황 중 하나 인 경우 TCP 쿼리에 응답하도록 DNS 서버를 구성해야합니다.

  • 512 바이트보다 큰 레코드 세트를 공개하려고합니다. (거의 항상 실수입니다.)
  • 발신 영역 전송 (예 : 타사 서버)을 허용하려고합니다.
  • TCP 서비스를 설정할 때까지 상위 서버가 이름을 위임하지 않습니다.

이러한 상황이 아닌 경우 TCP 서비스를 제공 할 필요가 없으며 설정하지 않아야합니다. DNS-over-TCP는 DNS-over-UDP보다 훨씬 느리고 본질적으로 서비스 거부 공격에 훨씬 더 취약합니다. (이것은 BIND에도 적용됩니다.)

그는 DNSSEC에 대한 명시적인 언급을 생략했습니다. 그 이유는 DJB에 따르면 DNSSEC은 “항상 실수”범주에 속하기 때문입니다. 자세한 내용은 https://cr.yp.to/djbdns/forgery.html 을 참조하십시오. DJB에는 DNSCurve ( http://dnscurve.org/) 라는 대체 표준이 있는데,이 표준 은 OpenDNS와 같은 일부 공급자가 이미 독립적으로 채택했습니다. 관심있는 부분 : /security/45770/if-dnssec-is-so-questionable-why-is-it-ahead-of-dnscurve-in-adoption .

DJBDNS 설정에 관한 위의 문서가 그 기능을 나타내는 것이라면, AXFR for TCP만을 지원하는 것으로 보입니다. 많은 공급자들이 여전히 DJBDNS를 사용하고 있기 때문에 별도의 노력 없이도 DNS over TCP를 지원하지 않을 것입니다.

PS : DJB는 실제로 자신이 설교하는 것을 실천합니다. 자신의 서버 (1)은 DNSCurve를 실행하고 (2) TCP에 제대로 응답하지 않습니다. +notcp성공 만 가능합니다 (기본값).

% dig +trace @ordns.he.net +notcp cr.yp.to | tail
yp.to.                  86400   IN      NS      uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to.
yp.to.                  86400   IN      NS      uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 151 ms

cr.yp.to.               600     IN      A       131.155.70.11
cr.yp.to.               600     IN      A       131.155.70.13
yp.to.                  3600    IN      NS      uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
yp.to.                  3600    IN      NS      uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.yp.to.
;; Received 244 bytes from 131.155.70.13#53(uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to) in 14 ms

반면에 a +tcp는 실패합니다 (선택한 서버에 따라 다른 오류 메시지가 나타남).

% dig +trace @ordns.he.net +tcp cr.yp.to | tail
yp.to.                  86400   IN      NS      uz5hjgptn63q5qlch6xlrw63tf6vhvvu6mjwn0s31buw1lhmlk14kd.ns.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 150 ms

;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.193.32.147#53: end of file
;; connection timed out; no servers could be reached


답변

TCP는 필수이며 일반적으로 긴 응답이 필요한 경우에만 사용됩니다. 부정적인 영향이있을 수 있습니다. 영역 전송은 TCP를 통해 이루어지며 신뢰할 수 있어야합니다. 신뢰할 수없는 서버에서 TCP를 허용하지 않으면 작은 응답 만 제공 할 수 있습니다.

서명 된 DNS 응답이 도입됨에 따라 UPD 응답으로 512 바이트 제한을 완화해야했습니다. EDNS0은 더 긴 UDP 응답을위한 메커니즘을 제공합니다. TCP를 통한 DNS를 허용하지 않으면 보안 DNS 구현이 중단 될 가능성이 높습니다.

인터넷에 UDP 포트 53 만 열려있는 DNS 서버를 실행할 수 있습니다. DNS 피어에 대한 TCP 액세스가 필요하지만이 목록은 소규모 호스트입니다.

전체 DNS 구현을 위해 TCP가 필요한 최신 RFC596 이 있습니다. 이것은 구현자를 목표로합니다. 이 문서는 특히 운영자를 다루지는 않지만 TCP를 허용하지 않으면 여러 가지 실패 시나리오가 발생할 수 있다고 경고합니다. DNS over TCP가 지원되지 않는 경우 발생할 수있는 다양한 장애에 대해 자세히 설명합니다.

DNS 증폭 공격을 방지하기 위해 TCP를 사용하는 것에 대한 논의가있었습니다. TCP에는 자체 서비스 거부 위험이 있지만 배포가 더 어렵습니다.


답변