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

DNS 서버 설정 (named.conf)

DNS의 개요

도메인 네임 시스템(Domain Name System, DNS)

  • 호스트의 도메인 이름을 IP 주소로 바꾸거나, 그 반대의 변환을 위해 개발되었다.
  • DNS 서버
    • IP 주소 기반의 인터넷 체계에서 도메인명 을 기반으로 이용하려면 필수적으로 구성해야 하는 것
    • 보유한 도메인을 관리해주는 역할 수행
    • 클라이언트에서 도메인명에 대한 IP 주소의 조회를 요청했을 경우, 반환해주는 역할도 수행한다.

 

DNS 서버의 종류

Primary Name Server

  • 사용하는 도메인을 관리하기 위해 필수적으로 구성하는 서버
  • 보통 Master DNS 라고도 부른다.
  • 도메인이 등록될 때 이 서버의 IP 주소를 등록하고, 자체 도메인에 대한 정보를 관리하게 된다.

 

Secondary Name Server

  • Primary Name Server 와 zone 파일을 백업하는 역할을 수행한다.
  • Slave DNS 라고도 부른다.
  • 외부 클라이언트에서 이 서버를 2차 DNS 서버로 설정할 경우
    • Master DNS가 다운된 상태라도 정상적으로 해당 도메인에 대해 리졸빙(Resolving) 정보를 제공한다.

 

Caching Name Server

  • 관리하는 도메인 없이 리졸빙만을 제공하기 위해 구성되는 서버
  • 도메인에 대한 리졸빙 결과를 저장한다.
  • 서버에 기록된 정보에 대한 요청이 들어올 경우
    • 직접 조회하지 않고 바로 응답해주는 역할을 수행한다.
  • 인터넷 사용 속도를 높이기 위해 사용되기도 한다.

 

DNS 서버 프로그램 : BIND(Berkeley Internet Name Domain)

  • bind
    • 가장 널리 쓰이는 DNS 서버 프로그램
    • ISC(Internet Systems Consortium)에서 DHCP 서버 프로그램과 함께 공개 소프트웨어로 배포되고 있다.
    • named라는 이름의 데몬 사용
    • 관련 정보 : http://www.isc.org
  • 레드햇 계열 리눅스는 다음 3개의 패키지로 배포되고 있다.
    • bind
    • bind-utils
    • bind-libs
  • CentOS 7 버전에서는 yum install bind 명령으로 모든 패키지를 쉽게 설치할 수 있다.

 

bind 관련 파일 및 디렉터리

  • /etc/named.conf
    • DNS 서버의 전반적인 환경 설정을 담당하는 파일
    • 서버에서 사용하는 zone 파일을 지정한다.
  • /var/named
    • 다음의 파일들이 위치하는 디렉터리
      • named.ca : 루트 도메인 서버에 대한 정보를 담고 있는 파일
      • 사용자가 선언하는 zone 파일
  • RHEL 4 버전부터는 보안 강화를 위해 bind-chroot 패키지를 추가로 설치할 수 있다.
    • 이 패키지를 설치하게 되면 주요 항목의 위치가 다음과 같이 변경된다.

주요 항목기본 패키지 설치bind-chroot 설치

환경 설정 파일 /etc/named.conf /var/named/chroot/etc/named.conf
존(zone) 파일 위치 /var/named /var/named/chroot/var/named

 

문제 해결 전략

  • DNS 서버 설정 파일의 내용을 채우는 문제가 출제된다.
  • DNS 서버는 bind 라는 이름으로 설치되므로, 'rpm -ql bind' 명령으로 관련 파일을 검색한다.
    • 'rpm -qc bind' 명령으로 주요 환경 설정 파일의 위치를 찾는다.
더보기
  • 관련 파일 검색하기
$ rpm -ql bind
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/rwtab.d/named
/etc/sysconfig/named
/run/named
/usr/bin/arpaname
/usr/bin/named-rrchecker
/usr/lib/python2.7/site-packages/isc
/usr/lib/python2.7/site-packages/isc-2.0-py2.7.egg-info
/usr/lib/python2.7/site-packages/isc/__init__.py
/usr/lib/python2.7/site-packages/isc/__init__.pyc
/usr/lib/python2.7/site-packages/isc/__init__.pyo
/usr/lib/python2.7/site-packages/isc/checkds.py
/usr/lib/python2.7/site-packages/isc/checkds.pyc
/usr/lib/python2.7/site-packages/isc/checkds.pyo
/usr/lib/python2.7/site-packages/isc/coverage.py
/usr/lib/python2.7/site-packages/isc/coverage.pyc
/usr/lib/python2.7/site-packages/isc/coverage.pyo
/usr/lib/python2.7/site-packages/isc/dnskey.py
/usr/lib/python2.7/site-packages/isc/dnskey.pyc
/usr/lib/python2.7/site-packages/isc/dnskey.pyo
/usr/lib/python2.7/site-packages/isc/eventlist.py
/usr/lib/python2.7/site-packages/isc/eventlist.pyc
/usr/lib/python2.7/site-packages/isc/eventlist.pyo
/usr/lib/python2.7/site-packages/isc/keydict.py
/usr/lib/python2.7/site-packages/isc/keydict.pyc
/usr/lib/python2.7/site-packages/isc/keydict.pyo
/usr/lib/python2.7/site-packages/isc/keyevent.py
/usr/lib/python2.7/site-packages/isc/keyevent.pyc
/usr/lib/python2.7/site-packages/isc/keyevent.pyo
/usr/lib/python2.7/site-packages/isc/keymgr.py
/usr/lib/python2.7/site-packages/isc/keymgr.pyc
/usr/lib/python2.7/site-packages/isc/keymgr.pyo
/usr/lib/python2.7/site-packages/isc/keyseries.py
/usr/lib/python2.7/site-packages/isc/keyseries.pyc
/usr/lib/python2.7/site-packages/isc/keyseries.pyo
/usr/lib/python2.7/site-packages/isc/keyzone.py
/usr/lib/python2.7/site-packages/isc/keyzone.pyc
/usr/lib/python2.7/site-packages/isc/keyzone.pyo
/usr/lib/python2.7/site-packages/isc/parsetab.py
/usr/lib/python2.7/site-packages/isc/parsetab.pyc
/usr/lib/python2.7/site-packages/isc/parsetab.pyo
/usr/lib/python2.7/site-packages/isc/policy.py
/usr/lib/python2.7/site-packages/isc/policy.pyc
/usr/lib/python2.7/site-packages/isc/policy.pyo
/usr/lib/python2.7/site-packages/isc/rndc.py
/usr/lib/python2.7/site-packages/isc/rndc.pyc
/usr/lib/python2.7/site-packages/isc/rndc.pyo
/usr/lib/python2.7/site-packages/isc/utils.py
/usr/lib/python2.7/site-packages/isc/utils.pyc
/usr/lib/python2.7/site-packages/isc/utils.pyo
/usr/lib/systemd/system/named-setup-rndc.service
/usr/lib/systemd/system/named.service
/usr/lib/tmpfiles.d/named.conf
/usr/lib64/bind
/usr/libexec/generate-rndc-key.sh
/usr/sbin/ddns-confgen
/usr/sbin/dnssec-checkds
/usr/sbin/dnssec-coverage
/usr/sbin/dnssec-dsfromkey
/usr/sbin/dnssec-importkey
/usr/sbin/dnssec-keyfromlabel
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-keymgr
/usr/sbin/dnssec-revoke
/usr/sbin/dnssec-settime
/usr/sbin/dnssec-signzone
/usr/sbin/dnssec-verify
/usr/sbin/genrandom
/usr/sbin/isc-hmac-fixup
/usr/sbin/lwresd
/usr/sbin/named
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone
/usr/sbin/named-compilezone
/usr/sbin/named-journalprint
/usr/sbin/nsec3hash
/usr/sbin/rndc
/usr/sbin/rndc-confgen
/usr/sbin/tsig-keygen
/usr/share/doc/bind-9.11.4
/usr/share/doc/bind-9.11.4/Bv9ARM.ch01.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch02.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch03.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch04.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch05.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch06.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch07.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch08.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch09.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch10.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch11.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch12.html
/usr/share/doc/bind-9.11.4/Bv9ARM.ch13.html
/usr/share/doc/bind-9.11.4/Bv9ARM.html
/usr/share/doc/bind-9.11.4/Bv9ARM.pdf
/usr/share/doc/bind-9.11.4/CHANGES
/usr/share/doc/bind-9.11.4/README
/usr/share/doc/bind-9.11.4/isc-logo.pdf
/usr/share/doc/bind-9.11.4/man.arpaname.html
/usr/share/doc/bind-9.11.4/man.ddns-confgen.html
/usr/share/doc/bind-9.11.4/man.delv.html
/usr/share/doc/bind-9.11.4/man.dig.html
/usr/share/doc/bind-9.11.4/man.dnssec-checkds.html
/usr/share/doc/bind-9.11.4/man.dnssec-coverage.html
/usr/share/doc/bind-9.11.4/man.dnssec-dsfromkey.html
/usr/share/doc/bind-9.11.4/man.dnssec-importkey.html
/usr/share/doc/bind-9.11.4/man.dnssec-keyfromlabel.html
/usr/share/doc/bind-9.11.4/man.dnssec-keygen.html
/usr/share/doc/bind-9.11.4/man.dnssec-keymgr.html
/usr/share/doc/bind-9.11.4/man.dnssec-revoke.html
/usr/share/doc/bind-9.11.4/man.dnssec-settime.html
/usr/share/doc/bind-9.11.4/man.dnssec-signzone.html
/usr/share/doc/bind-9.11.4/man.dnssec-verify.html
/usr/share/doc/bind-9.11.4/man.dnstap-read.html
/usr/share/doc/bind-9.11.4/man.genrandom.html
/usr/share/doc/bind-9.11.4/man.host.html
/usr/share/doc/bind-9.11.4/man.isc-hmac-fixup.html
/usr/share/doc/bind-9.11.4/man.lwresd.html
/usr/share/doc/bind-9.11.4/man.mdig.html
/usr/share/doc/bind-9.11.4/man.named-checkconf.html
/usr/share/doc/bind-9.11.4/man.named-checkzone.html
/usr/share/doc/bind-9.11.4/man.named-journalprint.html
/usr/share/doc/bind-9.11.4/man.named-nzd2nzf.html
/usr/share/doc/bind-9.11.4/man.named-rrchecker.html
/usr/share/doc/bind-9.11.4/man.named.conf.html
/usr/share/doc/bind-9.11.4/man.named.html
/usr/share/doc/bind-9.11.4/man.nsec3hash.html
/usr/share/doc/bind-9.11.4/man.nslookup.html
/usr/share/doc/bind-9.11.4/man.nsupdate.html
/usr/share/doc/bind-9.11.4/man.pkcs11-destroy.html
/usr/share/doc/bind-9.11.4/man.pkcs11-keygen.html
/usr/share/doc/bind-9.11.4/man.pkcs11-list.html
/usr/share/doc/bind-9.11.4/man.pkcs11-tokens.html
/usr/share/doc/bind-9.11.4/man.rndc-confgen.html
/usr/share/doc/bind-9.11.4/man.rndc.conf.html
/usr/share/doc/bind-9.11.4/man.rndc.html
/usr/share/doc/bind-9.11.4/named.conf.default
/usr/share/doc/bind-9.11.4/notes.html
/usr/share/doc/bind-9.11.4/notes.pdf
/usr/share/doc/bind-9.11.4/sample
/usr/share/doc/bind-9.11.4/sample/etc
/usr/share/doc/bind-9.11.4/sample/etc/named.conf
/usr/share/doc/bind-9.11.4/sample/etc/named.rfc1912.zones
/usr/share/doc/bind-9.11.4/sample/var
/usr/share/doc/bind-9.11.4/sample/var/named
/usr/share/doc/bind-9.11.4/sample/var/named/data
/usr/share/doc/bind-9.11.4/sample/var/named/my.external.zone.db
/usr/share/doc/bind-9.11.4/sample/var/named/my.internal.zone.db
/usr/share/doc/bind-9.11.4/sample/var/named/named.ca
/usr/share/doc/bind-9.11.4/sample/var/named/named.empty
/usr/share/doc/bind-9.11.4/sample/var/named/named.localhost
/usr/share/doc/bind-9.11.4/sample/var/named/named.loopback
/usr/share/doc/bind-9.11.4/sample/var/named/slaves
/usr/share/doc/bind-9.11.4/sample/var/named/slaves/my.ddns.internal.zone.db
/usr/share/doc/bind-9.11.4/sample/var/named/slaves/my.slave.internal.zone.db
/usr/share/man/man1/arpaname.1.gz
/usr/share/man/man1/named-rrchecker.1.gz
/usr/share/man/man5/named.conf.5.gz
/usr/share/man/man5/rndc.conf.5.gz
/usr/share/man/man8/ddns-confgen.8.gz
/usr/share/man/man8/dnssec-checkds.8.gz
/usr/share/man/man8/dnssec-coverage.8.gz
/usr/share/man/man8/dnssec-dsfromkey.8.gz
/usr/share/man/man8/dnssec-importkey.8.gz
/usr/share/man/man8/dnssec-keyfromlabel.8.gz
/usr/share/man/man8/dnssec-keygen.8.gz
/usr/share/man/man8/dnssec-keymgr.8.gz
/usr/share/man/man8/dnssec-revoke.8.gz
/usr/share/man/man8/dnssec-settime.8.gz
/usr/share/man/man8/dnssec-signzone.8.gz
/usr/share/man/man8/dnssec-verify.8.gz
/usr/share/man/man8/genrandom.8.gz
/usr/share/man/man8/isc-hmac-fixup.8.gz
/usr/share/man/man8/lwresd.8.gz
/usr/share/man/man8/named-checkconf.8.gz
/usr/share/man/man8/named-checkzone.8.gz
/usr/share/man/man8/named-compilezone.8.gz
/usr/share/man/man8/named-journalprint.8.gz
/usr/share/man/man8/named.8.gz
/usr/share/man/man8/nsec3hash.8.gz
/usr/share/man/man8/rndc-confgen.8.gz
/usr/share/man/man8/rndc.8.gz
/usr/share/man/man8/tsig-keygen.8.gz
/var/log/named.log
/var/named
/var/named/data
/var/named/dynamic
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves

 

  • 관련 환경설정 파일 검색하기
$ rpm -qc bind
/etc/logrotate.d/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback

 

  • man named.conf 명령을 이용해서 지정하는 형식을 확인할 수 있다.

 

문제 유형

① 시간과 관련된 문제

  • bind 의 환경 설정 파일은 /etc/named.conf 로, 이 파일에서 존(Zone) 파일이 위치하는 디렉터리가 /var/named 임을 확인할 수 있다.
더보기
# 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";

 

  • 이 디렉터리 안에 named.* 파일들이 존재하는데, 이 중 하나의 파일을 열어서 보면 시간과 관련된 설명을 확인할 수 있다.
주요 구성 설명
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

 

$TTL 86400
@      IN      SOA     ns.example.com.       rooot.exmaple.com.    (
                      20150426
                      (    3H    )
                      (    15M   )
                      (    1W    )
                      1D
)
example.com.             IN         NS        ns.example.com
ns                       IN         A         192.168.0.100

 

② named.conf 파일 설정에 관한 문제

  • forward 의 인자값에 해당하는 only first에 대한 설명은 man 명령어를 통해 찾을 수 없으므로, 이 부분에 대해 정확히 알고 있어야 한다.
    • only : forwarders 항목에서 지정한 서버가 응답이 없을 경우 자신도 응답하지 않는다.
    • first : forwarders 항목에서 지정한 서버가 응답이 없을 경우 자신이 응답한다.
options {
    directory "/var/named";
    forward (  only  );
    (  forwarders  ) { 8.8.8.8; };
    (  datasize  ) 1024M(;
    (  allow-query  ) { 192.168.64/24; };
};
728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖