본문 바로가기

Learning/ └Essential & Admin

DNS Server Guide(수정중)

 

 

 

 

 

 

 

DNS Server Guide

 

DNS 개요

도메인 관련 용어

DNS 동작 원리

DNS 실습

DNS 보안 및 참고

 

 

 

1

DNS(Domain Name System) 개요

 

DNS 서버가 있어야 인터넷을 할수 있다.

DNS 서버의 목적

DNS 서버의 역할

 

■ DNS (Domain Name System)

 

Web Broswer 웹브라우저: http://www.daum.net

www.daum.net 에 대한 ip정보가 필요하다.

(ㄱ) /etc/hosts 에서 탐색 그래도 없으면

(ㄴ) /etc/resolv.conf DNS 서버에서 탐색

ip를 탐색하여 찾아서 브라우저 네임에 ip를 입력하여 송신하여준다.

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

일반인들이 모든 ip를 외워서 사용할수 없다

이름에 관한 ip정보를 누군가 제공을 해 주어야 하고 그 것이 DNS 이다.

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

DNS 역할

다른 호스트에 접속시 ip 주소가 반드시 필요하다.
그러나 ip 주소는 기억하기 어려우므로 보통 도메인 이름을 사용한다.
그래서 필요한 것이 DNS 이다.

도메인에 대한 해당 ip 주소를 알려주는것이 DNS 의 주된 역할이다.


도메인이 ip 주소로 변환되는 과정.

1. 클라이언트: http://www.abc.co.kr 
2. ip 주소가 아니므로 클라이언트는 ip주소를 알아내기 위해 /etc/host.conf 파일 참조
  여기에 order hosts,bind 로 설정되어 있으면 /etc/hosts 에서 해당도메인 정보를 찾고
  없으면 그 다음 /etc/resolv.conf 파일을 참조한다. 적혀있는 순서대로 참조한다.
3. /etc/hosts 파일에 없다고 가정하면 /etc/resolv.conf 를 참조하게 되고
  거기에 nameserver 168.126.63.1 이 적혀 있으면 그 주소의 서버에게 도메인 주소를
  알려 달라고 요청한다.
4. 168.126.63.1 의 dns 서버가 자신이 가지고 있는 dns zone 설정 파일을 참조해서
  해당되는 정보가 있으면 ip 를 알려준다.
5. 클라이언트는 ip 를 알게되었으므로 그 ip 를 가지고 서버에 접속한다.


*. 그런데 4번 단계에서 168.126.63.1(kornet) dns 가 www.abc.co.kr 에 대한 설정을 가지고 있지
  않으면 조금 복잡해진다.

  이런경우 코넷 dns는 최상위 계층에 존재하는 root dns 에게 www.abc.co.kr 에 대한 도메인 주소를
  물어본다.  실제 등록된 domain 주소에 대한 ip 주소는 root dns 는 전부 찾을 수 있다.

5.  root dns 는 www.abc.co.kr 에 대한 정보를 찾기 위해서 하위 몇단계를 거쳐 찾는다.
 그리고 그 정보를 코넷 dns 한테 알려준다.

6. 코넷 dns는 www.abc.co.kr 주소를 캐시영역에 저장해두고 찾은 ip 주소는 클라이언트에게 알려준다.

*. 그 다음 또 어떤 클라이언트가 코넷 dns에게 www.abc.co.kr 의 ip 를 알려달라고 요청하면
    이번에는 캐시에 그 정보가 저장되어 있으므로 root dns 에게 묻지 않고 바로 알려준다.

 

Name Server

 

네임서버란 , 어떤 이름을 한 형태에서 다른 형태로 변환시키는 프로그램을 말한다. 예를 들어, 인터넷은 도메인 이름을 IP 주소로 변환하는 도메인 이름 서버,

DNS에 의지하고 있다.

 

동적 DNS

DDNS, Dynamic DNS : DNS서버에 들어있는 내용을 원격에서 명령어를 통해서 업데이트 할 수 있는 설정

 

DHCP(1.1.1.1 - linux200.example.com) -- nsupdate --> DNS(1.1.1.1 - linux200.exampl.com)

 

DDNS는 주로 유동 IP 주소를 사용하는 컴퓨터들의 경우에도 DNS 정보를 쉽게 유지할 수 있도록 해주는 방법이다. 일반적으로, 인터넷 서비스 제공사업자는 사용

자가 인터넷에 접속해오면 그 시점 현재 사용되지 않는 IP 주소 중 하나를 임의로 골라 할당하게 되는데, 이 주소는 오직 그 사용자가 인터넷에 접속하고 있는 동

안에만 독점적으로 제공된다. 이런 방식을 사용하면 각 컴퓨터마다 고정된 IP 주소를 할당하는 방식에 비해 같은 개수의 IP 주소를 가지고도 훨씬 더 많은 수의

컴퓨터를 지원할 수 있게 된다.

 

그러나 자신의 도메인 이름과 IP 주소를 DNS에 등록해 사용하는 컴퓨터의 경우, 접속할 때마다 자주 IP 주소가 바뀌게 되므로 매우 불편한 일이다. DDNS 서비스

제공자는 사용자 컴퓨터에서 실행되는 특별한 프로그램을 이용, 인터넷 서비스 제공사업자에 의해 IP 주소가 새로이 부여될 때 마다 DNS 데이터베이스를 자동으

로 갱신해 준다.

 

이렇게 하면, 특정 도메인 이름에 대응되는 IP 주소가 자주 바뀌더라도 다른 사용자들이 그 컴퓨터에 접속하기 위해 새로 변경된 IP 주소를 알 필요 없이 전과 같

이 도메인 이름을 이용해 쉽게 접속할 수 있게 되는 것이다. 

 

 

리눅스 서버가 주로 사용되는 서비스 목록:

-> DNS, MAIL, FTP, WEB(WAS), CVS, Cluster Server, ....

 

일반적인 회사에서 많이 사용되고 있는 서비스 목록:

-> DNS, WEB, MAIL, FTP, DHCP, NTP, DB(Oracle), ....

 

 

 

2

도메인(Domain) 관련 용어

 

 

도메인 영역에 여러 서비스가 존재한다.

IP1 -> www    IP2 -> mail     IP3 -> ftp

DNS Server에 등록

 

 

3

DNS(Domain Name System) 동작 원리

 

초기 도메인 관리

Main Server의 HOST.TXT를 Domin Server 의 /etc/hosts 로 가져와서 매일 업데이트 하는 방식

초창기 인터넷에서는 전 세계의 인터넷에 연결된 컴퓨터가 많지 않아 네임서버만으로도 충분히 ip주소와 이름 관리가 가능했다.

인터넷 사용량이 확장되어 사용량이 많아지면서 부하량 이 생기고 불편함

 

현재 도메인 관리

BIND라는 BSD 기반의 유닉스 시스템( 새로운 도메인 관리 프로그램)

DNS를 구현하는 소프트웨어중 하나로 가장 널리 사용되고 있고 대부분의 시스템에 포팅되어있음

 

 

DNS(Domain Name System), BIND(Berkeley Internet Name Domain)

- BIND 4.X

- BIND 8.X

- BIND 9.X

- BIND 10.X

 

 

 

 

4

DNS 실습 1

 

 

[EX1] /etc/hosts 파일을 사용한 이전 도메인 관리 방식 실습

 

 

 

DNS 개념이 이전되기 이전에는 hosts파일에 도메인 주소와 IP주소를 mapping하여 정보를 제공해왔다. 인터넷 이용자의 증가로 인해 도메인 주소가 늘어나면서 더 이상 hosts파일에 저장 할 수 없는 양이 되었고 이에 따라 Domain Name Server에 질의를 통하여 IP 주소와 도메인 주소의 값을 매핑(Mapping)하였다. DNS 주소를 이용하지 않고 이전에 사용하던 방식의 /etc/hosts 파일을 이용하여 DNS 기능을 대신하여 보자!

 

 

/etc/hosts 파일에 기입할 IP 주소 확인

# nslookup www.naver.com  네이버 ip주소를 요청한다.

 

 

/etc/resolv.conf 파일에서 nameserver 삭제 실습이기 때문에 주석처리만 해놓기

# vi /etc/resolv.conf

기본적으로 nameserver 에 들어있는  168.126.63.1 은 KT DNS 주소이다. hosts에서 탐색하고 찾는 ip가 없으면

resolv에서 찾게 되는데 KT DNS 에서 네이버의 ip주소를 찾아서 검색하여 주는 방식

 

[참고] 

SK DNS 주소
기본 DNS: 210.220.163.82
보조 DNS: 219.250.36.130
  
KT DNS 주소
기본 DNS: 168.126.63.1
보조 DNS: 168.126.63.2
  
LG DNS 주소
기본 DNS: 164.124.101.2
보조 DNS: 203.248.252.2

구글 DNS 주소
기본 DNS: 8.8.8.8 
보조 DNS: 8.8.4.4

 

 

웹 브라우져에서 확인

# firefox http://www.naver.com

 

서버를 찾을수 없다

 

 

/etc/hosts 파일에 naver 도메인 정의

# vi /etc/hosts

 

1번에서 요청한 naver ip 주소를 새로운 라인에 입력하여 준다

202.131.29.71    www.naver.com

 

 

firefox 로 네이버를 검색 요청할때 1차적으로 hosts에서 탐색하여 주기 때문에

hosts 에 네이버의 이름과 ip를 입력해 놓으면 그대로 탐색하여 검색하여 준다.

 

 

CentOS 를 설치하면 /etc/hosts 에는 localhost 만 등록되어 있다.

DHCP로 IP를 받고 hostname 을 받은 경우, 자동으로 hosts 파일을 업데이트 할 수 있다.

 

웹 브라우져에서 확인

# firefox http://www.naver.com

 

vi /etc/hosts 에서

202.131.29.71(네이버ip) KIMhyeongjin(도메인이름) 으로 변경하여도

firefox http://KIMhyeungjin 명령어 입력시 네이버 환경 검색가능하다.

 

4

DNS 실습 2 (BIND DNS Server 구축)

 

 

 

(DNS Server의 종류)

Master DNS Server : 해당 도메인을 관리하는 DNS 서버(Primary DNS Server)

Slave DNS Server : 해당 도메인에 대한 백업 복사(Copy)를 유지하는 DNS 서버(Secondary DNS Server)

Cache only DNS Server : 캐싱 기능만 갖는 DNS 서버

Forwarding DNS Server : 포워딩 기능만 갖는 DNS 서버

 

도메인을 운영하기 위해서는 최소 2(Primary * 1, Secondary * n) 이상의 네임서버가 요구된다. (참고 : 기술적으로 Resolver의 입장에서는 PrimarySecondary가 구분되지 않기에 Primary 만으로도 운영은 가능하나 권고되진 않는다.)

 

Slave(또는 Secondary)Master(또는 Primary) DNS 서버가 비정상 운행될 때와 부하를 분산시키기 위해 운용하며, 다수가 존재할 수 있다.

 

 

 

CentOS 5.4 버전에서는 BIND 9.3.6 버전이 설치 되어 있다.

 

패키지 : bind-chroot,bind-utils,bind,bind-libs + caching-nameserver

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

=========== DNS Server ===========

named(53, TCP/UDP)

/var/named/chroot/etc/named.caching-nameserver.conf

/var/named/chroot/etc/named.rfc1912.zones

DB : /var/named/chroot/var/named

==================================

- Forward Zone File(D==>IP)

- Reverse Zone File(IP==>D)

- localhost Zone File(Caching)

- hint File(named.ca)

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

 

 

 

 

[EX1] DNS 기본 설정 사항 점검

서버의 설정 사항을 확인해 본다.

 

BIND 패키지 설치 유무 확인

# rpm -qa | egrep '(bind|nameserver)'

 

bind-libs-9.3.6-4.P1.el5_4.2  BIND 프로그램 라이브러리

bind-utils-9.3.6-4.P1.el5_4.2  DNS 네임서버들에게 질의(Query)하는 명령어

bind-chroot-9.3.6-4.P1.el5_4.2  DNS chroot 구조

ypbind-1.19-12.el5

bind-9.3.6-4.P1.el5_4.2  BIND 프로그램

 

-> caching-nameserver 패키지가 설정파일들이 포함된 패키지인데 설치가 되어 있지 않다.

-> 만약 다른 프로그램도 설치가 되어 있지 않다면 설치 해야 한다.

# yum -y install bind bind-utils bind-libs bind-chroot caching-nameserver

 

설정 파일 확인

 

 

 

 

DNS 데몬과 포트 확인

# which named

 

/usr/sbin/named

 

 

# named -v

BIND 9.3.6-P1-RedHat-9.3.6-16.P1.el5

 

 

# grep domain /etc/services

domain 53/tcp # name-domain server

domain 53/udp

domaintime 9909/tcp # domaintime

domaintime 9909/udp # domaintime

 

 

기존의 패키지 삭제 및 새로운 패키지 설치

# yum install caching-nameserver (# yum -y install caching-nameserver)

 

 

설치된 패키지 중 caching-nameserver 패키지의 설치된 파일 목록 확인

# rpm -ql caching-nameserver

 

# ls -l /etc/named.* (# ls -l /var/named/chroot/etc )

-> /etc/named.caching-nameserver.conf 파일과 /var/named/chroot//etc/named.caching-nameserver.conf 파일이

심볼릭 링크로 걸려 있는 것을 확인 할 수 있다.

-> caching-nameserver 패키지가 설치되면 여러가지 기본 설정파일들이 늘어난다는 것을 확인 할 수 있다.

 

# ls -l /var/named (# ls -l /var/named/chroot/var/named)

 

named 데몬 start (DNS 서비스 start)

# service named restart

-> 기본 설정 파일들이 생성 되었기 때문에 named 서비스를 restart 한다.

(참고) 서비스를 start 할때는 /var/log/messages 파일을 모니터링 하면서 서비스를 start 한다.

[TERM1] # tail -f /var/log/messages

[TERM2] # service named restart

 

# chkconfig named on

# chkconfig --list named

 

 

 

 

 

 

[EX2] DNS 서버 구축

 

실습시에는 다음과 같은 파일을 설정한다.

/var/named/chroot/etc/named.caching-nameserver.conf /* 주설정파일 */

/var/named/chroot/etc/named.rfc1912.zones /* 주설정파일 */

/var/named/chroot/var/named/named.ca /* 힌트 파일 */

/var/named/chroot/var/named/exampleXXX.zone /* 포워드 존파일 */

/var/named/chroot/var/named/exampleXXX.rev /* 리버스 존파일 */

 

 

설정파일들의 이름이 길기 때문에 필요하다면 ~/.bashrc 파일에 Alias로 등록하여 사용한다.

# vi ~/.bashrc

..... (중략) .....

#

# Log Monitoring

#

alias mlog='tail -f /var/log/messages'

 

#

# DNS Alias

#

alias named.caching-nameserver.conf='vi /var/named/chroot/etc/named.caching-nameserver.conf'

alias named.rfc1912.zones='vi /var/named/chroot/etc/named.rfc1912.zones'

alias DNS='cd /var/named/chroot/var/named'

#alias named-checkconf='named-checkconf /var/named/chroot/etc/named.caching-nameserver.conf'

 

-> ~/.bashrc 파일의 마지막 부분에 위와 같이 추가한다.

 

# . ~/.bashrc (# source ~/.bashrc)

(간단한 테스트)

# DNS

# named.rfc[TAB]

# named.cach[TAB]

 

 

 

DNS서버 설정 작업 절차

(주설정)

# vi /var/named/chroot/etc/named.caching-nameserver.conf

# vi /var/named/chroot/etc/named.rfc1912.zones

 

(ZONE 파일생성)

# vi /var/named/chroot/var/named/named.ca

# vi /var/named/chroot/var/named/example2XX.zone

# vi /var/named/chroot/var/named/example2XX.rev

 

(서비스 기동)

# service named restart

# chkconfig named on

 

 

주설정 파일 설정

# vi /etc/named.caching-nameserver.conf (# vi /var/named/chroot/etc/named.caching-nameserver.conf)

 

//

// named.caching-nameserver.conf

//

// Provided by Red Hat caching-nameserver 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.

//

// DO NOT EDIT THIS FILE - use system-config-bind or an editor

// to create named.conf - edits to this file will be lost on

// caching-nameserver package upgrade.

//

options {

listen-on port 53 { any; }; <----- '127.0.0.1' 부분을 'any'로 변경

// 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";

 

// Those options should be used carefully because they disable port

// randomization

// query-source port 53;

// query-source-v6 port 53;

 

allow-query { any; }; <----- '127.0.0.1' 부분을 'any'로 변경

// allow-query-cache { localhost; }; <----- 주석처리

};

logging {

channel default_debug {

file "data/named.run";

severity dynamic;

};

};

view localhost_resolver {

match-clients { any; }; <----- '127.0.0.1' 부분을 'any'로 변경

match-destinations { any; }; <----- '127.0.0.1' 부분을 'any'로 변경

recursion yes;

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

};

 

 

 

 

 

(ZONE) 파일? DNS에서의 정보 파일

(ZONE) 파일안에서의 주석 처리

() ; -> Window에서 사용하는 주석

() # -> Unix/Linux에서 사용하는 주석

() /* */ -> C 주석

() // -> C++ 주석

"directory "/var/named"" -> Zone 파일들이 위치할 디렉토리 지정() /var/named/exampleXXX.zone ----> /var/named/chroot/var/named/exampleXXX.zone /var/named/exampleXXX.rev ----> /var/named/chroot/var/named/exampleXXX.rev

"include "/etc/named.rfc1912.zones"" -> 포함시킬 설정 파일 지정/etc/named.rfc1912.zones 파일에 들어 있는 내용은 /etc/named.caching-nameserver.conf 파일에 존재하는 것이라고 생각하면 된다.

 

 

주 설정 파일 설정

# vi /etc/named.rfc1912.zones (# vi /var/named/chroot/named.rfc1912.zones)

 

zone "linux2XX.example.com" IN { /* Forward Zone */

type master;

file "example2XX.zone"; /* Forward Zone File : /var/named/exampleXXX.zone */

};

 

zone "9.16.172.in-addr.arpa" IN { /* Reverse Zone */

type master;

file "example2XX.rev"; /* Reverse Zone File : /var/named/exampleXXX.rev */

}; ip에 연결된 도메인

 

 

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

#

-> namedcheckconf 명령어는 주설정 파일(/etc/named.rfc1912.zones)의 문법 점검 하는 명령어이다.

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

-> 아무런 메세지가 없으면 정상적으로 설정된 것이다.

 

 

힌트(Hint) 파일 생성

# cd /var/named/chroot/var/named

# mv named.ca named.ca.old

# vi named.ca ( named.ca <-- hint 파일)

# mv named.cz named.ca.old 로 원본을 유지한채 작업한다.

. 86400 IN NS ns1.example.com.

ns1.example.com. 86400 IN A 172.16.9.252

-> 기존의 힌트파일(EX: named.ca)은 백업을 받고 새로운 파일를 만든다.

-> DNSchroot로 구성하여 동작시키는 경우에는 힌트파일의 소유자는 named로 되어 있어야 한다.

 

 

포워드 존(Forward-Zone) 파일 생성

# cp localdomain.zone example2XX.zone

# vi example2XX.zone

 

# named-checkzone linux2XX.example.com example2XX.zone

-> 'OK' 라고 나오면 정상적으로 설정된것이다.

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

 

리버스 존(Reverse-Zone) 파일 생성

# cp named.local example2XX.rev

# vi example2XX.rev

 

 

# named-checkzone 9.16.172.in-addr.arpa example2XX.rev

 

파일에 링크걸기 및 설정파일의 그룹권 변경

# ln -s /var/named/chroot/var/named/example2XX.zone /var/named/example2XX.zone

# ln -s /var/named/chroot/var/named/example2XX.rev /var/named/example2XX.rev

# cd /var/named

# ls -l

 

# cd /var/named/chroot/var/named ; ls l

# chown root:named example2XX.* (# chgrp named example*)

# chown root:named named.ca (# chgrp named named.ca)

 

DNS Zonechroot 구성으로 된 경우

root:root 로 되어있으면 데몬이 설정파일을 읽어 들이지 못한다. root:named로 변경하여야 한다.

 

# service named restart

 

네임서버 테스트

DNS 클라이언트 설정 변경 (네임서버 시작)

# vi /etc/resolv.conf /* 네임 서버를 여러개 적어도 총 3개까지만 인식 */

 

 

nslookup 명령어로 DNS 서버 등록 내용 확인

 

DNS 서버에게 질의(Query) 할수 있는 명령어

- nslookup CMD (# nslookup www.daum.net)

- dig CMD (# dig www.daum.net)

- host CMD (# host www.daum.net)

 

nslookup 명령어 사용하는 방식

- 대화형 모드(Interractive Mode) 형태로 실행

# nslookup

> ns1.linux2XX.example.com

> exit

- 비대화형 모드(Non-Interractive Mode) 형태로 실행

# nslookup ns1.linux2XX.example.com

 

 

 

 

 

 

 

[EX3] 도메인 등록

 

RR(Record Type, Resource Record) 종류에 따른 등록 방법

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

NS: nameserver,

MX:mailserver2 A: Adress 이름/ip

 

 

() NS Record Type (Name Server)

linux2XX.example.com. IN NS ns1.linux2XX.example.com.

ns1.linux2XX.example.com. IN A 172.16.9.2XX

 

() A Record Type (Address)

www.linux2XX.example.com. IN A 172.16.9.2XX

ftp.linux2XX.example.com. IN A 172.16.9.2XX

cafe.linux2XX.example.com. IN A 172.16.9.2XX

 

() MX Record Type (Mail Exchange)

linux2XX.example.com. IN MX 10 mail.linux2XX.example.com.

mail.linux2XX.example.com. IN A 172.16.9.2XX

linux2XX.example.com. IN MX 20 mail2.linux2XX.example.com.

mail2.linux2XX.example.com. IN A 172.16.9.241

한 개의 도메인에 두 개의 메일서버가 셋팅 되있는데 0보다 큰 숫자만 쓰면 된다.

작은 숫자가 우선순위가 높다. 작은 숫자의 메일이 죽었을 경우 두 번째 메일로 간다.동시에 보내지는 것은 아니다. 작은 숫자를 먼저 입력한다

 

() CNAME Record Type (Canonical Name)

www IN A 172.16.9.2XX

ftp IN A 172.16.9.2XX

or

www IN A 172.16.9.2XX

ftp IN CNAME www

같은 서버에 두 개의 이름을 부여한 것. WWW의 어드레스, ftp의 어드레스 가 다르지만

alias가 되어있어 동일한 서버로 생각한다.

 

() PTR Record Type (Pointer Address)

2XX IN PTR ns1.linux2XX.example.com.

2XX IN PTR www.linux2XX.example.com.

 

리버스 존 파일 / 앞에는ip 뒤에는 전체도메인 ip2XX라고 쓰면 뒤에 나머지가 자동으로 붙는다

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

 

 

(시나리오) 도메인 등록 요청이 들어 왔다. 요청이 들어온 내용을 확인해 보면 다음과 같다.

WEB 서버 등록 요청: www.linuxXXX.example.com -> 172.16.9.XXX

FTP 서버 등록 요청: ftp.linuxXXX.example.com -> 172.16.9.XXX

MAIL 서버 등록 요청: mail.linuxXXX.example.com -> 172.16.9.XXX

CAFE 서버 등록 요청: cafe.linuxXXX.example.com -> 172.16.9.XXX

메일 서버는 두줄로 등록하고 나머지는 한줄로 등록 한다.

 

(도메인 등록 방법)

() Forward Zone 파일에 등록

# vi /var/named/chroot/var/named/exampleXXX.zone (Domain -> IP)

-> 반드시 등록 해야 함. (www IN A 172.16.9.2XX)

() Reverse Zone 파일에 등록

# vi /var/named/chroot/var/named/exampleXXX.rev (IP -> Domain)

-> 반드시 등록할 필요 없음. (2XX IN PTR www)

DNS서버에 관련된 정보는 양쪽에 둘 다 등록되어 있어야 한다.

 

 

Forward Zone 파일에 등록

# cd /var/named/chroot/var/named

# vi example2XX.zone

 

 

-> 실습할 때는 Reverse Zone 파일에 등록하지는 않는다.

-> Reverse Zone 파일에는 반드시 등록할 필요가 없기 때문이다.

-> 이 파일에 Zone Entry를 등록할 때 필드와 필드 구분은 탭/스페이스로 한다.(권장: )

 

 

 

IN = 인터넷

A = 어드레스

 

# cat /etc/resolv.conf

 

# service named restart

 

-> Zone 파일이 수정되면 변경된 사항을 적용시키기 위해서 데몬(named) restsart가 필요하다.

-> 서비스를 restart 할때는 반드시 /var/log/messages 파일을 같이 모니터링 한다.

# nslookup www.linux2XX.example.com (# nslookup www)

# nslookup ftp.linux2XX.example.com (# nslookup ftp)

# nslookup cafe.linux2XX.example.com (# nslookup cafe)

# nslookup -q=MX linux2XX.example.com

 

 

DNS와 웹서버 연동

 

 

 

# ls /etc/httpd/conf --> httpd.conf 파일 존재 확인

httpd.conf magic

 

# ls /var/www/html --> index.html 파일 존재 확인

#

-> index.html 파일 존재하지 않는다.

# cp /etc/passwd /var/www/html/index.html

 

# service httpd restart

Stopping httpd: [FAILED]

Starting httpd: [ OK ]

 

[참고] 리눅스에서 호스트이름(Hostname) 변경하는 경우

# system-config-network-tui

or

# vi /etc/sysconfig/network 파일 수정

# vi /etc/hosts <----- 일부 프로그램들이 호스트이름을 확인(: oracle, apache, ....)

# service network restart

 

[참고] "service httpd restart" 에러메세지

# service httpd restart

Stopping httpd: [FAILED]

Starting httpd: httpd: apr_sockaddr_info_get() failed for linux249.example.com

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for

ServerName

# vi /etc/hosts

.......

172.16.9.2XX linux2XX.example.com linux2XX

# service httpd restat

 

# pgrep -lf httpd (# ps -ef | grep httpd)

 

 

윈도우 창에서 확인(IP 확인)

(Linux) # firefox http://172.16.9.2XX

 

윈도우 창에서 확인(도메인 이름으로 확인)

(Linux) # firefox http://www.linux2XX.example.com

 

# cd /var/www/html

# vi index.html

html태그 수정

 

 

 

윈도우 창에서 확인 (http://www.linux2XX.example.com)

-> http://www.linux2XX.example.com

-> 파트너시스템들에 대해서 http://www.linux249.example.com 요청을 해 본다.

 

(Linux) # firefox http://www.linux2XX.example.com

(Linux) # firefox http://www.linux249.example.com

 

[정리]

cd /var/www/html ; vi index.html

 

firefox http://www.linux209.example.com

 

 

 

 

[EX3] DNS 부하 분산(DNS Load Balancing)

 

nslookup www.daum.net

-> 1~2초 정도에 한번씩 nslookup 명령어를 통해 정보를 요청해 보면, 첫번째 오는 아이피 주소가 변경된다는 것을

알수 있다. 출력된 내용의 첫번째 아이피쪽으로 도메인에 대한 IP 요청을 하게 된다.

 

 

 

(시나리오) 다음과 같이 도메인 등록을 해 달라고 요청이 들어왔다. 하나의 도메인 이름에 대해서 3개의 아이피가

연결 된다고 한다.

도메인이름(www.linux2XX.example.com) -> (172.16.9.2, 172.16.9.3, 172.16.9.4)

 

Forward Zone 파일에 등록

# cd /var/named/chroot/var/named

# vi example2XX.zone

 

 

# service named restart

-> Zone 파일 수정 내용 적용

 

nslookup 명령어 를 통해서 확인 할 수 있다.

 

 

[EX5] Master DNS Server / Slave DNS Server 구축

 

 

 

실습 구조(Master/Slave DNS Server)

 

(전제조건) Master DNS ServerClone을 통해 Slave DNS Server를 구축한다.

[Master DNS Server] Original OS

Master DNS Server 네트워크 설정 파일들의 MAC 주소를 삭제한다.

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

# vi /etc/sysconfig/network-scripts/ifcfg-eth1

[Master DNS Server] Original OS

Master DNS ServerClone 뜨기 위해서는 시스템이 Down 상태에서 가능하다.

# poweroff (# init 0, # halt, # shutodown -h now)

VMWare > VM > Clone

- 빠르게 작업하기 위해서 Link Clone을 수행한다.

- Clone 이미지의 위치는 D:\오전반\VMWareImage\DNS_Slave

 

[Slave DNS Server] Clone OS

Power ON

/etc/hosts 파일 편집 (-> # service sendmail restart)

172.16.6.1XX linux1XX.example.com linux1XX

 

네트워크 설정

# export LANG=en_US.UTF-8

# setup

- 호스트 이름 : linux2XX.example.com -> linux1XX.example.com

*호스트 이름만 변경한다

- 아이피 : (eth0) 172.16.6.2XX -> 172.16.6.1XX

(eth1) 192.168.10.2XX -> 192.168.10.1XX

# service network restart

 

로그아웃 -> 로그인

 

[Master DNS Server] Original OS (원본 운영체제 실행)

Power ON

 

Master DNS Server : 172.16.6.2XX (ns1.linuxXXX.example.com)

Slave DNS Server : 172.16.6.1XX (ns2.linuxXXX.example.com)

 

한개의 도메인(example2XX.com)에 두개의 DNS 서버(ns1/ns2.example2XX.com)가 존재한다.

두개의 DNS 서버는 각각 다른 IP(172.16.9.2XX/172.16.9.1XX)를 가지고 있다.

(윈도우) cmd.exe

<CTRL + ESC> => "cmd"

C:\> nslookup q=NS seoul.ac.kr

C:\> nslookup q=NS kornet.net

C:\> nslookup q=NS naver.com

C:\> nslookup q=NS daum.net

 

 

[Master DNS Server] 172.16.9.2XX

-> Master DNS 서버의 전원 ON

 

주설정 파일 정보 확인 및 설정

Master DNS 서버에서 주 설정 파일은 특별히 설정할 필요가 없다.

 

# cat /etc/named.caching-nameserver.conf (# vi /var/named/chroot/etc/named.caching-nameserver.conf)

-> 정보만 확인

 

 

 

 

 

# vi /etc/named.rfc1912.zones (# vi /var/named/chroot/etc/named.rfc1912.zones)

..... (중략) .....

zone "0.in-addr.arpa" IN {

type master;

file "named.zero";

allow-update { none; };

};

 

zone "linux2XX.example.com" IN {

type master;

file "exampleXXX.zone";

also-notify { 172.16.6.1XX; 172.16.6.2XX; }; <----- 라인 추가

};

 

zone "9.16.172.in-addr.arpa" IN {

type master;

file "exampleXXX.rev";

also-notify { 172.16.6.1XX; 172.16.6.2XX; }; <----- 라인 추가

};

"also-notify { 172.16.9.140; 172.16.9.2XX; };" 자신의 Slave DNS 서버에게 변경 사항을 알려주는 설정

(주의) 이 설정이 없으면, 실시간적으로 Slave DNS 서버에 업데이트가 가능하지 않다.

Forward-Zone/Reverse-Zone 파일 설정

# cd /var/named/chroot/var/named

# ls

data example2XX.zone localhost.zone named.ca named.ip6.local named.zero

example2XX.rev localdomain.zone named.broadcast named.ca.old named.local slaves

-> Forward Zone, Reverse Zone 파일을 변경할 것이다.

 

# vi example2XX.zone

$TTL 4

@ IN SOA ns1.linux2XX.example.com. root.linux2XX.example.com. (

42 ; serial (d. adams)

3H ; refresh

15M ; retry

1W ; expiry

1D ) ; minimum

IN NS ns1

IN NS ns2 <----- 새로운 라인 추가

ns1 IN A 172.16.9.2XX

ns2 IN A 172.16.9.1XX <----- 새로운 라인 추가

yy p 명령어로 복사 붙여놓기 가능

;; (1) Web Server

;www IN A 172.16.9.2XX

www IN A 172.16.9.2

www IN A 172.16.9.3

www IN A 172.16.9.4

 

;; (2) FTP Server

ftp IN A 172.16.9.2XX

 

;; (3) MAIL Server

IN MX 10 mail

mail IN A 172.16.9.2XX

 

;; (4) etc

cafe IN A 172.16.9.2XX

 

# vi exampleXXX.rev

$TTL 4

@ IN SOA ns1.linuxXXX.example.com. root.linuxXXX.example.com. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns1.linux2XX.example.com.

IN NS ns2.linux2XX.example.com. <----- 새로운 라인 추가

2XX IN PTR ns1.linux2XX.example.com.

1XX IN PTR ns2.linux2XX.example.com. <----- 새로운 라인 추가

 

존 파일 수정 적용

/var/log/messages 파일을 모니터링 하면서 namedrestart 한다.

 

[TERM1] # tail -f /var/log/messages

[TERM2] # service named restart

트러블 슈팅의 기본 모니터링 하면서 서비스 리스타트

DNS이상시(데몬 기동시 이상이 있었으면 로그 파일을 보면 알 수 있다.)

 

# nslookup -q=NS linux2XX.example.com

Server: 172.16.9.249

Address: 172.16.9.249#53

 

linux249.example.com nameserver = ns1.linux249.example.com.

linux249.example.com nameserver = ns2.linux249.example.com.

 

[Slave DNS Server]

-> Slave DNS 서버의 전원 ON

 

네트워크 설정

Slave DNS 서버는 Master DNS 서버를 Clone 한것이므로 IP 설정이 같다. 따라서 IP 설정이 중첩되므로 IP 설정 부터 해야 한다.

Slave DNS 서버를 부팅한 후에 "system-config-network-tui" 실행후 IP 설정을 할 때, DHCP에 체크가 되어 있을 것이다. 그럼 DHCP 체크를 제거하고 IP 설정을 한다.

 

# system-config-network-tui (# setup)

-> 네트워크 설정을 한다.

 

Static IP : 172.16.9.1XX / 255.255.255.0

DNS Server : 172.16.9.2XX

DNS Server : 172.16.9.1XX

 

Hostname : linux1XX.example.com

Primary DNS : 172.16.9.2XX

 

/etc/hosts 파일 편집

/etc/sysconfig/network-scripts/ifcfg-(eth0|eth1).bak 삭제

 

# service network restart

-> 설정 내용 적용

 

주 설정 파일 확인 및 설정

 

(필요하면 명령어 수행)

# vi /etc/resolv.conf

# yum -y install caching-nameserver

# vi /etc/named.caching-nameserver.conf

# vi /etc/named.rfc1912.zones

# cd /var/named/chroot/var/named

# ls

 

 

# cat /etc/named.caching-nameserver.conf

# vi /etc/named.rfc1912.zones

..... (중략) .....

};

 

zone "0.in-addr.arpa" IN {

type master;

file "named.zero";

allow-update { none; };

};

 

zone "linux2XX.example.com" IN {

type slave; <----- 정보변경(master -> slave)

masters { 172.16.6.2XX; }; <----- 새로운 라인 추가(172.16.9.2XX : Master DNS Server)

file "slaves/example2XX.zone"; <----- 정보변경

};

 

zone "6.16.172.in-addr.arpa" IN {

type slave; <----- 정보변경(master -> slave)

masters { 172.16.6.2XX; }; <----- 새로운 라인 추가(172.16.9.2XX : Master DNS Server)

file "slaves/example2XX.rev"; <----- 정보변경

};

 

# service named restart

-> 변경 내용 적용

 

존 파일 확인

# cd /var/named/chroot/var/named/slaves

# ls -l

-rw-r--r-- 1 named named 419 Aug 8 11:23 exampleXXX.rev

-rw-r--r-- 1 named named 567 Aug 8 11:23 exampleXXX.zone

-> 2개의 파일이 만들어진것을 확인 할 수 있다.

 

# cat exampleXXX.zone

$ORIGIN .

$TTL 4 ; 4 seconds

linuxXXX.example.com IN SOA ns1.linuxXXX.example.com. root.linuxXXX.example.com. (

42 ; serial

10800 ; refresh (3 hours)

900 ; retry (15 minutes)

604800 ; expire (1 week)

86400 ; minimum (1 day)

)

NS ns1.linuxXXX.example.com.

$ORIGIN linuxXXX.example.com.

cafe A 172.16.9.XXX

ftp A 172.16.9.XXX

MX 10 mail

mail A 172.16.9.XXX

ns1 A 172.16.9.XXX

www A 172.16.9.2

A 172.16.9.3

A 172.16.9.4

 

# cat exampleXXX.rev

$ORIGIN .

$TTL 4 ; 4 seconds

9.16.172.in-addr.arpa IN SOA ns1.linuxXXX.example.com. root.linuxXXX.example.com. (

1997022700 ; serial

28800 ; refresh (8 hours)

14400 ; retry (4 hours)

3600000 ; expire (5 weeks 6 days 16 hours)

86400 ; minimum (1 day)

)

NS ns1.9.16.172.in-addr.arpa.

$ORIGIN 9.16.172.in-addr.arpa.

140 PTR ns2

XXX NS ns2

PTR ns1

 

 

 

 

 

[EX6] 존 업데이트 실습

 

 

 

(선수지식) /var/named/chroot/var/named/(example2XX.zone or example2XX.rev)

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

@ IN SOA ns1.linux2XX.example.com. root.linux2XX.example.com. (

42 ; serial (d. adams) (master-slave)

3H ; refresh (master-slave)

15M ; retry (master-slave)

1W ; expiry (master-slave)

1D ) ; minimum (server-cliant)

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

S0A(Start Of Authority)

- [Domain] [TTL] IN SOA <DNS Server> <E-mail> (NNNN NNNN NNNN NNNN NNNN)

 

42 (Serial Number) (권장: 2010031100) 데이터 버젼

3H (Refresh Time) (권장: 12H, 1D) ~시간에 한번씩 동기화

15M (Retry Time) (권장: 15M ~ 1H) 동기화 안될 시 ~분당 재시도

1W (Expire Date) (권장: 1W) 자신의 정보를 버리고 masters정보를 가져오는

1D (TTL, Time To Live) (권장: 1D) caching하는 타임

 

 

 

[Master DNS Server] 172.16.9.2XX

Forward Zone 파일에 새로운 내용 업데이트

# vi /var/named/chroot/var/named/example2XX.zone

$TTL 4

@ IN SOA ns1.linuxXXX.example.com. root.linuxXXX.example.com. (

42 ; serial (d. adams)

3H ; refresh

15M ; retry

1W ; expiry

1D ) ; minimum

IN NS ns1

ns1 IN A 172.16.9.XXX

 

;; (1) Web Server

;www IN A 172.16.9.XXX

www IN A 172.16.9.2

www IN A 172.16.9.3

www IN A 172.16.9.4

 

;; (2) FTP Server

ftp IN A 172.16.9.XXX

 

;; (3) MAIL Server

IN MX 10 mail

mail IN A 172.16.9.XXX

 

;; (4) etc

cafe IN A 172.16.9.XXX

test IN A 172.16.9.2XX <----- 새로운 라인 추가

 

서비스 적용 및 확인

# service named restart

-> 서비스 적용

 

# nslookup test.linux2XX.example.com (# nslookup test)

Server: 172.16.9.XXX

Address: 172.16.9.XXX#53

 

Name: test.linuxXXX.example.com

Address: 172.16.9.XXX

 

 

 

[Slave DNS Server] 172.16.9.1XX

Forward Zone 파일(Zone 데이터) 확인

# cd /var/named/chroot/var/named/slaves

# grep test example2XX.zone ( cat example209.zone )

#

-> 출력되는 내용이 없다.

 

# service named restart

-> named 데몬을 restart 시켜 본다.

 

# grep test example2XX.zone

#

-> 출력되는 내용이 없다.

(주의) Slave DNS 서버에 Zone 데이터가 업데이트가 되지 않은 이유

Master DNS 서버 관리자가 Zone 데이터를 변경 할때는 반드시 serial number 값을 기존의 값보다 높여 줘야 한다.

그렇지 않으면, Slave DNS 서버쪽으로 Zone 데이터를 업데이트 되지 않는다. 그럼 한개의 도메인에 두대의 DNS 서버가 존재하지만 두대의 서버의 내용은 불일치 하게 된는 것이다.

 

 

Slave DNS 서버 모니터링

Slave DNS 서버에서는 모니터링을 시작한다.

[TERM1] # cd /var/named/chroot/var/named/slaves

# watch grep test example2XX.zone (# watch CMD)

[TERM2] # tail -f /var/log/messages

 

 

 

[Master DNS Server] 172.16.9.2XX

 

Forward Zone 파일 내용 추가

# vi /var/named/chroot/var/named/example2XX.zone

$TTL 4

@ IN SOA ns1.linuxXXX.example.com. root.linuxXXX.example.com. (

43 ; serial (d. adams) <----- 정보 변경 추가

3H ; refresh (42 -> 43)

15M ; retry

1W ; expiry

1D ) ; minimum

IN NS ns1

ns1 IN A 172.16.9.XXX

 

;; (1) Web Server

;www IN A 172.16.9.XXX

www IN A 172.16.9.2

www IN A 172.16.9.3

www IN A 172.16.9.4

 

;; (2) FTP Server

ftp IN A 172.16.9.XXX

 

;; (3) MAIL Server

IN MX 10 mail

mail IN A 172.16.9.XXX

 

;; (4) etc

cafe IN A 172.16.9.XXX

test IN A 172.16.9.XXX

test1 IN A 172.16.6.2XX <----- 새로운 라인 추가

 

서비스 변경 적용

# service named restart

-> 서비스 적용

 

# nslookup test1.linux2XX.example.com (# nslookup test1)

-> 확인

 

 

 

[Slave DNS Server] 172.16.9.1XX

 

# cd /var/named/chroot/var/named/slaves

# grep test example2XX.zone

-> 변경된 내용을 확인 할 수 있다.

-> Zone 파일(Forward/Reverse Zone 파일)을 지우고 "# service named restart" 해서 다시 Zone 파일을 받으면 업

데이트가 되지만, 이런 경우는 실시간적인 동기화가 되지는 않는 상태이므로 좋은 방법은 아니다.

-> DNS Master 서버에서 시리얼 번호(Serial Number) 업데이트 없이 Zone 파일을 업데이트 하고 데몬을 restart

했다고 해서 Zone 파일이 업데이트 되지는 않는다.

 

 

masters 의 시리얼넘버를 올려주어야 슬레이브 서버가 업데이트된다.

 

'Learning >  └Essential & Admin' 카테고리의 다른 글

FTP Server Guide  (0) 2016.11.15
Apache WebServer Guide(수정중)  (0) 2016.11.13
Network Configuration Administration(수정중)  (0) 2016.11.10
xinetd & standalone Service Type  (0) 2016.11.05