반응형

Root 도메인 : 도메인의 중심!(ex: ns.kjj.kr. 에서 kr 뒤에 붙는 점(.)이 루트도메인을 의미)


도메인을 질의할때 뒤에서 부터 질의를 시작한다.

ex)www.kjj.kr. 이라면 .부터 시작해서 kr → kjj → www → www.kjj.kr 식으로 찾아나간다.


쿼리 과정

DNS의 변환은 크게 두가지 방식으로 할 수 있다.

1. 반복적 DNS 변환

2. 재귀적 DNS 변환


반복적 DNS 변환은 도메인을 가지고 끝에서부터 하나씩  질의를 해나가며 알아내는 것이고

재귀적 DNS 변환은  


TLD(Top Level domain) 최상위 도메인

- 일반 도메인(generic domain) gTLD

- 국가 도메인(country domain) ccTLD

- 인터넷 인프라 도메인(infrastructure domain) ARPA


SLD(Second level domain)2단계 도메인


<네임서버 유형>

네임서버에는 Primary 네임서버, Secondary 네임서버, Cache only Server로 구분할 수 있다.


-Primary Server (프라이머리 네임서버): 독자적으로 관리하는 zone 정보파일을 유지하면서 질의에 응답하고 정보를 갱신하는 서버를 프라이머리 네임서버라고 한다.


-Secondary server(세컨더리 네임서버): 프라이머리서버에 부하가 많이 걸릴 경우 분산하기 위해 사용하거나 프라이머리서버의 자료를 백업하여 두고 프라이머리서버에 장애가 발생하면 프라이머리서버의 역할을 위임 받아서 동작하는 서버


-Master Server(마스터 네임서버): 세컨더리서버의 관점에서 볼 때 도메인 설정 자료를 백업해 오는 원본서버를 지칭


-Slave Server(슬라이브 네임서버): 마스터서버의 관점에서 볼 때 자신의 설정자료를 백업하기 위해 가져가는 서버를 지칭


-Cache Only Server(캐시온리 네임서버): 스스로 관리하는 zone은 없고 단지 반복되는 질의만을 전문적으로 수행하는 서버이다.


-Forwarder Server(포워드 서버): 질의를 해석하기 위해 다른 DNS 서버로 다시 질의를 요청하는 서버를 말한다.


[root@kangtest php-5.2.1]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1      localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 kangtest kangtest


hosts 파일에 지정되지 않은 도메인은 resolv.conf를 참조한다.

[root@kangtest php-5.2.1]# cat /etc/resolv.conf

# Generated by NetworkManager

nameserver 168.126.63.1


<DNS 네임서버와 리졸버 개요>

DNS는 크게 다음의 3가지 요소로 구성된다.

1) 도메인네임 공간(Domain Name Space)과 리소스 레코드(Resource Record)

  • 도메인 네임 공간은 도메인네임의 구성과 그 구조를 정의하는 반면, 리소스 레코드는 하나의 도메인네임이 가질 수 있는 속성정보군을 정의한다.


2) 네임서버(Name Server)

  • 네임서버는 도메인 데이터베이스의 일정영역(zone)을 소유하고 있는 DNS서버이다. 도메인 데이터베이스는 DNS 체계에 따라 분산구조를 지니고 있다.

  • 네임서버는 두가지의 모드로 동작할 수 있다.

  1. 리커시브가 아닌 모드(non-recursive mode)

  • 네임서버가 기본적으로 동작하는 동작 모드

  1. 리커시브 모드(recursive mode)

  • 네임서버가 옵션기능으로 구현, 동작할 수 있는 동작 모드이다.


3) 리졸버(Resolver)

  • 리졸버는 도메인네임서버와 사용자 프로그램(user program)간의 인터페이스의 기능을 한다.


--------------------------------------------------------------------------------------------------------------------------------------

<설치되어있는 bind 패키지>

[root@kangtest ~]# rpm -qa|grep bind

bind-utils-9.8.2-0.30.rc1.el6_6.1.x86_64

ypbind-1.20.4-30.el6.x86_64

samba-winbind-clients-3.6.23-12.el6.x86_64

bind-9.8.2-0.30.rc1.el6_6.1.x86_64

samba-winbind-3.6.23-12.el6.x86_64

bind-libs-9.8.2-0.30.rc1.el6_6.1.x86_64

rpcbind-0.2.0-11.el6.x86_64

PackageKit-device-rebind-0.5.8-23.el6.x86_64

bind-chroot-9.8.2-0.30.rc1.el6_6.1.x86_64


<패키지 설치>

[root@kangtest ~]# yum install -y bind

Loaded plugins: fastestmirror, refresh-packagekit, security

Setting up Install Process

Loading mirror speeds from cached hostfile

* base: centos.tt.co.kr

* extras: centos.tt.co.kr

* rpmforge: ftp.riken.jp

* updates: centos.tt.co.kr

base                                                                                                                                                                                 | 3.7 kB 00:00

extras                                                                                                                                                                               | 3.4 kB 00:00

rpmforge                                                                                                                                                                             | 1.9 kB 00:00

updates                                                                                                                                                                              | 3.4 kB 00:00

Package 32:bind-9.8.2-0.30.rc1.el6_6.1.x86_64 already installed and latest version

Nothing to do


<네임서버 정보 검색 유틸리티>

  1. host

  2. dig

  3. nslookup


host : 네임서버에 질의하여 호스트의 IP를 얻을 수 있는 가장 기본적이며 간단한 유틸리티

"host [찾고자 하는 호스트이름]"의 형태로 질의한다.

→ google 검색 결과

[root@kangtest ~]# host www.google.com

www.google.com has address 74.125.203.99

www.google.com has address 74.125.203.106

www.google.com has address 74.125.203.104

www.google.com has address 74.125.203.103

www.google.com has address 74.125.203.147

www.google.com has address 74.125.203.105

www.google.com has IPv6 address 2404:6800:4008:c02::63


dig :  최근에 많이 사용하고 있는 네임서버 검색 유틸리티이며, 기본형식으로 "dig[찾고자 하는 호스트이름]"형식을 사용한다.

→ google 검색 결과

[root@kangtest ~]# dig www.google.com


; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> www.google.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41958

;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 4, ADDITIONAL: 4


;; QUESTION SECTION:

;www.google.com.    IN    A


;; ANSWER SECTION:

www.google.com.    274    IN    A    74.125.203.105

www.google.com.    274    IN    A    74.125.203.106

www.google.com.    274    IN    A    74.125.203.147

www.google.com.    274    IN    A    74.125.203.99

www.google.com.    274    IN    A    74.125.203.103

www.google.com.    274    IN    A    74.125.203.104


;; AUTHORITY SECTION:

google.com.    68434    IN    NS    ns2.google.com.

google.com.    68434    IN    NS    ns3.google.com.

google.com.    68434    IN    NS    ns1.google.com.

google.com.    68434    IN    NS    ns4.google.com.


;; ADDITIONAL SECTION:

ns1.google.com.    235371    IN    A    216.239.32.10

ns2.google.com.    236039    IN    A    216.239.34.10

ns3.google.com.    236411    IN    A    216.239.36.10

ns4.google.com.    236441    IN    A    216.239.38.10


;; Query time: 11 msec

;; SERVER: 168.126.63.1#53(168.126.63.1)

;; WHEN: Tue Dec 30 15:39:09 2014

;; MSG SIZE  rcvd: 264


nslookup : 네임서버 질의시 가장 많이 사용하는 유틸리티이며, "nslookup [찾고자 하는 호스트이름][질의할 네임서버]"의 형식을 사용한다.

질의할 네임서버를 지정하지 않으면  /etc/resolv.conf에 지정된 네임서버에게 질의한다.


[root@kangtest ~]# nslookup www.google.com

Server:    168.126.63.1

Address:    168.126.63.1#53


Non-authoritative answer:

Name:    www.google.com

Address: 74.125.203.99

Name:    www.google.com

Address: 74.125.203.103

Name:    www.google.com

Address: 74.125.203.104

Name:    www.google.com

Address: 74.125.203.105

Name:    www.google.com

Address: 74.125.203.106

Name:    www.google.com

Address: 74.125.203.147


nslookup은 실행 후 대화형 프롬프트 >를 표시하고 /etc/resolver.conf에 정의된 첫번째 네임서버를 기본 질의 서버로 설정한다.


nslookup은 기본적으로 입력된 도메인에 대해 A레코드를 검색하고, IP주소(in-addr.arpa)에 대해서는 PTR레코드를 검색한다.


<네임서버 운영을 위한 설정파일>

bind-9.2 버전까지는 /etc/named.conf 파일을 사용하였으나 bind-9.3 버전부터(CentOS 5.X RPM)는 named.caching-nameserver.conf파일을 사용하고 있다.

이 파일은 named.rfc1912.zones 파일의 존파일 설정파일을 include 하고 있다.


named.conf 내부

options {

11      listen-on port 53 { 127.0.0.1; };  

네임서버의 포트번호와 접근할 수 있는 IP를 설정하는 지시자(외부에서 네임서버로 접근을 허용해야 한다면 포트 지시자에 허용 ip 부분에 any를 입력하여 외부와의 연결을 허용

12      listen-on-v6 port 53 { ::1; };

이 지시자는 ipv6 하의 네임서버 운영을 설정하는 것으로 현재는 필요하지 않다.

13      directory    "/var/named";

이 지시자는 DNS 의 zone파일의 위치를 지정하는 곳 zone파일의 기본 설정파일들은 /var/named 디렉토리에 모두 위치해 있다.

14     dump-file    "/var/named/data/cache_dump.db";

캐시 덤프 파일이 생성되는 파일의 절대경로 위치를 지정하는 지시자

15     statistics-file "/var/named/data/named_stats.txt";

통계파일이 생서되는 절대경로와 파일이름을 지정하는 지시자

16      memstatistics-file "/var/named/data/named_mem_stats.txt";

메모리 관련 통계파일이 생성되는 절대경로와 파일이름을 지정하는 지시자

17      allow-query { localhost; }; → any

네임서버 쿼리를 허용할 IP 혹은 IP 대역을 설정하는 지시자이다. 여기서는 외부와의 쿼리 허용을 위해서 any를 입력한다.

18      recursion yes;

외부에서 현재의 네임서버를 지정하여 사용할 수 있게 하느냐, 사용할 수 없게 하느냐를 설정하는 지시자이다. 네임서버 쿼리시에도 이 지시자의 설정에 따라 쿼리결과를 얻을 수 없도록 설정 할 수 있다. 기본은 yes로 되어있으나, 네임서버 보안을 위하여 no로 설정하도록 한다.

19

20      dnssec-enable yes;

21      dnssec-validation yes;

22      dnssec-lookaside auto;

23

24      /* Path to ISC DLV key */

25      bindkeys-file "/etc/named.iscdlv.key";

26

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

28 };

29

30 logging {

31      channel default_debug {

32              file "data/named.run";

33              severity dynamic;

34      };

35 };

이 부분은 네임서버 실행에 있어서 디버깅시 참고 할 수 있는 로그파일생성 위치를 지정하는 지시자이다. 네임서버에 에러가 발생하면 이 파일을 참고하여 디버깅하면 될 것이다.

36

37 zone "." IN {

38      type hint;

39      file "named.ca";

40 };

존파일에 정의되어 있는 (닷).의 의미는 루트 도메인이라는 뜻이며, 루트 도메인의 내용이 named.ca파일에 정의되어 있다고 알려주고 있다. type설정에서 hint라고 설정하면 루트도메인을 지정한다는 의미이며, master 라고 입력하면 1차 네임서버를 의미하고, slave 라고 입력하면 2차 네임서버를 지정한다는 의미이다.

41

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

43 include "/etc/named.root.key";

44


<네임서버 시작>

[root@kangtest ~]# /etc/rc.d/init.d/named start

Generating /etc/rndc.key:                               [  OK  ]

named 시작 중:                                          [  OK  ]


루트네임서버의 내용

[root@kangtest ~]# cat /var/named/named.ca

; <<>> DiG 9.9.4-P2-RedHat-9.9.4-12.P2 <<>> +norec NS . @a.root-servers.net

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26229

;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 24


;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 1472

;; QUESTION SECTION:

;.    IN    NS


;; ANSWER SECTION:

.    518400    IN    NS    a.root-servers.net.

.    518400    IN    NS    b.root-servers.net.

.    518400    IN    NS    c.root-servers.net.

.    518400    IN    NS    d.root-servers.net.

.    518400    IN    NS    e.root-servers.net.

.    518400    IN    NS    f.root-servers.net.

.    518400    IN    NS    g.root-servers.net.

.    518400    IN    NS    h.root-servers.net.

.    518400    IN    NS    i.root-servers.net.

.    518400    IN    NS    j.root-servers.net.

.    518400    IN    NS    k.root-servers.net.

.    518400    IN    NS    l.root-servers.net.

.    518400    IN    NS    m.root-servers.net.


;; ADDITIONAL SECTION:

a.root-servers.net.    518400    IN    A    198.41.0.4

b.root-servers.net.    518400    IN    A    192.228.79.201

c.root-servers.net.    518400    IN    A    192.33.4.12

d.root-servers.net.    518400    IN    A    199.7.91.13

e.root-servers.net.    518400    IN    A    192.203.230.10

f.root-servers.net.    518400    IN    A    192.5.5.241

g.root-servers.net.    518400    IN    A    192.112.36.4

h.root-servers.net.    518400    IN    A    128.63.2.53

i.root-servers.net.    518400    IN    A    192.36.148.17

j.root-servers.net.    518400    IN    A    192.58.128.30

k.root-servers.net.    518400    IN    A    193.0.14.129

l.root-servers.net.    518400    IN    A    199.7.83.42

m.root-servers.net.    518400    IN    A    202.12.27.33

a.root-servers.net.    518400    IN    AAAA    2001:503:ba3e::2:30

c.root-servers.net.    518400    IN    AAAA    2001:500:2::c

d.root-servers.net.    518400    IN    AAAA    2001:500:2d::d

f.root-servers.net.    518400    IN    AAAA    2001:500:2f::f

h.root-servers.net.    518400    IN    AAAA    2001:500:1::803f:235

i.root-servers.net.    518400    IN    AAAA    2001:7fe::53

j.root-servers.net.    518400    IN    AAAA    2001:503:c27::2:30

k.root-servers.net.    518400    IN    AAAA    2001:7fd::1

l.root-servers.net.    518400    IN    AAAA    2001:500:3::42

m.root-servers.net.    518400    IN    AAAA    2001:dc3::35


;; Query time: 58 msec

;; SERVER: 198.41.0.4#53(198.41.0.4)

;; WHEN: Wed Apr 23 14:52:37 CEST 2014

;; MSG SIZE  rcvd: 727


<네임서버 존파일 작성법>

(/var/named 디렉토리)

네임서버를 운영하기 위해서는 존(zone)파일 설정이 가장 중요하다고 볼 수 있다. 도메인에 대한 존파일의 위치는 기본적으로  /var/named/ 디렉토리이다.

[root@kangtest ~]# vi /var/named/named.localhost(예시)

 1 $TTL 1D

 2 @    IN SOA  @ rname.invalid. (

 3                                      0    ; serial

 4                                      1D   ; refresh

 5                                      1H   ; retry

 6                                      1W   ; expire

 7                                      3H ) ; minimum

 8      NS   @

 9      A    127.0.0.1

10      AAAA ::1


위와 같은 존파일은 네임서버 관리자가 빈번히 수정하는 파일로써 각각의 의미를 충분히 이해하고 있어야 한다.

$TTL

$TTL항목은 Time To Live의 약자로써 이곳에 설정한 도메인에 대한 정보를 다른 네임서버에서 읽어간 다음 읽어간 네임서버측에 얼마동안 보관하고 있을 것인가를 설정하는 항목

설정값은 초단위로 설정 예로 $ TTL 86400의 의미는 86400초 즉, 하루 24시간을 의미한다.


@

존파일내의 @의 의미는 ORIGIN을 의미하는 특수문자로 public domain을 의미한다.


IN

IN 다음으로 나오는 우측 설정을 사용한다는 의미이다.


SOA

SOA는 start of authority의 약어로써 도메인네임서버에 대한 모든 정보를 가지고 있으며, 여기서 주의할 점은 도메인이름을 적은 다음에는 항상 닷(.) 루트 도메인을 표시하여야 한다는 점이다.


    0    ;serial

  1D   ; refresh

  1H   ; retry

  1W   ; expire

  3H ) ; minimum

위의 설정들은 모두 마스터 네임서버와 슬레이브 네임서버간의 연동설정을 위한 내용들이다.

NS   @

NS 레코드는 해당 도메인의 네임서버를 지정하는 레코드이다. NS 레코드 다음에 네임서버의 도메인(닷(.) 루트도메인 포함)을 입력한다.


MX

MX 레코드는 Mail Exchanger의 약어로 해당 도메인에 대한 메일서버를 지정하는 레코드 이다.

일반적으로 메일서버 여러개 사용할 때 MX 레코드 다음에 우선순위 번호를 지정하여 메일을 수신할 수 있다.


A    127.0.0.1

A 레코드는 해당 도메인의 실제 IP 주소를 설정하는 레코드이다.



반응형

+ Recent posts