별의 공부 블로그 🧑🏻‍💻
728x90
728x170

/etc/named.conf

DNS 서버 설정

  • DNS 서버 설정의 핵심 파일
    • /etc/named.conf
      • DNS 서버의 환경에 대한 설정
      • 운영하는 도메인에 대한 존(zone) 파일리버스 존(Reverse Zone) 파일을 생성한다.
    • zone 파일
      • 지정된 경로정해진 포맷으로 생성됨.
      • 도메인에 대한 다음 정보를 담고 있는 파일
        • 호스트명 지정
        • 2차 도메인 부여

 

/etc/named.conf 파일

 # cat /etc/named.conf
더보기
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
	listen-on port 53 { 127.0.0.1; };
	listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	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";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { localhost; };

	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

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

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

 

(1) 파일의 구성과 특징

  • 파일의 구성
    • 주석문
      • C 언어 에서 사용하는 /* */
      • C++ 에서 사용하는 //
      • 유닉스 계열 에서 사용하는 #
    • 구문
      • 종류
        • options
        • logging
        • controls
        • zone
        • acl
        • view
        • key
        • masters
        • server
      • 각 구문은 중괄호({ }) 로 둘러 쌓임.
      • 끝날 때는 세미콜론(;) 을 사용함.
  • include 지시자를 선언하여 별도의 파일에 추가 정의할 수 있음.

 

(2) 주요 구문

 options 구문

  • DNS 서버의 동작 및 제어와 관련된 여러 가지 설정을 하는 영역
  • 존 파일이 위치하는 디렉터리명은 반드시 명시해야 함.

 

항목 1

directory 	"/var/named";
  • 존 파일이 위치하는 디렉터리명 명시

 

항목 2

dump-file 	"/var/named/data/cache_dump.db";
  • named는 정보가 갱신될 때 dump 파일로 저장됨.
    • 이 덤프 파일이 생성될 위치와 파일명 지정

 

항목 3

statistics-file "/var/named/data/named_stats.txt";
  • 네임 서버의 통계 파일을 생성할 위치와 파일명 지정

 

항목 4

memstatistics-file "/var/named/data/named_mem_stats.txt";
  • 네임 서버의 메모리 통계 파일을 생성할 위치와 파일명 지정

 

항목 5

forward (only|first);
  • forwarders 옵션과 함께 사용됨.
  • 다음 2개의 값 중 하나를 갖음.
    • only
      • 자신에게 들어온 도메인 질의를 지정한 다른 서버로 넘기도록 하는 것
      • 다른 서버가 그에 대한 응답이 없을 경우, 그 자신도 그 질의에 대해 응답하지 않을 경우에 설정함.
    • first
      • 타 서버에서 응답이 없을 때 자신이 응답하도록 할 때 설정

 

항목 6

forwarders { 네임서버주소1; 네임서버주소2; ...};
  • 도메인에 대한 질의를 다른 서버로 넘길 때 사용하는 옵션
  • 복수 형태로 지정 가능
  • 구분은 세미콜론(;)으로 함.

 

항목 7

allow-query     { 192.168.0.0/24; };
  • 네임 서버에 질의할 수 있는 호스트 지정
  • 위와 같이 지정하면 192.168.0.0 네트워크 주소 대역에 속한 호스트만 질의 할 수 있음.

 

 

항목 8

allow-transfer     { 192.168.0.0/24; };
  • zone 파일내용을 복사할 대상에 제한을 걸 때 지정
  • 이 항목을 명시하지 않았을 경우
    • 제한 없이 zone 파일을 복사할 수 있게 됨.

 

항목 9

datasize 512M;
  • DNS 관련 정보를 캐싱 할 때 사용하는 메모리를 제한할 때 쓰임.

 

항목 10

recursion yes
  • 하위 도메인에 대한 검색 가능 여부를 지정하는 항목

 

 acl 구문

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

 

사용 예
acl "memeber" { 210.96.52.100; 203.247.40/24; 211.58.96.100; };
options {
    ...
}

 

 zone 구문

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

 

기본 형식
zone "도메인명" IN {
    type (master | slave | hint);
    file "존 파일명";
};
  • zone
    • 도메인명 자리에 설정하려는 도메인 이름을 기재함.
    • 리버스 존 파일에 대한 설정은 맨 마지막 주소를 제외하고 50.247.203.in-addr.arpa 형식으로 기재함.
    • 예)
      • zone "linux.co.kr"
      • zone "50.247.203.in-addr.arpa"
  • type
    • DNS 서버의 종류를 나타냄.
    • master : Primary
    • slave : Secondary
    • hint : 리졸빙을 위한 root zone 서버
    • 예)
      • type master;
      • type slave;
      • masters { 203.247.40.243; };
  • file
    • 사용하려는 존 파일명 을 기재함.
    • 일반적인 존 파일 : "도메인.zone"
    • 리버스 존 파일 : "도메인명.rev"
    • 예)
      • file "linux.zone";
      • file "linux.rev";

 

설정 예
  • IP 주소 : 192.168.12.22
  • 도메인 : linux.or.kr
zone "linux.or.kr" IN {
    type master;
    file "linux.zone";
};

zone "192.168.12.22.in-addr.arpa" IN {
    type master;
    file "linux.rev";
};

 

(3) /etc/named.conf 파일의 분할

  • 전통적인 방법
    • DNS 서버의 운영과 관련된 모든 설정은 /etc/named.conf 파일에 기록함.
      • 파일 내부에 options, logging, zone, acl 등의 구문으로 다양한 기능을 나누어서 설정함.
  • CentOS 6 버전 부터
    • include 지시자를 사용해서 파일을 분할하고 있음.
  • CentOS 7 버전
    • root과 관련된 zone 파일 설정을 제외한 다른 zone 파일 관련 설정
      • etc/named.rfc1912.zones 에서 설정하도록 권장됨.
        • 도메인별로 사용한 존 파일 리버스 존 파일 선언은 이 파일에서 설정해야 함.

 

zone 파일

더보기

(1) zone 파일의 개요

  • zone 파일은 /etc/named.conf 파일에 지정된 디렉터리에 지정된 파일명으로 생성해야 함.
    • 기본 설정 디렉터리는 /var/named 디렉터리이므로 이 디렉터리에 생성하면 됨.
    • 최근에 zone 파일명은 /etc/named.rfc1912.zones에 설정함.
      • 이 파일에 설정한 이름대로 생성함.
  • 사용하는 도메인에 대한 zone 파일의 구분
    • 일반 존 파일
      • 메인 도메인뿐 만 아니라 2차 도메인을 관리하는 역할도 함.
        • 예) linux.or.kr이라는 도메인을 이용하는 경우, 2차 도메인으로game.linux.or.kr,edu.linux.or.kr 등을 지정하여 설정할 수 있음.
    • 리버스 존 파일
      • 필수적으로 생성할 필요는 없음.
      • IP 주소로 도메인 조회를 하는 사이트로 메일을 전송할 경우, 스팸 처리가 될 수 있으니 염두해 둬야 함.
  • zone 파일의 파일명은 관리자가 임의로 지정할 수 있음.

 

(참고) 존 파일 설정에 대하여

  • 일반적으로 zone 파일을 vi와 같은 편집기로 생성하는 경우
    • 소유권 및 허가권 문제로 인해 DNS 서버가 동작하지 않은 경우가 있음.
      • 이 경우에는, 다음의 명령을 사용해서 소유권 및 허가권을 변경해야 함.
      ① 소유권 변경
      # chown root.named linux.zone
      ② 허가권 변경
      # chmod 640 linux.zone

 

(2) zone 파일의 구조

  • zone 파일은 크게 2개의 레코드로 나눌 수 있음.
    • SOA(Start of Authority) 레코드
    • 자원(Resource) 레코드

 

기본 구조 (Bind 9 버전)
$TTL    1D
@ IN SOA nameserver contact_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
      • 네임 서버의 호스트명과 도메인명을 적음.
      • 전체 도메인으로 기입할 경우
        • 마지막에 루트 도메인을 뜻하는 .을 찍어야 함.
      • 예) ns.linux.or.kr.
    • contact_email_address
      • 관리자의 이메일 주소를 적음.
      • 계정.도메인 형태로 기입해야 함.
      • 마지막에 루트 도메인을 뜻하는 .을 찍어야 함.
      • 예) starrykss.linux.or.kr.
    • serial_number
      • 일종의 일련 번호
      • zone 파일이 갱신되면 숫자가 더 크도록 설정함.
      • 보통 YYYYMMDDNN 형식을 사용함.
        • YYYYMMDD : 해당 연월일
        • NN : 수정한 횟수
      • 예) 2018012801, 180128
    • refresh_number
      • 보조 네임 서버가 자신의 정보를 업데이트하기 위해 주 네임 서버에 얼마나 자주 체크할 것인지 설정
      • 예) 86400, 1D, 1d 
    • retry_number
      • 보조 네임 서버가 주 네임 서버 접근에 실패했을 경우, 재시도 할 주기 설정
      • 예) 3600, 1H 
    • expire_number
      • 보조 네임 서버가 주 네임 서버 접근에 실패하여 retry_number 에 설정한 주기로 재시도를 할 때의 만기 시간 지정
      • 예) 1W
    • minimum_number
      • 일종의 SOA 영역의 TTL
      • 가져간 정보의 최소 보관 시간 설정
      • 예) 3H

 

 도메인

  • 다음의 내용이 올 수 있음.
    • 도메인명
    • 호스트명
    • 공백
    • @ : 현재 도메인
    • * : 모든 호스트명
  • 호스트명만 기입할 경우
    • 호스트명.도메인이름 으로 인식함.
  • 전체 도메인을 지정할 경우
    • 반드시 맨 뒤 .을 붙여야 함.
      • 예) starrykss.co.kr.
  • 공백은 바로 윗 항에 설정된 도메인 값을 이어서 사용함.

 

 TTL

  • 해당 레코드에 대한 TTL 을 설정하는 항목
  • 보통 생략해서 사용함.
    • 생략했을 경우에는 $TTL 항목에 설정된 값이 반영됨.

 

 class

  • 레코드의 클래스를 지정하는 부분
  • 다음의 클래스 사용 가능
    • IN
      • Internet 을 의미
      • 보통 사용됨.
    • CH
    • HS 
  • 생략해도 무방함.

 

 type

  • 해당 레코드 타입을 지정하는 영역
  • 주요 타입
    • : IPv4 의 주소를 기입할 때 사용
    • AAAA : IPv6 의 주소를 기입할 때 사용
    • NS : 도메인 네임 서버를 지정할 때 사용
    • MX
      • 메일 서버(Mail Exchanger)를 지정할 때 사용
      • MX 다음에 0 또는 양의 정수값을 기입해서 우선순위를 지정해야 함.
    • CNAME
      • Canonical Name 레코드
      • 일종의 별칭(Alias)를 지정할 때 사용
    • PTR
      • 리버스 존에서만 사용하는 레코드
      • IP 주소도메인으로 변환하기 위해 지정

 

 Rdata

  • 다음을 지정하는 영역
    • IP 주소
    • 도메인명
    • 호스트명
  • 호스트명만 명시 했을 경우
    • 자동으로 도메인을 붙여서 인식
  • 전체 도메인명을 명시하려면 반드시 맨 뒤에 .을 붙여야 함.

 

(4) zone 파일의 생성 및 설정 예

  • zone 파일을 생성하기 위해서 zone 파일이 위치하는 디렉터리인 /var/named로 이동함.
    • 이 디렉터리에는 zone 파일샘플 파일들이 존재하므로 복사해서 사용해면 좋음.
      • 복사할 때, 소유권 및 허가권까지 같이 유지하는 옵션을 쓰면 번거로운 절차를 줄일 수 있음.
      • 리버스 존 파일  존 파일 작업 후에 복사해서 쓰는 것이 권장됨.
# cd /var/named
# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
 
  • 소유권 및 허가권까지 같이 유지하여 복사 수행
# cp -p named.localhost linux.zone
  •  조건
    • DNS 서버의 IP 주소 : 192.168.12.22
    • 신청한 도메인 : linux.or.kr
    • /etc/named.rfc1912.zones 파일 지정
      • 존 파일명 : linux.zone
      • 리버스 존 파일명 : linux.rev

 

 linux.zone

# vi linux.zone
$TTL    1D
@     IN    SOA     ns.linux.or.kr.     starrykss.linux.or.kr. (
                    2014051301              ; serial
                    1D                      ; refresh
                    1H                      ; retry
                    1W                      ; expire
                    3H  )                   ; minimum
      IN    NS      ns.linux.or.kr.
      IN    A       192.168.12.22
      IN    MX 10   linux.or.kr.
www   IN    A       192.168.12.22
www1  IN    CNAME   www
www2  IN    CNAME   www

 

 linux.rev

# vi linux.rev
$TTL    1D
@     IN    SOA     ns.linux.or.kr.     starrykss.linux.or.kr. (
                    2014051301              ; serial
                    1D                      ; refresh
                    1H                      ; retry
                    1W                      ; expire
                    3H  )                   ; minimum
      IN    NS      ns.linux.or.kr.
22    IN    PTR     linux.or.kr.
22    IN    PTR     ns.linux.or.kr.
22    IN    PTR     www.linux.or.kr.

 

 

728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖