Linux

[Linux] DNS 서버 - zone 파일

thdwldud 2026. 3. 9. 09:50

zone 파일

1. zone 파일의 개요

  • zone 파일은 /etc/named.conf 파일에 지정된 디렉터리 안에 지정한 파일명으로 생성해야 함
  • 기본 설정 디렉터리는 /var/named 디렉터리이므로 이 디렉터리에 생성하면 되고, 최근에 zone 파일명은 /etc/named.rfc1912.zones에 설정하므로 이 파일에 지정한 이름대로 생성
  • 사용하는 도메인에 대한 zone 파일은 일반 존 파일과 리버스 존 파일로 나누고, 파일명은 관리자가 임의로 지정 가능
  • 리버스 존 파일은 반드시 생성할 필요는 없지만, 리버스 존 파일이 없는 경우 IP주소에 따른 도메인 조회를 하는 사이트로 메일 전송할 때 스팸처리가 될 수도 있음
  • 존 파일은 메인 도메인뿐만 아니라, 2차 도메인을 관리하는 역할도 함
  • linux.or.kr이라는 도메인을 이용하는 경우 2차 도메인으로 game.linux.or.kr, edu.linux.or.kr 등을 2차 도메인으로 지정하여 사용 가능
💡 존 파일 설정에 대하여
일반적으로 zone 파일을 vi와 같은 편집기로 생성하는 경우에 소유권 및 허가권 문제로 인해 DNS 서버가 동작하지 않는 경우가 있음. 이 경우에는 다음의 명령을 사용해서 소유권 및 허가권을 변경해야 함
1. 소유권 변경
     chown root.named linux.zone
2. 허가권 변경
     chmod 640 linux.zone

2. zone 파일의 구조

  • zone 파일은 크게 SOA(Start Of Authority) 레코드와 자원 레코드(Resource Record)로 나눌 수 있음. Bind 9 버전의 기본 구조

[기본 구조]

$TTL    1D
@ IN SOA nameserver contract-email-address (
    serial_number        ; serial
    refresh_number       ; refresh
    retry_number         ; retry
    expire_number        ; expire
    minimum_number)      ; minimum
도메인 TTL class type Rdata

 

3. zone 파일의 항목 설명

  • $TTL
    • Time To Live의 약자로 zone 파일의 첫 줄에 설정
    • 다른 서버에서 도메인 관련 정보를 조회한 경우, 조회한 서버의 캐시에 해당 정보가 얼마나 머물지를 결정
    • 도메인 관련 설정 항목에서 별도의 TTL을 설정하지 않았을 경우에는 이 값이 적용됨
    • 값은 초 단위로 설정하면 되는데, 86400이라고 지정하면 1일이 됨
    • 최근에는 단위를 붙일 수 있는데, 대소문자 구분 없이 W(주), D(일), H(시), M(분)을 붙여서 사용해도 됨
  • SOA record
    • 존 파일을 시작하는 레코드로 시작은 도메인명 또는 도메인명을 나타내는 기호인 ‘@’을 사용
    • 항목에 대한 설명이 필요한 경우 주석 기호인 세미콜론(;)을 사용하면 됨
주요 구성 설명
nameserver 네임 서버의 호스트명과 도메인명을 적음
전체 도메인으로 기재할 경우에는 마지막 루트 도메인을 뜻하는 ‘.’을 찍어야 함
ex. ns.linux.or.kr.
contact_email_address 관리자의 이메일 주소를 적음
’계정.도메인’ 형태로 기재해야 하고, 마지막에 루트 도메인을 뜻하는 ‘.’을 찍어야 함
ex. posein.linux.or.kr.
serial_number 일종의 일련 번호로 zone 파일이 갱신되면 숫자가 더 크도록 설정
보통 ‘YYYYMMDDNN’ 형식을 사용하는데, ‘YYYYMMDD’는 해당 연월일을 적고 NN은 수정한 횟수를 기재
ex. 2018012801, 180128
refresh_number 보조 네임 서버가 자신의 정보를 업데이트하기 위해 주 네임 서버에 얼마나 자주 체크할 것인지를 설정
ex. 86400, 1D, 1d 등
retry_number 보조 네임 서버가 주 네임 서버 접근에 실패했을 경우 재시도할 주기를 설정
ex. 3600, 1H 등
expire_number 보조 네임 서버가 주 네임 서버에 접근을 실패하여 retry_number에 설정한 주기로 재시도할 때의 만기 시간을 지정
ex. 1W
minimum_number 일종의 SOA 영역의 TTL로서 가져간 정보의 최소 보관 시간을 설정
ex. 3H
  • 도메인
    • 도메인명, 호스트명, 공백, @, * 등이 올 수 있음
    • @는 현재 도메인을 가리키고, *는 모든 호스트명을 뜻함
    • 호스트명만 기입하면 ‘호스트명.도메인이름’으로 인식하고, 전체 도메인명으로 지정할 때는 반드시 맨 뒤에 ‘.’을 붙여야 함
    • 공백은 바로 윗 줄의 항에 설정된 ‘도메인’ 값을 이어서 사용
  • TTL
    • 해당 레코드에 대한 TTL 값을 설정하는 항목
    • 보통 생략해서 사용하는데 생략한 경우에는 $TTL 항목에 설정된 값이 반영됨
  • class
    • 레코드의 클래스를 지정하는 부분으로 IN, CH, HS 등을 사용할 수 있음
    • 보통 Internet을 의미하는 IN을 사용하는데, 생략해도 무방
  • type
    • 해당 레코드의 타입을 지정하는 영역으로 주요 타입은 다음과 같음
타입 설명
A 도메인 주소를 IPv4 형식의 주소로 매핑할 때 사용
AAAA 도메인 주소를 IPv6 형식의 주소로 매핑할 때 사용
NS 도메인의 네임 서버(Name Server)를 지정할 때 사용
MX 메일 서버(Mail Exchanger)를 지정할 때 사용
MX 다음에 0 또는 양의 정수값을 기입해서 우선순위를 지정해야 함
CNAME Canonical Name 레코드로 일종의 별칭(alias)을 지정할 때 사용
예를 들어 ‘www1 CNAME www’로 설정하면 www1.posein.org에 대한 요청을 www.posein.org로 서비스
PTR 리버스 존에서만 사용하는 레코드로 IP 주소를 도메인으로 변환하기 위해 지정(Pointer)
TXT 도메인에 대한 텍스트 정보를 기재할 때 사용
최근 스팸으로 분류되는 것을 막기위해서 사용되는 SPF(Sender Policy Framework) 등을 기재할 때 사용
  • Rdata
    • IP 주소, 도메인명, 호스트명을 지정하는 영역
    • 호스트명만 기입했을 경우에는 자동으로 도메인을 붙여서 인식하고, 전체 도메인명을 명기하려면 반드시 맨 뒤에 ‘.’을 붙여야 함

 

4. zone 파일의 생성 및 설정 예

  • zone 파일을 생성하기 위해서는 먼저 zone 파일이 위치하는 디렉터리인 /var/named로 이동
  • 이 디렉터리에는 zone 파일의 샘플(sample) 파일들이 존재하므로 복사해서 사용. cp 명령으로 복사할 때에 소유권 및 허가권까지 같이 유지하는 옵션인 -p를 사용하면 번거로운 절차를 줄일 수 있음
  • 리버스 존 파일은 zone 파일 작업 후에 복사해서 쓰는 것을 권장

[복사 예]

[root@www ~]# cd /var/named
[root@www ~]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@www ~]# cp -p named.localhost linux.zone

 

[설정 조건]

  • DNS 서버의 IP 주소가 10.0.2.15이고, 신청한 도메인이 linux.or.kr임
  • 관리자 메일 주소는 posein@linux.or.kr이고, 하나의 시스템에 메일 및 웹서버도 구성
  • /etc/named.rfc1912.zones에 존 파일명은 linux.zone, 리버스 존 파일명은 linux.rev로 지정했다는 가정하에 진행

1. linux.zone

[root@www named]# cat linux.zone
$TTL 1D
@ IN SOA ns.linux.or.kr. posein.linux.or.kr. (
                                   220712 ; serial
                                   1D     ; refresh
                                   1H     ; retry
                                   1W     ; expire
                                   3H)    ; minimum
     NS     ns.linux.or.kr.
     A      10.0.2.15
     MX 10  linux.or.kr.
ns   A      10.0.2.15
www  A      10.0.2.15

 

2. linux.rev

[root@www named]# cat linux.rev
$TTL 1D
@ IN SOA ns.linux.or.kr. posein.linux.or.kr. (
                                   220712 ; serial
                                   1D     ; refresh
                                   1H     ; retry
                                   1W     ; expire
                                   3H)    ; minimum
     NS     ns.linux.or.kr.
15   PTR    linux.or.kr.
15   PTR    ns.linux.or.kr.
15   PTR    www.linux.or.kr.

 

💡위치 / 옵션 찾기

  • zone 파일, 리버스 존파일 구조 암기 필요

zone 파일

$TTL    1D
@ IN SOA nameserver contract-email-address (
    serial_number        ; serial
    refresh_number       ; refresh
    retry_number         ; retry
    expire_number        ; expire
    minimum_number)      ; minimum
도메인 TTL class type Rdata

 

리버스 zone 파일

$TTL 1D
@ IN SOA 네임서버 이메일주소 (
            serial_number        ; serial
            refresh_number       ; refresh
            retry_number         ; retry
            expire_number        ; expire
            minimum_number)      ; minimum
 
 DNS_서버_IP_마지막주소   PTR    도메인