Windows DNS 문제는 참 어려운 구조 입니다. 명확한 기술 문서에 내용이 없어 많은 분들이 추측하거나 실제 패킷을 캡쳐해서 확인하는 방법으로 문제 해결을 시도하고 있습니다. 하지만 아래 문제를 해결하는 과정에서 대략적인 동작 구조를 알게되어 개인 기억 차원에서 정리 합니다.
문제가 되었던 환경은 아래를 참고 하세요.
[클라이언트 DNS 환경]
- 내부 클라이언트 환경은 AD Join 환경
- 윈도우 클라이언트는 1차 DNS는 내부 AD 서버를 2차 DNS는 구글을 바라보도록 설정
[문제 발생]
- 내부 특정 서비스 서버 접속이 안되는 문제 발생 (내부/외부 DNS 서버에서 질의하면 Private IP 정보를 보여 줍니다.)
[문제 해결]
- 2차 DNS 정보 (구글 8.8.8.8)를 삭제하면 정상 접속 됨
[의문점]
왜 주 DNS와 보조 DNS를 동시에 입력되어 있는 환경에서는 동작하지 않을까?
[기존 알고 있는 정보]
기본적으로 주 DNS / 보조 DNS 정보가 입력되어 있을 경우, 기본적으로 브라우저에서 “www.aa.com”을 질의하면 “주/보조 DNS에 동시에 질의를 던져, 가장 빨리 응답이 오는 쿼리를 받아 반영한다” 라고 알고 있습니다.
[기본적으로 주/보조 DNS 동작 방식]
많은 관리자들이 주 DNS / 보조 DNS를 마치 active / standby 처럼 보조 DNS를 백업의 용도로 생각하고 주 DNS가 서비스를 못하는 상황이 발생하면, 보조 DNS가 서비스를 한다라고 생각하지만, 이는 잘못된 생각 입니다. 주/보조 DNS는 백업의 개념이 아닌 로드밸런싱 개념이며, 따라서, 주/보조 DN가 동일하게 DNS lookup을 서비스 한다고 생각 해야 합니다.
[정말로 주/보조 DNS에 동시에 질의를 던질까?]
만약 기본적으로 주/보조가 동시에 질의가 던져진다고 가정하고 주/보조 DNS 정보를 입력하고 외부 도메인을 약 10여분만 질의를 하면서, woreskark를 패킷을 모니터링 해보았지만, 주 DNS만 죽어라 질의 하는걸 확인 했다. 단 한번도 보조 DNS에 질의를 던지는 패킷은 없었다. (주 DNS 서비스를 죽여 볼수는 없어 주 DNS가 장애가 발생하면, 보조 DNS로 질의를 던지는지는 확인하지 못했다)
[결론]
제 블로그에 기재했던 (DNS 이야기) Windows DNS 질의 순서 정리 내용 중 윈도우 첫번째 질의 순서가 윈도우 OS가 Cache 데이터가 최 우선이라고 정리 했었는데, 이 윈도우 OS의 Cache 데이터는 기본적으로 주 DNS에만 질의를 던지도록 설정되어 있다. 즉 Cache DNS 정보가 잘못되어 있을 경우, 주/보조 DNS에 동시에 질의를 던지는게 아니라, 응답 시간이 가장 빠른 주 or 보조 DNS로 질의를 던지게 됩니다.
만약 질의 서버를 찾아갈 수 없다면, 일단 윈도우 Cache DNS 서버 정보를 리셋하고 (ipconfig /flushdns) 재 질의를 하는게 정답이다.