Linux

[Linux] DNS 서버 - /etc/named.conf 파일

thdwldud 2026. 3. 2. 22:13

/etc/named.conf

1. 파일의 구성과 특징

  • 파일의 구성은 크게 주석문과 구문으로 구성되어 있음
  • 주석은 C에서 사용하는 /* */, C++에서 사용하는 //, 유닉스 계열에서 사용하는 # 등 모두 사용 가능
  • 구문에는 options, logging, controls, zone, acl, view, key, masters, server 등이 존재
  • 각 구문은 중괄호({})로 둘러싸고 끝날 때는 세미콜론(;)을 사용
  • include 지시자를 선언하여 별도의 파일에 추가 정의 가능

2. 주요 구문

1. options 구문

  • DNS 서버의 동작 및 제어와 관련된 여러가지 설정을 하는 영역으로 존 파일이 위치하는 디렉터리명은 방드시 명기해야 함
  • listen-on port 53 { 127.0.0.1; };
    • DNS 서버의 포트 번호인 53번 포트에 접근할 수 있는 호스트를 지정하는 항목. 기본값은 로컬 호스트만 가능하므로 다른 호스트의 접근이 가능하게 하려면 이 항목을 주석 처리하거나 기본 설정 값인 127.0.0.1을 any로 변경
  • listen-on-v6 port 53 { ::1; };
    • DNS 서버의 포트 번호인 53번 포트에 접근할 수 있는 호스트를 지정하는 항목으로 IPv6 주소 기반 설정 시에 사용. IPv6 주소 기반의 접근 제어를 사용하지 않는다면 주석처리 하거나 지우도록함
  • directory “/var/named”;
    • 존 파일이 위치하는 디렉터리명을 명기
  • dump-file “/var/named/data/cache_dump.db”;
    • named는 정보가 갱신될 때 dump 파일로 저장하는데, 그 덤프 파일이 생성될 위치와 파일명을 지정
  • statistics-file “/var/named/data/named_stats.txt”;  
    • 네임 서버의 통계 파일을 생성할 위치와 파일명을 지정
  • memstatistics-file “/var/named/data/named_mem_stats.txt”;
    • 네임 서버의 메모리 통계 파일을 생성할 위치와 파일명을 지정
  • forward (only|first);
    • forwarders 구문과 함께 사용되며, only나 first 두 값 중 하나를 가짐.
    • only는 자신에게 들어온 도메인 질의를 지정한 다른 서버로 넘기도록 하는 것으로 다른 서버가 그에 대한 응답이 없을 경우 그 자신도 그 질의에 대해 응답하지 않을 경우에 설정.
    • first는 타 서버에서 응답이 없을 때 자신이 응답하도록 할 때 설정
  • forwarders { 네임서버주소1; 네임서버주소2; …};
    • 도메인에 대한 질의를 다른 서버로 넘길 때 사용하는 구문으로 복수 형태로 지정할 수도 있는데, 구분은 세미콜론(;)으로 함
  • allow-query { 192.168.0/24; };
    • 네임서버에 질의할 수 있는 호스트를 지정. 위와 같이 지정하면 192.168.0.0 네트워크 주소 대역에 속한 호스트만이 질의 가능
  • allow-transfer { 192.168.0/24; };
    • zone 파일의 내용을 복사할 대상에 제한을 걸 때 지정. 이 항목을 명기하지 않으면 제한없이 zone 파일을 복사할 수 있게됨. 현재 설정은 192.168.0.0 네트워크 대역에 속한 호스트만 zone 파일 복사가 가능하고, none이라고 하면 모든 호스트를 제한 가능
  • datasize 512M;
    • DNS 관련 정보를 캐싱할 때 사용하는 메모리를 제한하는 설정
  • recursion yes;
    • 질의(query) 중 인터넷을 통해 다른 DNS 서버에 질의를 보내고, 질의를 다시 받을 수 있음

2. acl 구문

  • ACL(Access Control List)의 약자로 여러 호스트를 하나의 명칭으로 지정할 때 사용. 지정한 이름은 options 구문의 allow-query, allow-transfer 등에 사용할 수 있음. 주의할 점은 acl 구문의 선언은 options 구문 이전에 해야함

[acl 에서 사용 가능한 주소 매칭 이름]

매칭 이름 설명
any 모든 호스트를 나타냄
none 어떠한 호스트도 거부
localhost 시스템에 부여된 IPv4 및 IPv6 주소를 매칭
localnet 시스템에 부여된 IPv4 및 IPv6 네트워크의 모든 호스트를 매칭시킴

[사용 예]

acl "member" { 210.96.52.100; 203.247.40/24; 211.58.96.100; };
options {
		listen-on port 53 { 127.0.0.1; any; };
		directory          "/var/named";
		allow-transfer     { 203.247.50/24; 203.247.51.30; };
		dump-file          "/var/named/data/cache_dump.db";
		statistics-file    "/var/named/data/named_stats.txt";
		memstatistics-file "/var/named/data/named_mem_stats.txt";
		forward only;
		forwarders         { 203.247.32.31; };
		allow-query        { 203.247.50/24; 203.247.51.33; member; };
		datasize 512M;
};

zone "." IN {
		type hint;
		file "named.ca";
};

include "/etc/named.rfc1912.zones";

3. zone 구문

  • 도메인을 관리하는 데이터베이스 파일인 zone 파일을 지정. 기본적으로 루트(.) 도메인 서버에 대한 정보 파일인 named.ca에 대한 선언이 되어 있고 추가로 localhost, localhost.domain 등에 대한 존 파일 선언이 되어 있음. 기본적으로 선언된 것은 그대로 두는 것이 좋으며, 특히 named.ca 항목을 지우면 리졸빙이 불가능하므로 주의해야함. RHEL 7부터는 /etc/named.conf 파일의 복잡해지는 것을 막기 위해 include 지시자를 사용해서 root zone 파일 관련한 설정을 제외한 zone 구문 자체를 /etc/named.rfc1912.zones라는 별도의 파일에서 설정하도록 권장하고 있음. 따라서 이 파일에 존(zone) 파일과 리버스 존(reverse zone)을 추가로 선언하면 됨. 일반적으로 존 파일은 도메인에 대한 질의시 IP 주소를 알려주는 역할을 수행하고, 리버스 존 파일을 사용하지 않으면 IP주소에 대한 도메인이 질의가 되지 않는데, 특정 사이트에서는 이러한 경우 차단을 하여 메일이 거부될 수 있으므로 주의해야 함

[기본 형식]

zone "도메인명" IN {
		type (master | slave | hint);
		file "존파일명";
};
항목 설명
zone 도메인명 자리에 설정하려는 도메인 이름을 기재
리버스 존 파일에 대한 설정은 맨 마지막 주소를 제외하고 “50.247.203.in-addr.arpa” 형식으로 기재
Reverse Zone 파일에 맨 마지막 IP주소를 생략할 경우에는 전체 IP 주소를 역순으로 기재해도 됨
ex 1) zone “linux.co.kr”
ex 2) zone “50.247.203.in-addr.arpa”
ex 3) zone “15.2.0.10.in-addr.arpa”
type DNS 서버의 종류를 나타냄
master는 Primary, slave는 Secondary, hint는 리졸빙을 위한 root zone서버를 나타냄
ex 1) type master;
ex 2) type slave;
         masters { 203.247.40.243; };
file 사용하려는 존 파일명을 기재
일반적인 존 파일은 “도메인명.zone”으로 설정하고 리버스 존 파일인 경우에는 “도메인명.rev”로 설정
ex 1) file “linux.zone”
ex 2) file “linux.rev”
allow-update 동적 업데이트를 지원한 호스트의 IP주소를 기재
허가된 시스템에서 nsupdate 명령을 이용해서 zone 파일을 업데이트할 수 있음
보안이 취약하므로 꼭 필요한 경우가 아니라면 권장하지 않음
ex 1) allow-update { none; };
ex 2) allow-update { 192.168.12.22; };

[설정 예]

# IP 주소가 10.0.2.15이고 도메인이 linux.or.kr 인 경우
zone "linux.or.kr" IN {
		type master;
		file "linux.zone";
};
zone "2.0.10.in-addr.arpa" IN {
		type master;
		file "linux.rev";
};

 

💡위치 / 옵션 찾기

  • DNS 관련 설정이 /etc/named.conf 인 것은 암기

  • /usr/share/doc/bind/sample/etc/named.conf 파일 확인 시 샘플 코드 확인 가능

options 구문

  • forward (only | first); : 질의 넘기는 설정
    • only : 응답 없으면 자기도 안 함
    • first : 응답 없으면 자기가 함
  • forwarders { 네임서버주소1; 네임서버주소2; };
  • allow-query { 192.168.2/24; }; : 질의 가능 호스트 
  • allow-transfer { 192.168.2/24; }; : zone 파일 복사/받을 수 있는 호스트

acl 구문

  • acl "멤버" { 호스트; 192.168.2/24; };

zone 구문

  • zone "도메인명" IN {
            type (master | slave | hint);
            file "존파일명";
    }
  • zone "2.168.192.in-addr.arpa" IN {
             type master
             file "linux.rev";
    };
  •