강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

== 6. CentOS 4.2 네임서버 설치및 운영하기 ==

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문


||| [CentOS] 6. NAMESERVER(bind9) 운영하기 |||
 

재성이의 6번째 강좌, CentOS 기반에서 NAMESERVER(bind9) 운영하기
 


이전 강좌였던 FTP나 SENDMAIL 은 그나마 셋팅방법과 실제 어떻게 해서 돌아가는지에 대한
내용이 그리 복잡하지는 않았습니다. 설치후 몇 개의 파일을 셋팅해주고 대부분이 셋팅파일에서
잘 잡아주면 잘 돌아가기 때문입니다.
하지만 네임서버는 설치하고 셋팅함에 있어 실제로 업무나 서비스에서 활용을 하려면
정확한 네임서버의 역할, 원리를 모르면 항상 당황하기 쉽상입니다. 갱신후 결과도 바로 볼수
도 없을수있기때문이고 웹특성상 서비스가 중단되면 안되는 특성이 있어 네임서버를 얼마나
효율적으로 관리하느냐에 따라 작업시간도 엄청 줄어들수 있습니다.

이번강좌에는 역시 그리 어렵지 않은 설치 부분과 네임서버의 동작원리 그리고 꼭 알아야할
계념들을 집어보겠습니다. 교제처럼 서술형이아닌 요약 형식과 간단한 설명으로 정리하겠습니다.

1.NAMESERVER 란 ?

서버상에서 웹서비스를할때 도메인을 치게 됩니다. www.supuerser.co.kr 혹은 www.firewolf.co.kr등
그러면 로컬PC에 셋팅되어있는 네임서버로 가서 해당도메인의 IP정보를 질의하여 실제 IP찾아 가게끔
해주는 녀석입니다.
책에는 DNS 라하여 도메인을 아이피로 바꾸고 아이피를 도메인으로 바꾸어주는 서비스라 합니다만
이정도로 가볍게 인지하고 다음 에서 좀더 내부적으로 어떻게 돌아가는지 알아봅시다.



2. 내부적으로 네임서버가 움직이 액션들을 알아봅시다.

whois.co.kr 에서 aaa.co.kr 도메인을 네임서버정보를
ns.superuser.co.kr 로 입력하고 샀습니다.
그럼 ns.superuser.co.kr 을 관리하고 있는 관리자는(나^^)
aaa.co.kr 을 산지 빠르면 몇시간 길게는 하루정도 있어야
whois.co.kr 에서 정보가갱신된다고말해주고 살~살~ ns.supseruser.co.kr
에 도메인추가등록을 합니다.(요거는 아래 셋팅방법에서 자세히)
자 도메인 추가셋팅도 끝나고 whois에 등록한 aaa.co.kr 정보도 갱신되어
nslookup aaa.co.kr ns.superuser.co.kr 을 해보니
(ns.superuser.co.kr의거 aaa.co.kr을 질의해봐라 라는의미)
ns.superuser.co.kr에서 관리자가 셋팅한 아이피로 잡혀있고 네임서버도
보입니다.

이제 그 누군가(철수)가 블라우저에 aaa.co.kr 을 치면
aaa.co.kr의 네임서버가 ns.superuser.co.kr 이라고 바로 이쪽으로가서
아이피를 알아내는것이 아니고
먼저 철수의 PC에 있는 기본DNS 없으면 대표 DNS중 한군대 랜덤으로가서
최고대빵 네임서버로 갑니다.(책에는 Root NameServer 이라고하는데 용어는무시하고ㅋ)
최고대빵네임서버는 aaa.co.kr을 받습니다. 그럼 역으로 길을 안내합니다.
kr을 관리하는 네임서버로 가봐라... 그러면 kr을 관리하는 곳에서 그래 왔나? 다음
역순인 co를 붙힘니다. co.kr의 네임서버로 가봐라... 또 갑니다.
역시 역순인 aaa를 붙혀 aaa.co.kr 은 superuser.co.kr 로 가서 질의해라..
그래서 superuser.co.kr 로 오면 응! aaa.co.kr은 우리 내임서버에 정의되어있는데 라고 하며
ns.superuser.co.kr 로 보냅니다.
그때서야 ns.superuser.co.kr에 관리자가 셋팅해둔 정보에 의해 해당 아이피로정보를 알아내서
다시 철수한테 줍니다. 니가준 aaa.co.kr 을 쭉 ~~~~~~ 조회해본결과 (예) 7.7.7.7 로 가라고 한다.
그쪽으로 가라라고 해서 철수는 7.7.7.7서버에 있는 aaa.co.kr의 내용을 볼수있는것입니다.

우리는 단순히 주소를 치면 어딘가에서 혹은 지정한 네임서버에서 딱 아이피를 바꾸어 되돌려주는것
으로 많이들 알고 있으나 실제 내부에는 이런 질의들이 반복해서 정보를 제공해주게됩니다.




3. 그럼 이제 네임서버 구축을 해봅시다. (bind9 설치하기)

rpm 으로 간단히 설치합니다.
CentOS에서 DNS와 관련된 패키지는 아래의 5가지입니다. 다운로드합시다 (bind9버전기준)

cd /root 나 cd /usr/local #rpm 저장할 임시 위치로 이동합니다.
그 후 wget 으로 아래의 주소를 참고하여 다운받습니다.
(자신이 CentOS가 아니면 공용이나 그 배포판에 맞는 rpm을 검색하여 확보하셔야 합니다.)

## DNS Server
wget ftp://ftp.superuser.co.kr/centos/4.2/os/i386/CentOS/RPMS/bind-9.2.4-2.i386.rpm

## BIND 의 chroot 기능지원 패키지
wget ftp://ftp.superuser.co.kr/centos/4.2/os/i386/CentOS/RPMS/bind-chroot-9.2.4-2.i386.rpm

## BIND DNS 개발을 위해 필요한 파일들과 라이브러리들이 포함된 패키지
wget ftp://ftp.superuser.co.kr/centos/4.2/os/i386/CentOS/RPMSbind-devel-9.2.4-2.i386.rpm

## DNS 패키지에서 사용되는 라이브러리들
wget ftp://ftp.superuser.co.kr/centos/4.2/os/i386/CentOS/RPMS/bind-libs-9.2.4-2.i386.rpm

## DNS 네임서버의 질의 및 관리를 위한 유틸리티들
wget ftp://ftp.superuser.co.kr/centos/4.2/os/i386/CentOS/RPMS/bind-utils-9.2.4-2.i386.rpm

자 다운이끝났으면 설치하기 앞서 혹시 내 서버에 DNS 패키지중 설치된것이 있나 확인
해보고 싶으면 rpm -qa | grep bind 라고 명령어를 치시면 됩니다.

그럼 bind 패키지가 하나도 확보안되었다는 가정하에 설치를 해봅시다.
1가지라도 있으면 그 버전에 맞게 다른 rpm 설치해주시면 됩니다.

설치는 한방에 ...

cd 패키지다운받은위치
rpm -ivh bind*

하면 패키지가 하나하나씩 설치되는것을 볼수있을 것입니다.
그리고 다시 rpm -qa | grep bind 로 검색해보면 5가지가
다 나옴을 알수있습니다.

이렇게 설치가 끝나면 역시 간단하게 설정을 합니다.
간단한 설명은 이런 설정파일이 있구나라고 인지하시면
되고 예시까지들면서 하는것은 셋팅을 해줘야 하는 부분
이니 신경써서 보시길 바랍니다.






4. 설치후 위에서 관리자가 셋팅했다는 그 도메인 추가시 네임서버 셋팅하는 방법

자 아래에 [ ]안에있는 것들이 네임서버와 연관된 설정파일및 경로들
혹은 영향을 미치는 파일들입니다.

[ /etc/named.conf ]

BIND 의 부트파일로서 각종 옵션과 각 도멩니들에 대한
zone파일정보를 가지고 있습니다.
=====예====================================================
// generated by named-bootconf.pl

options {
directory "/var/named";
allow-recursion {127.0.0.1;222.97.189.0/24;210.114.223.0/24;};
allow-transfer {127.0.0.1;222.97.189.0/24;210.114.223.0/24;};
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {
type hint;
file "named.ca";
};

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 "223.114.210.in-addr.arpa" { type master; file "223.114.210.zone"; };
zone "189.97.222.in-addr.arpa" { type master; file "189.97.222.zone"; };
zone "193.220.211.in-addr.arpa" { type master; file "193.220.211.zone"; };

logging {
category lame-servers { null; };
category unmatched { null; };
category network { null; };
category notify { null; };
};

zone "firewolf.co.kr" {
type master;
file "firewolf.co.kr.zone";
};
이하생략
===========================================================
위에서 기본저적으로 알아야 할것은 상단에
directory "/var/named"; 라는 zone파일을 위치 셋팅(기본값이유지하면됨)
즉 여기서 추가되는 도메인을 등록을 아래의 기술처럼 하고
zone "firewolf.co.kr" {
type master;
file "firewolf.co.kr.zone";
};
이렇게 zone 파일을 등록하면 실질적으로 firewolf.co.kr.zone의
위치는 /var/named/firewolf.co.kr.zone 라는 뜻이며
관리자는 이 위치에 firewolf.co.kr.zone라는 파일을 아래에 설명할
zone파일 작성법에 맞추어 작성되어있아야 하는것입니다.
나머지는 건들지 마세욤^^

 

 

[ /usr/sbin/named ]
BIND 데몬파일 경로

 

 

[ /etc/rc.d/init.d/named ]
BIND의 시작,종료,재시작을 할 수 있는 BIND 관리 스크립트
예)
/etc/rc.d/init.d/named start ## BIND 데몬시작하기
/etc/rc.d/init.d/named stop ## BIND 데몬 정지하기
/etc/rc.d/init.d/named restart ## BIND 데몬 재시직하기
/etc/rc.d/init.d/named reload ## BIND 데몬 reload 하기 (추천방식)

[ /usr/sbin/named-checkconf ]
named.conf 파일의 유효성검사하는 유틸리티

[ /usr/sbin/named-checkzone ]
zone파일 내용 유효성검사하는 유틸리티

[ /usr/sbin/rndc ]
원격 네임서버를 제어하기 위한 관리용 유틸리티 즉, 원격지에 있는
네임서버를 reload,stop, status등을 실행할수 있도록 함
기본적으로 /etc/rndc.conf파일을 적용함

[ /etc/rndc.conf ]
rndc설정파일로서 rndckey값을 보관하고 있는 파일임
이 파일은 /etc/named.conf 에서 불러씀

 

[ /etc/host.conf ]
resolver의 옵션을 가지고 있는 파일, 즉 host파일을 먼저
검색할 것인지 아니면 dns에 의한 쿼리를 먼저 할것인지의
순서를 정하는 설징이 order 옵션으로 설정되어있습니다.

[ /etc/resolv.conf ]
시스템에서 사용할 네임서버의 주소를 가지고 있습니다.

[ /var/named/named.ca ]
Hints파일로 named의 캐시초기화에 필요한 정보를 저장하고 있음

[ /usr/bin/nsloolup ]
어떤 도메인이 어느 네임서버를 쓰는지 질의하는 질의도구입니다.


[ /var/named/ * ]
바로 이경로입니다.
위에서 /etc/named.conf 에서 추가 도메인을 정의하고 저의된위치가
보로 /var/named 였습니다. 고로
여기에 실제 정보 즉 zone 파일이 있게 됩니다. 그럼 zone 파일의 작서
방법을 알아 봅시다.

[root@su020 ~]# vi /var/named/firewolf.co.kr.zone 

$TTL 400
@       IN      SOA     ns.superuser.co.kr. root.superuser.co.kr. (
                        2006022418      ; 시리얼값(년월일시간)
                        3H              ; 2차네임서버가 1차에 동기화하는시간
                        15M             ; 접속실패시다시시도할시간간격
                        1W              ; 1차네임서버에정보가없으면1주후에삭제
                        1D )            ; 위에서설정한 TTL과 같은의미
;
        IN      NS      ns.superuser.co.kr.   ; firewolf.co.kr의 네임서버정의 
        IN      MX      10 mail.firewolf.co.kr. ; 역시 메일서버정의
        IN      A       111.111.111.111          ; 도메인이 실제 찾아갈 아이피 
www     IN      A       111.111.111.111          ; www를 붙혔을대 찾아갈 아이피
mail    IN      A       111.111.111.111          ; 메일서버로쓸 아이피
*       IN      A       111.111.111.111          ; 이하모든서브도메인이 찾아길 곳

			

=================================================================
자 네임서버의 핵심 설정기술입니다. 위의 zone파일 만들기

그럼

### $TTL 400 ###
TTL(Time to Live) 값이라고 하고 살이있는시간이니까 설정이 갱신되는
시간을 말합니다. 400초마다 바뀐게 있으면 갱신하겠다는 말이지요
(근대 실무에서 해보면 400초라고 해두어도 거의 10초정도 지나니
갱신이 되더라구요^^ 하지만 하루인 86400초로 해두는곳도 있는데 이렇게 해두면
진짜 빨리 안바뀜니다. 저는 오타를 대비하여 처음셋팅때는 아주 짧게 잡고
결과확인을 다 한 뒤에 86400 으로 시스템을 위해서 시간의 늘려줍니다.)

### @ ###
자기자신(Origin 도메인)을 의미한다고 생각하시면 됩니다.
즉 여기서는 firwolf.co.kr 이겠지요

### ; ###
; 는 주석입니다. ^^

### NS ###
즉 firewolf.co.kr 구입할때 ns.supseruser.co.kr을 네임서버로 쓰겠다고 위에서
가정하였습니다. 고로 위와같이 적어줍니다. 즉 해당도메인의 네임서버저의하는것
도메인들 끝에 .(점)이 있는것 주의하셔야 합니다.(최상위root 도메인을 말하며
위의 철수이야기에서 처음에 찾아가는 최고 대빵을 의미합니다. 기억나시죠?)

### MX ###
메일서버를 쓸경우 (안쓰더라도 정의해둡니다.) 메일서버지정하는 도메인을 셋팅
즉 위셋팅에서 mail.firewolf.co.kr. 이리고 정의했고 아래에 mail IN A 111.~라고
정의하였으므로 우리가 일반 아웃룩이나 메일프로그램을 쓸때
받을메일 보낼메일을 설정할때 바로 이놈을 적어주는것입니다.
mail.firewolf.co.kr 이라고 말이지요...
한마디로 메일서버로 쓸 도메인과 아래에 그 도메인의 아이피를 자기자신의 서버
아이피로 등록해둔 모습이지요.
역시 끝에 .(점) 조심하시길 바랍니다.



==> 결론은 셋팅은 기본셋팅에서 크게 건드릴것은 없습니다. /etc/named.conf
에서 추가도메인 위의 셋팅방법에서 처럼 적으주고 /var/named/아래에 역시
추가도메인.zone 파일을 위의 방법처럼 기술한뒤 네임서버 리로드나 리스타트
하시면 적용끝.. 쉽죠^^?

자 나머지는 위의 셋팅 주석을 참조하면 됩니다.
더 상세하고 효율적인 방법및 꽁수가 있으나 처음 접하시는 분은 위내용만이라도
명확이 숙지하시고 추 후 네임서버만 파고들때 다시 접근해보시길 바랍니다.





5. 아주 유용한 TIP ( nslookup 을 알고 쓰자)


네 요넘은 도메인을 추가할때 아주 요긴하게 쓰는 것으로써
서버에서 jwhois가 지원이 된다면 이 두가지로 거의 체크는 다 할수 있습니다.

자 먼저 개똥이가 XXX.co.kr 을 사서 잘 쓰고있다가 네임서버를 A 에서 B 로 바꾸는
작업을 해야 한다고 가정합시다. 근데 문제가 있어 자꾸 이전 네임서버정보로 가서
다른 곳으로 가버리고 새로셋팅한 정보는 먹히지도 않는듯하고 어떻게 돌아가느지
모를때 다음과 같은 순으로 체크해 봅니다.

1. jwhois 명령어 이용 혹은 등록한 도메인 업체 에 가서 네임서버정보를 확인한다.
jwhois XXX.co.kr 이라고하면
현재 이 도메인의 정보가 나옵니다. 그럼 바꾼 네임서버정보가 B 로되어있는지 확인
합니다. 요 명령어가 없으면 XXX.co.kr 도메인을 산곳에가서 정보고기하면 나옵니다.

2. B로 되어있는데 자꾸 A네임서버의 정보가 먹히는것 같다. 요때는
99% B라고 바꾸어야하는데 D라고 오타가 났던지(이런경우실재 많습니다.^^)
아님 위에서 배웠듯이 ttl 값이 길게잡혀있어 안먹히는 경우
마지막으로 XXX.co.kr 네임서버정보를 B라고 바꾼지 몇시간 안지났을경우입니다.
(물론 네임서버정보는 구입한곳에서 변경요청이 되면 빠르게는 몇시간 늦게는 하루이상
걸립니다. 참고하세욤 )

3. 이상하게 정상적으로 B의 네임서버로도 먹히는것같고 또 어떨때 접속해보면
여전히 A 네임서버의 정보로 가는경우도 있을때 요거는 관리자가 계속해서 서비스를
죽이지 않게 하기위해서 기존 네임서버 A의 정보도 그대로 두고 B의 네임서버정보
도 거의 갱신이 될랑말랑 할때 생기는 널뛰기 현상이라고 합니다만 어떻때는 A 어떨때는
B 를 왔다갔다하면서 먹히다가 B 가 완전히 넘어오면 B만 참조하므로 A의 설정은
안먹히게 됩니다.

1~3까지에서 유용하게 쓰이는것이 바로 nslookup 입니다.

자 그냥
nslookup XXX.co.kr
라고하면 단순히 XXX.co.kr의 네임서버가 무었인지 그 네임서버의 아아피등을 출력해줍니다.

그러나 우리는 2번과 3번같은 경우에 어떻게 획인이 가능하고 도대체 얼마나 기다려야
완전히 B 네임서버의 지배를 받을까라로 궁금할때 디버깅모드로 들어가서 확인할수있습니다.

자 그냥 요로케 해보시길 바랍니다.

# nslookup 엔터

> set debug 엔터

> firewolf.co.kr 엔터

이렇게 차례대로 실행하면
현재 XXX.co.kr 의 네임서버의 정보와 아이피 뿐만아니라 갱신되는데 남은 초까지
나옵니다.

아이피는 공개되면 않되므로 바꾸었습니다. ^^
=== 완전 넘어왔을때 ====================================
Server: xxx.xxxx.xxx.xxx
Address: xxx.xxx.xxx.xxx#53

------------
QUESTIONS:
firewolf.co.kr, type = A, class = IN
ANSWERS:
-> firewolf.co.kr
internet address = 7.7.7.7
AUTHORITY RECORDS:
-> firewolf.co.kr
nameserver = ns.suidc.com.
ADDITIONAL RECORDS:
-> ns.suidc.com
internet address = 210.111.4.1
------------
Non-authoritative answer:
Name: firewolf.co.kr
Address: 7.7.7.7

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

널뛰기할때는 남은 시간을 TTL 값으로 표시가 됩니다.


3번처럼 널뛰기할때 진짜 이렇게 해보면 자구 B로 나오다가 A로도 나오다가
하시는것을 볼수있을것입니다.

여기까지 CentOS 기반에서 기본적인 서비스 강좌는 마치고

이제 서버전체에서 유용한 내용을 선별하여 공부를 더 해서 다음 강좌를 올리도록 하겠습니다.




지금까지 재성이의 NaveServer 강좌였습니다. 네임서버는 셋팅보다도 계념이 중요합니다.
실제 업무나 서비스를 할때 아주 민감하게 고려해야하고 특히 프로그래머들도 작업하기전에
네임서버로인해서 문제가 생가는 경우를 파악하지 못하고 호스팅업체와 언성을 높이는 경우를
허다하게 보았습니다. 설치나 named.conf 및 zone 파일의 셋팅은 10분만 설명을 들어도 이해를
할수있으니 설치와 셋팅법보다는 정화한 네임서버의 동작 원리를 알고 넘어갔으면 하는 바램입니다.
 
 
 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,791 개
  • 현재 접속자 :  83 명