내 컴퓨터 ──①──► 캐싱 서버 (/etc/resolv.conf 에 적힌 8.8.8.8) │ ├──②──► 루트 서버 "com 은 저쪽 TLD 서버가 압니다" ├──③──► com TLD 서버 "example.com 은 저 네임서버가 압니다" └──④──► example.com 의 권한 서버 "93.184.216.34 입니다" │ 내 컴퓨터 ◄──⑤── 캐싱 서버 (답을 전달하고, 한동안 기억해 둔다)
구분
누가 누구에게
성격
재귀 질의 (①)
내 컴퓨터 → 캐싱 서버
"최종 답을 가져다 달라" — 한 번 묻고 기다린다
반복 질의 (②~④)
캐싱 서버 → 루트·TLD·권한 서버
"다음에 누구에게 물을지" 를 받아 가며 차례로 묻는다
위에서 아래로, 도메인을 오른쪽부터 읽는 순서 그대로 내려간다. 루트 → com → example.com 이다.
루트 서버는 답을 모른다. 최상위 도메인을 맡은 서버가 어디인지만 알려 준다. 계층의 꼭대기라는 것이 "모든 것을 안다"는 뜻은 아니다.
캐싱 서버는 받은 답을 정해진 시간(TTL) 동안 기억한다. 같은 이름을 다시 물으면 ②~④를 건너뛰고 바로 답한다. 두 번째 조회가 빠른 이유이자, DNS 정보를 고쳐도 곧바로 퍼지지 않는 이유다.
누구에게 물었는가./etc/resolv.conf의 nameserver가 여기 나온다. #53은 포트 번호
Non-authoritative answer
권한 서버가 직접 한 답이 아니라 캐싱 서버가 기억해 둔 것을 전해 준 답
Name / Address
물어본 이름과 그 IP — 이것이 결과다
위쪽 Address와 아래쪽 Address를 혼동하지 않는다. 위는 DNS 서버의 주소, 아래가 찾던 답이다.
"Non-authoritative"는 오류가 아니다. 평소 조회는 거의 다 이렇게 나온다.
$ dig www.example.com;; QUESTION SECTION:;www.example.com. IN A;; ANSWER SECTION:www.example.com. 3600 IN A 93.184.216.34;; SERVER: 8.8.8.8#53(8.8.8.8)
실제 출력은 이보다 길다. 볼 곳은 질문(QUESTION) · 답(ANSWER) · 답한 서버(SERVER) 세 군데다.
ANSWER SECTION 한 줄은 이름 · TTL(초) · IN · 레코드 종류 · 값 순서다. 위 예는 "이 답을 3600초(1시간) 동안 기억해도 된다"는 뜻이다.
dig는 이름 끝에 점을 붙여 보여 준다(www.example.com.). 앞에서 본 FQDN 표기다.
하려는 것
nslookup
dig
host
메일 서버(MX) 보기
nslookup -type=mx example.com
dig example.com MX
host -t mx example.com
물어볼 서버 지정
nslookup 이름 168.126.63.1
dig @168.126.63.1 이름
host 이름 168.126.63.1
역방향 조회
nslookup 8.8.8.8
dig -x 8.8.8.8
host 8.8.8.8
dig만 서버 앞에 @를 붙이고, 역방향에 -x가 필요하다. nslookup과 host는 IP를 그냥 주면 알아서 역방향으로 찾는다.
세 명령은 모두 조회만 한다. 설정을 바꾸지 않는다. ping도 이름을 IP로 바꿔 보여 주기는 하지만 DNS 조회 도구로 분류하지 않는다.