DNS query란 사용자(또는 서버)가 DNS 서버로 어떤 정보를 질의하는 것을 말하며,
대부분의 DNS query는 도메인 이름에 연결된 IP를 확인하기 위한 용도로 사용된다고 해도 과언이 아닐 것이다.
필자도 DNS를 운영하기 전까지는 도메인네임서버라는 존재나 웹브라우저에 URL을 입력 후 엔터를 쳤을 때
어떤 로직으로 사용자 화면에서 웹서버에서 제공하는 컨텐츠를 볼 수 있는지 잘 몰랐었다.
https://www.google.com URL이 제공하는 컨텐츠가 웹브라우저에 뿌려지는 DNS관점에서의 로직은 대충은 이렇다.
1. 웹브라우저에서 https://www.google.com URL 입력 후 엔터
2. URL 정보 중 도메인 정보가 사용자 hosts 파일 내에 존재하는지 확인
3. 없을 경우 사용자 PC에 설정되어 있는 DNS(ISP DNS나 Google DNS 등)로 도메인 정보 쿼리
4. 사용자가 바라보고 있는 DNS가 해당 정보를 가지고 있지 않을 경우 root DNS부터 도메인 정보를 가진 DNS를 찾기 시작
5. 3의 DNS가 google DNS에 www.google.com 쿼리에 대한 IP 질의
6. google DNS에 등록되어 있는 IP 정보를 3의 DNS에게 응답
7. 3의 DNS가 사용자에게 IP 응답
8. 사용자는 응답받은 IP와 443 port로 TCP handshake 이후 TLS handshake 통신
이렇게 PC에서 웹브라우저로 어떤 정보를 보기 위해 많은 단계를 거치다 보니, 특정 서비스의 웹 접속이 원활하지 않을 때 DNS 운영자가 호출될 가능성이 매우 높다.(물론 웹방화벽 담당자 등 보안장비 담당자도 같이 호출되므로 외롭진 않다.)
DNS에서 사용자에게 서비스 도메인에 연결된 IP를 제공하지 않았을 수 있는 가능성 때문인데
서비스 도메인 이름에 연결된 IP가 DNS query 통해 확인되면 DNS는 무고함이 입증되는데
이 때 가장 많이 사용되는 명령어가 nslookup이다(사실 이거 쓰려고 시작한 글이 많이 길어졌다.)
주로 쓰는 방식은 이렇다.
nslookup [도메인 이름] 과 같이 입력할 경우 ipv4 IP와 ipv6 IP가 등록되어 있다면 해당 정보를 모두 출력한다.
ipv6 정보는 보고 싶지 않다면 중간에 이렇게 옵션(-type=a)을 넣어서 ipv4 정보만 추려서 볼 수 있다.
-type=[레코드타입] 에 들어가는 주로 쓰는 레코드타입 별 정보는 아래와 같다.
A레코드 : ipv4 IP
AAAA레코드 : ipv6 IP
MX레코드 : 메일수신서버 도메인 이름
NS레코드 : 도메인네임서버 도메인 이름
CNAME레코드 : 다른 도메인 이름으로 리다이렉션
TXT레코드 : 사람이 읽을 수 있는 메모를 남기는 정도의 취지로 시작됐으나 도메인 소유권 체크나 이메일 스팸 필터 취지로 주로 사용됨
PTR레코드 : IP에 연결되어 있는 도메인 이름
아래와 같이 ISP DNS가 정상적으로 동작하는지, 다른 DNS 통한 DNS 쿼리 질의에는 문제가 없는지 확인하려면 쿼리 질의하고자 하는 도메인 이름 뒤에 IP 또는 DNS 도메인 이름을 기입해주면 된다.
이상으로 DNS query 관련 쓰고 싶었던 내용은 다 쓴 것 같다.
관련으로 궁금한 점이 있으시거나 추가로 DNS 관련 다뤄줬으면 하는 주제가 있다면 댓이나 방명록으로 남겨 주시면 준비해 보도록 하겠다.