관리 메뉴

IT창고

Network DNS 서버와 DNS 헤더 본문

보안/Network

Network DNS 서버와 DNS 헤더

방구석여포 2018. 4. 16. 20:19


DNS는 도메인 네임을 IP주소로 매핑해주는 서비스입니다.

간단한 실습을 위하여 DNS서버를 만들어보겠습니다.

리눅스 프롬프트창에 yum -y install bind bind-utils bind-chroot bind-libs 를 입력하여 패키지를 다운로드 받습니다.


패키지를 다운로드 받았다면 /etc/named.conf 파일이 생겼을텐데 이 파일이 DNS 주 설정파일입니다.

DNS서버를 설정해주기 위해서 vi로 named.conf파일 일부를 수정합니다.


 any는 전체라는 뜻으로 53번 포트로 접속되면 연결이 됩니다. allow-query는 모든 질의를 답해주겠다는 뜻입니다.


그리고 추가로 아래에  zone파일 설정을 합니다. 예전에 DNS서버를 만드는 글을 올린적이 있습니다.

2017/09/18 - [서버운영/Linux] - 리눅스 DNS 설정

예전에는 include된 rfc파일을 이용하여 DNS설정을 했지만 이번에는 zone파일을 만들어 DNS설정을 해보겠습니다.


주설정파일에서 zone을 설정할때 file은 상대경로 였습니다. 이것은 options에서 directory에 경로가 명시되어있기 때문에 가능한 일인데 실제 gsk.com파일은 /var/named 디렉토리 안에 만들어야만 합니다. cp명령어로 named.empty를 복사해서 gsk.com파일을 설정하겠습니다. named.empty파일은 양식파일입니다.


위와 같은 양식으로 gsk.com파일을 설정합니다.


IN은 인터넷 클래스를 뜻하며 위의 사진에 보면 레코드가 있습니다. 레코드는 질의하려는 도메인의 종류이며 자세한 것은 아래와 같습니다.

- SOA (Start Of Authority) : 권한이 있는 네임서버

- A (Address) : 도메인의주소(IPv4)

- AAAA : IPv6

- MX (Mail eXchanger) : 메일서버

- NS (Name Server) : 네임서버

- CNAME (Canonical name): 별칭 

- .....


위의 과정을 오타없이 제대로 입력이 되었다면 service named start로 데몬을 실행시키면 DNS서버가 시작됩니다.

만약을 위하여 iptables 방화벽을 꺼두기로 합니다. 여기까지 진행해서 아무런 문제가 없는데 혹시 DNS서버가 작동이 안된다면 방금 만든 파일의 권한을 살펴봅니다. 현재 이작업을 root계정으로 진행하였는데 실행권한없거나이나 소유자가 root인 경우라면 제대로 설정해서 데몬을 실행시켜도 작동이 되지않습니다. 이런 경우는 chmod 755로 실행권한을 주거나 chown root:named gsk.com로 그룹권한을 named로 바꿔주면 실행에 문제가 없습니다.


윈도우 클라이언트에서 nslookup으로 확인해보면 문제없이 실행이 됩니다.


클라이언트가 DNS에게 도메인을 얻어오는 과정을 조금 알아보겠습니다.


1. win -> 캐시정보

2. linux -> 캐시정보X  (리눅스에게는 캐시가 없습니다)


/etc/hosts 이 파일에 명시되어있는 ip정보가 있다면 dns에 연결없이 바로 접속합니다.

만약 없다면 dns에게 질의를 하고 dns는 요청받으면 자신의 서버 캐시를 확인합니다. 확인했는데 그래도 없다면 사용자가 질의한 도메인 영역 확인하게 됩니다.


이번에는 와이어샤크를 사용하여 DNS 캐시를 받아오는 패킷을 캡쳐해보겠습니다.

순서는 아래와 같습니다.

1. 캐시 초기화

2. nslookup 

   >server 10.10.10.10

3. vmnet1 인터페이스 패킷 캡쳐

4. >www.gsk.com

   //기본값이 A레코드에 대한 질의를 한다

     A레코드란 -> IPv4주소

   // set q=MK -> 해당 도메인을 사용하는 메일 서버에게 질의

5. 패킷 중지 후 dns 헤더를 분석


패킷을 확인하기 전 DNS 헤더에 대해 알아보고 가도록 하겠습니다.

DNS 헤더는 총 12byte로 이루어져있습니다.

Identification은 식별ID이고 QR은 Query(0)와 Response(1)를 구분하고 Opcode는 Query의 유형을 지정합니다.

Flag는 http://www.ktword.co.kr/abbr_view.php?m_temp1=2194 DNS 메세지 헤더 항목을 참고 합니다.

TQ는 Questions Section의 개수를 나타내고 TA는 Answers Section의 개수를 나타냅니다.


서로간에 질의를 하며 통신하는걸 확인할수있습니다.


Tip

DNS통신은 기본적으로 UDP통신을 하고 있습니다. 하지만 통신 데이터량(zone file)이 512byte를 넘으면 TCP통신으로 바꿔서 통신이 됩니다.


Comments