(3) DNS 서비스 설정하기
NSLOOKUP
DNS 클라이이언트를 리졸버(resolver)라고 하며 nslookup은 리졸버가 질의하는 것과 같은 방법으로 질의를 진행하여 네임서버의 운영을 테스트하는 용도로 사용된다. nslookup은 리졸버의 행동을 그대로 흉내지만 네임 서버의 행동을 흉내내어 네임 서버가 사용하는 것과 동일한 질의를 이용해 다른 서버에게 질의를 한다. 그리고 네임 서버처럼 영역 정보를 얻어올 수 있다. 결론적으로 nslookup은 리졸버나 네임 서버를 흉내내어 네임 서버의 테스트와 장애 처리 도구로 사용할 수 있다.
그러면 먼저 nslookup과 리졸버가 행동하는 것이 어떻게 다른 가부터 알아보도록 하겠다. 리졸버의 경우 다수의 네임 서버를 등록하여 첫 번째 네임 서버로 질의를 시도하여 다음 서버에게 질의하고 다시 처음 서버에게 질의를 하는 작업을 반복하는 반면 nslookup은 등록된 첫 번째 네임 서버로 질의를 시도해 네임 서버를 포기할 때까지 계속 재시도한다. 그런 다음 다음 서버에게 질의를 시도한다. 일단 응답을 얻으면 해당 네임 서버로 고정시키고 다른 네임 서버로는 질의를 시도하지 않는다.
nslookup은 네임 서버와도 다른 행동을 한다. 예를 들어 nslookup은 슬레이브 서버처럼 영역 전송을 하지만 일련 번호(serial)를 확인하지 않기 때문에 일련 번호의 확인 책임은 테스터에게 있다.
nslookup은 대화식과 비대화식 실행을 지원한다. 먼저 대화식으로 실행해보자.
- C:\> nslookup
- > exit
비 대화식 실행은 nslookup 명령과 질의하려는 호스트 이름을 지정한다.
- C:\> nslookup www.jeongsam.net
옵션
현재 설정된 옵션을 보기 위해서 set all 명령을 입력한다.
[no]debug
디버깅 기능 사용 여부를 지정한다. 디버깅 기능이 켜져 있으면 네임 서버는 시간 초과를 보여주고 응답 패킷을 출력한다.
[no]defname
점이 없는 호스트 이름의 뒤에 로컬 도메인 이름의 자동 추가 여부를 결정한다.
[no]search
search 옵션이 켜져 있을 경우 defname 옵션을 적용하며 search 목록의 DNS 접미사를 자동으로 추가한다.
[no]recurse
재귀적인 도메인 이름 찾기 가능 여부를 결정한다. norecurse로 설정시 다른 네임 서버에 비재귀적 질의를 전송한다.
[no]d2
레벨 2의 디버깅을 켜면 질의 메세지를 정규 디버깅 출력과 함께 보낸다.
[no]vc
nslookup은 기본적으로 TCP를 이용한 가상 회선(virtual circuit) 대신 UDP 패킷을 이용하여 질의를 만든다.
[no]ignoretc
nslookup은 기본적으로 잘려진 메시지를 무시하지 않는다. UDP 응답 데이터그램으로 데이터를 온전히 수신하지 못할 경우 TCP을 이용하여 재시도하여 온전한 메시지를 수신할 수 있도록 시도한다.
port=53
DNS 서비스의 기본 포트 지정.
querytype=A
nslookup의 질의 형식을 지정. 기본값으로 A가 설정되어 있다.
class=IN
현재 현실적으로 지원되는 클래스는 Internet밖에 없다.
timeout=5
네임 서버가 5초이내로 응답하지 않을 경우 질의를 재 전송하고 시간 초과 값을 2배 증가시킨다.
retry=4
응답 실패시 시간 초과값을 2배씩 증가시키면서 4회 재전송후 포기한다.
root=A.ROOT-SERVERS.NET.
디폴트 루트 네임 서버 지정. 재귀적 질의시 루트 도메인 서버로부터 시작하여 하위 도메인을 탐색하여 목표한 도메인 네임 서버를 찾아 질의의 응답을 요청한다.
domain=JEONGSAM.NET
기본 도메인 이름 지정.
srchlist=JEONGSAM.NET
searchlist 지정. 복수의 도메인 지정시 '/'를 이용하여 설정한다.
권한 있는 응답과 권한 없는 응답
로컬 네임 서버로부터 로컬 도메인 영역 정보를 응답받은 경우 권한 있는 응답이라고 하며 다른 도메인 네임 서버로부터 도메인 영역 정보를 응답받은 경우 권한 없는 응답으로 표시된다.
네임 서버 변경
lserver와 server 명령을 이용하여 기본 네임 서버를 변경할 수 있으며, 두 명령의 차이점은 서버의 IP 주소를 찾을 때 nslookup에서 변경된 네임 서버를 이용할 지 아니면 nslookup이 동작 중인 호스트의 기본 네임 서버를 이용할 지의 차이가 있다.
예를 들어 lserver나 server 명령을 이용하여 기본 네임 서버를 www.jeongsam.net으로 변경하였다면, www.jeongsam.net에 네임 서버가 설치되어 있지 않을 경우 server 명령을 이용한 변경 명령은 IP 주소를 찾지 못하는데 반하여 lserver 명령을 이용할 경우 원래의 기본 네임 서버를 이용하여 IP 주소를 찾아준다.
디버깅
- c:\> nslookup
- > set debug
- >
디버깅을 켰을 경우 nslookup이 수신하는 응답을 보여주며 set d2 명령으로 레벨 2 디버깅을 켰을 경우 전송하는 질의도 표시한다.
질의와 응답 메시지인 DNS 패킷을 자세히 살펴보면 헤더 부분, 질의 부분, 응답 부분, 권한 부분, 기타 부분 등 5개 부분으로 구성되어 있다.
헤더 부분(header section)
nslookup에서 opcode는 항상 query로 표시되며 네임 서버의 경우 notify, update 등 opcode를 지원한다. rcode는 no error(에러 없음), server failure(서버 장애), name error(이름이 틀렸음), not implemented(구현되지 않음), refuse(응답 거부) 중 하나의 값을 갖는다.
질의 부분(question section)
DNS 메시지는 요청할 이름과 형식, 클래스로 구성되어 있다.
응답 부분(answer section)
응답 리소스 레코드가 출력된다.
권한 부분(authority section)
네임 서버의 SOA 리소스 레코드가 출력된다.
기타 부분(additional section)
앞서 다룬 4가지 부분에 있는 정보의 추가적인 완전한 정보를 표시한다.
네임 서버 흉내 내기
set norecurse와 set nosearch 명령으로 네임 서버가 도메인 영역 정보를 검색하는 것을 흉내 낼 수 있다.
- C:\> nslookup
- > set norec
- > set nosearch
- > www.jeongsam.net
- (현재 기본 네임 서버가 www.jeongsam.net의 도메인 영역 정보를 모르기 때문에 루트 도메인 서버를 찾아 다음 질의할 준비를 한다.)
- > server a.gtld-server.net
- > www.jeongsam.net
- (루트 네임 서버에 질의를 보내 jeongsam.net 영역 정보를 가지고 있는 네임 서버를 찾는다.)
- > server ns14.dnsever.com
- > www.jeongsam.net
- (jeongsam.net 영역 정보를 이용하여 www.jeongsam.net 호스트의 IP 주소르 찾는다.)
영역 전송
슬레이브 서버를 흉내내어 주 마스터 서버(primary master server)로부터 영역 정보를 수신한다.
- C:\> nslookup
- > ls -d jeongsam.net
- (해당 도메인 영역 정보를 가지고 있는 주 마스터 네임 서버가 전송을 허락한 경우 전체 영역 정보를 수신할 수 있다.)
이 글은 스프링노트에서 작성되었습니다.