본문 바로가기
Linux/NetAdmin

[CentOS5.11] DNS 서버 구축 실습

by Luuii 2017. 9. 10.

★ DNS 서버(BIND 9.x) on CentOS 5.X

 

 프로그램

  bind-chroot, bind-utils, bind, bind-libs + caching-nameserver

 데몬, 포트, 프로토콜

  /usr/sbin/named, 53(TPC/UDP)

 주 설정 파일

  /var/named/chroot/etc/named.{caching-nameserver.conf | rfc1912.zones}

 하위 설정 파일

  /var/named/chroot/var/named/*

 스크립트

  /etc/init.d/named

 

▶ /etc/hosts 파일을 사용하는 경우

▶ DNS 서버 구축

> Caching Only DNS Server 구축 ( 프로그램만 설치하면 된다.)

> linux213.example.com DNS Server 구축

▶ DNS 서버에 도메인 등록

▶ DNS 웹 부하 분산 구축

▶ DNS 서버에의 도메인 위임 설정

▶ Master/Slave DNS Server 구축

▶ Master/Slave DNS Server 환경에서 Zone Data 업데이트 실습

▶ rndc CMD 실습

▶ DNS 보안

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

 

실습 환경 :    CentOS5.11,    VMware Workstation Pro

네트워크 어댑터 : Bridge(eth0),    NAT(eth1)

DNS :    primary    DNS -> 8.8.4.4 (GOOGLE)

second    DNS -> 156.154.71.1 (기억이 안난다.)

1. # vi /etc/hosts

-> 아이피와 도메인입력.

 

1
2
3
4
5
  # Do not remove the following line, or various programs
  # that require network functionality will fail.
  127.0.0.1       localhost.localdomain   localhost   linux213
  ::1             localhost.localdomain   localhost6  localhost   linux213
  192.168.35.243  linux213.example.com    linux213
cs

 

인터넷 창에  URL입력시 브라우저는 /etc/host.conf를 조사.

 

/etc/host.conf 파일에는 IP주소를 얻기위해 무엇을 먼저 확인할지 결정하는 내용이 있다.

"order hosts,bind" 라고 적혀 있을 수도 있고 아무런 글이 안써져 있을 수도있다.  없어도 "order hosts,bind"가 써져있다고 본다.

"order hosts,bind" 의 의미는/etc/hosts 파일을 찾아본 후에 없다면

/etc/resolv.conf에 설정된 네임 서버에 질의하라는 의미이다.

2. # vi /etc/named.caching-namenumber.conf

-> 이 파일은 DNS서버에 대한 설정 값들이 담겨있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
options {
        listen-on port 53 { 127.0.0.1; };   # listen-on port 53 { any; }; -> 수정
                                            # 서버 "외부에서 53번 포트"를 이용해 통신할 수있게 하기 위해.
 
        listen-on-v6 port 53 { ::1; };        # 주석처리
 
        # 각 도메인의 zone 파일의 위치를 지정.
        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";            
 
        // Those options should be used carefully because they disable port
        // randomization
        // query-source    port 53;
        // query-source-v6 port 53;
 
        # 네임서버 쿼리를 허용할 IP 혹은 IP 대역을 설정
        allow-query         { localhost; };        # allow-query { any; }; 수정.
                                                # 도메인에 대한 설정 정보를 "조회"할 수 있게 하기 위해
 
        allow-query-cache { localhost; };        # -> 주석처리
};
 
# 네임서버 실행에 있어서 디버깅시 참고 할 수 있는 로그파일생성 위치 지정
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
 
view localhost_resolver {
        # localhost_resolver에 대한 허용 클리어인트 설정.
        match-clients      { localhost; };        # match-clients      { any; }; 수정
        match-destinations { localhost; };        # match-destinations { any; }; 수정
 
        # 공개용 네임서버 사용시 yes 상위질의 허용여부를 설정. yes 사용시 보안상 취약점 발생
        recursion yes;
        
        # 이 파일은 "/etc/named.rfc1912.zones" 요거를 포함하고 있다.
        include "/etc/named.rfc1912.zones";
};
cs

 

3. vi /etc/named.rfc1912.zones

-> /etc/named.caching-namenumber.conf 파일이 마지막 하단 부분에 러브콜을 보냈기 때문에 고백받은 입장에서 바로 봐줘야 예의다.
-> DNS서버에 IP와 도메인을 비교해주는 파일인 zone파일과 rev파일이 있는 경로와 정보가 있는 파일이다.

루트 힌트 내용이 하드 코딩되어 있는 소스 파일은 lib/dns/rootns.c 이라고 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
zone "." IN {                # IN -> internet
        type hint;
        file "named.ca";    # 힌트파일이 여기있나 보다.
};                            # 참고로 힌트파일은 말 그대로 힌트를 주는 파일.
 
zone "localdomain" IN {
        type master;
        file "localdomain.zone";
        allow-update { none; };
};
 
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };
};
 
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
 
#정방향과 역방향 매칭을 구분하는 구간.
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.ip6.local";
        allow-update { none; };
};
 
 
zone "255.in-addr.arpa" IN {
        type master;
        file "named.broadcast";
        allow-update { none; };
};
 
zone "0.in-addr.arpa" IN {
        type master;
        file "named.zero";
        allow-update { none; };
};
 
# 이거는 내가 사용 할 거.
zone "linux213.example.com" IN {         # 정방향 존(Forward)
        type master;    
        file "example213.zone";
};
 
zone "35.168.192.in-addr.arpa"  IN {    # 역뱡향 존(Reverse)
        type master;    
        file "example213.rev";  
};
 
 
cs

 

★ 편집을 끝내고 확인을 내가 잘 썻나 확인을 해보자

# named-checkconf <주설 정 파일의 이름>

# named-checkconf /var/named/chroot/etc/named.rfc1912.zones

>> 결과 값이 아무것도 안나오면 문법상으로는 문제가 없는거여.

 

4. zone 파일과 rev 파일을 만들자.

-> /etc/named.rfc1912.zones 이 마지막에 example213.zone 과 example213.rev 파일에 러브콜을 보냈다. 근데 고백받은 두개의 파일이쑥스러웠는지 안보인다. 직접 만나러 가보자.

 

 ①   # DNS    ( alias DNS='cd /var/named/chroot/var/named' )

 ②   cp localdomain.zone example213.zone

 ③   vi example213.zone

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# localdomain.zone
$TTL    86400
@               IN SOA  localhost root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN NS           localhost
 
localhost       IN A            127.0.0.1
 
 
 
 
# example213.zone
$TTL        4
@           IN SOA  ns1.linux213.example.com.   root.linux213.example.com.  (
                    43      ; serial (d. adams)
                    3H      ; refresh
                    15M     ; retry
                    1W      ; expiry
                    1D )        ; minimum
                            IN NS       ns1
ns1                         IN A        192.168.35.243
 
 
# WEB Server
;www                        IN  A       192.168.35.243
www                         IN  A       192.168.35.2
www                             IN  A       192.168.35.3
www                            IN  A       192.168.35.4
 
# FTP Server
ftp                         IN  A       192.168.35.243
 
# MAIL Server
linux213.example.com.       IN  MX 10   mail.linux213.example.com
mail                        IN  A       192.168.35.243
 
# ETC
cafe                        IN  A       192.168.35.243
cs

 

 

★ # named-checkzone <Domain Name> <Zone File>"

④  # named-checkzone linux213.example.com example213.zone

 

 

★ 참고

 ; (세미콜론)

 주석처리

$TTL

 Time To Live. 질의해 간 다른 네임서버가 해당 IP주소를 캐시에 저장하는 기간

 (3H - 3시간, 1D - 1일, 10M - 10분, 8600 - 24시간, 600 - 10분)

 @

 /etc/named.rfc1912.zones에 정의된 linux213.example.com을 의미.

 IN

 클래스 이름. internet를 뜻함.

 SOA

 Start Of Authority. 권한의 시작. 괄호 안의 숫자는 시간을 의미.

 serial(버전 정보)

 refresh(상위 네임 서버에게 업데이트된 정보를 요청하는 간격)

 retry(상위 네임 서버에 문제 발생시 재접속 간격)

 expire(상위 네임 서버에 접속 못할 경우 이전의 정보를 파기하는 간격)

 minimum(이 시간 이후에 정보가 삭제됨)을 말함. H는 Hour, D는 Day, W는 Week의 약자.

 NS

 Name Server. 설정된 도메인의 네임 서버 역할을 하는 컴퓨터를 지정.

 MX

 Mail Exchanger. 메일 서버 컴퓨터를 설정.

 IN MX 10 mail.uzuro.com.

 10은 메일주소의 우선순위를 위한 숫자

 A

 호스트 이름에 상응하는 IP주소를 지정.

 CNAME

 호스트 이름에 대한 별칭을 부여할 때 사용.

 

⑤ # cp named.local example213.rev

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# named.local
$TTL    86400
@       IN      SOA     localhost. root.localhost.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN      NS      localhost.
1       IN      PTR     localhost.
 
 
 
# example213.rev
TTL    4
@           IN      SOA     ns1.linux213.example.com.    root.linux213.example.com.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
            IN      NS      ns1.linux213.example.com.
243         IN      PTR     ns1.linux213.example.com.
 
 
 
cs

 

 

⑥ named-checkzone 35.168.192.in-addr.arpa example213.rev

 

 

-> 편집한 zone 파일과 rev 파일을 /var/named에 심볼링 링크를 걸어주자

 

⑦ ln -s /var/named/chroot/var/named/example213.zone /var/naemd/example213.zone

 

⑧ ln -s /var/named/chroot/var/named/example213.rev /var/naemd/example213.rev

 

 

 

5. chwon root:named

-> /var/named/chroot/var/named 안에 있는 것들은 모두 named 그룹에 속해야 한다.

 

 

① # DNS

② # chown root:named example213.*

③ # chown root:named named.ca

 

6. TEST

-> 주 설정 파일이나 zone, rev 파일을 건들면 named 서비스를 다시 실행시켜줘야한다.

 

# service named restart

-> named 서비스를 재기동 시킬 때는 항상 로그화면을 띄우고 재기동 시킨다.

 

[ terminal 1 ]

# mlog    (alias mlog='tail -f /var/log/messages)

 

[ terminal 2 ]

# service named restart

 

 

# nslookup

 

 

 

 

 

 

 

 

 

[참고 사이트]

http://dnssec.tistory.com/11

http://itdexter.tistory.com/262

http://webdir.tistory.com/163

http://klero.tistory.com/entry/DNS-%EA%B5%AC%EC%B6%95-%EB%B0%8F-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

http://mslee89.tistory.com/89

http://faq.hostway.co.kr/Linux_DNS/2254

반응형