Domain IP Lookup

네 가지 결과, 네 가지 다른 대응

NXDOMAIN이름이 존재하지 않음, 재시도해도 소용없음
TIMEOUT제때 응답이 오지 않음, 대개 일시적
SERVFAIL서버가 처리하지 못함, 때로 일시적
REFUSED정책에 따라 거부됨, 장애나 일시적 오류는 드묾
문제 해결

DNS 타임아웃과 SERVFAIL의 차이

읽는 시간 3분

모든 DNS 조회 실패가 같은 방식으로 실패하는 것은 아닙니다. NXDOMAIN이 아닌 실패 중 가장 흔한 두 가지, 즉 타임아웃과 SERVFAIL은 겉보기에는 비슷합니다(사용할 수 있는 응답이 돌아오지 않았다는 점에서). 그러나 근본 원인은 상당히 다릅니다.

타임아웃: 제때 응답이 도착하지 않음

타임아웃은 말 그대로의 뜻입니다. 쿼리는 전송되었지만 설정된 대기 시간 안에 응답이 돌아오지 않았다는 것입니다. 권한 서버가 과부하 상태이거나, 네트워크 경로 어딘가에서 패킷 손실이 발생했거나, 방화벽이 DNS 트래픽을 명시적으로 거부하지 않고 조용히 버리고 있을 때 일어날 수 있습니다. 질의하는 쪽에서 보면 타임아웃은 아예 존재하지 않는 서버와 구별되지 않으며, 둘 다 그저 침묵일 뿐입니다.

SERVFAIL: 응답은 왔지만 그 내용이 “처리할 수 없다”였음

SERVFAIL은 침묵이 아니라 실제 응답입니다. 응답한 서버가 쿼리를 처리하는 중 문제가 생겼다고 명시적으로 알려 주는 것입니다. 잘못 구성된 존, DNSSEC 검증 실패, 리졸버 내부 오류 등이 원인일 수 있습니다. SERVFAIL을 받았다면 서버 쪽에서 구체적인 일이 벌어졌다는 사실을 알 수 있지만, 타임아웃은 문제가 실제로 어디에 있는지에 대해 알려 주는 정보가 상대적으로 적습니다.

코드발생한 상황재시도할 가치가 있나?
타임아웃대기 시간 안에 응답이 전혀 도착하지 않음예, 대개 일시적임
SERVFAIL서버가 응답했지만 쿼리를 처리하지 못함경우에 따라, 백오프를 두고 2-3회 시도할 만함
REFUSED서버가 이해했지만 대개 정책에 따라 응답을 거부함드묾, 대개 지속적인 접근 제한임
NXDOMAIN이름이 존재하지 않음, 그것으로 끝아니요, 절대 아님, 영구적인 응답임

두 경우 모두 일시적일 수 있으므로 실무에서의 처리 방식도 같습니다. 지수 백오프를 적용해 소수의 횟수만 재시도하고, 재시도를 모두 소진한 뒤에야 실제 실패로 보고합니다. 이 도구가 두 코드를 확정적인 NXDOMAIN과 다르게 다루는 방식이 바로 이것입니다.

REFUSED는 대개 장애가 아니라 정책을 뜻합니다

REFUSED는 침묵이 아니라 “서버가 거절했다”는 점에서 SERVFAIL과 한데 묶이기 쉽지만, 그 이면의 이유는 대개 상당히 다릅니다. 네임서버가 REFUSED를 반환하는 경우는 흔히 특정 존에 대해서만 응답하도록 설정되어 있는데 범위 밖의 이름을 질의받았을 때, 접근 제어 목록(ACL)이 질의한 IP를 차단할 때, 또는 리졸버가 자기 네트워크 밖의 쿼리를 거부하도록 명시적으로 설정되어 있을 때입니다(예를 들어 재귀 리졸버가 인터넷상의 낯선 사용자에게 재귀 응답을 제공하지 않는 것은 버그가 아니라 올바르고 의도된 동작입니다). 직접 관리하지 않는 서버에서 REFUSED를 받았다면 재시도나 백오프 전략으로 해결될 가능성은 낮습니다. 애초에 올바른 서버에 질의하고 있는지부터 확인해 볼 만합니다.

흔하고 구체적인 SERVFAIL 원인: 잘못된 DNSSEC

더 골치 아픈 SERVFAIL 사례 중 하나는 DNSSEC이 활성화되어 있지만 잘못 구성된 도메인에서 발생합니다. 만료된 서명, 네임서버에서는 키를 교체했지만 레지스트라에는 반영하지 않은 경우, 도메인과 루트 사이 어딘가에서 신뢰 체인이 끊어진 경우 등이 있습니다. DNSSEC을 준수하는 검증 리졸버는 암호학적으로 검증할 수 없는 응답을 돌려주지 않으며, 잘못된 서명을 조용히 무시하는 대신 SERVFAIL을 반환합니다. 불안한 점은 DNSSEC을 아예 검증하지 않는 리졸버에서는 해당 도메인이 아무 문제 없이 동작하는 경우가 많다는 것입니다. 그래서 이 원인은 “내 쪽에서는 잘 되는데”라며 잘못 진단하기 쉽지만, 실제로는 상당수의 방문자에게 정말로 장애가 발생하고 있는 상태입니다.

도메인의 공개 DNS 주소를 확인해야 하나요? Domain IP Lookup 도구를 사용해 보세요.