달력

42024  이전 다음

  • 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

*********************
네임서버
작성자 : 유희성
*********************


Domain 이란 숫자화된 인터넷 주소인 IP주소를 대신하는 문자화된 별칭이다.
우리는 사이트에 접속을 할 때 http://www.yahoo.co.kr 이라고 입력하고 접속을 하게 된다.
여기서 www.yahoo.co.kr 을 도메인이라고 부르며 이것이 IP주소를 대신하는 인터넷주소이다.
위와 같이 도메인을 입력하게 되면 컴퓨터는 알아듣지 못하게 된다. 이렇게 입력된 도메인을
컴퓨터가 알아들을 수 있는 숫자형태로 바꾸어줘야 하는데 이 작업을 해주는 것이 DNS Server 이다.

도메인 이름 규격은 각 나라마다 약간씩 설정이 틀리지만
(음.. 한글도메인은 어케 되는지 저도 멀라영... 좀 알려줘여ㅡ,.ㅡ)
대부분 영문자와 숫자, 그리고 하이픈(-) 의 조합으로 사용되고 대소문자는 구별되지 않는다.
이름의 길이는 2글자에서 최대 63자까지 허용된다.
도메인 이름에는 콤마(,)나 언더바(_)등 기호를 사용하지 못한다.
그리고 도메인 이름은 전 세계에서 유일하여야 한다.

도메인 이름체계

이름체계는 Tree 구조로 이루어져있다.
제일 위에는 루트(ROOT) 도메인을 기준으로 3단계의 기본적인 단계로 구성된다.
루트 도메인이란 쩜! (.) 을 이야기 한다.
http://www.yahoo.co.kr. <== 요기처럼 kr 다음에 쩜(.) 이 하나 붙는데 이것을 루트 도메인이라고
한다. 이 루트 도메인 다음에 온 kr 이나 net, com, org 등등.. 이 1차 도메인이다.
이것은 우리가 임의로 정하는 것이 아니고 이것을 관리하는 INTERNIC 에 등록이 되어있는 것을 우리는
가져다가 쓰게 되는 것이다.

여기서 1차 도메인도 최상위 도메인과 국가도메인으로 나뉘어 지게 된다.
최상위 도메인이란 org, net, com, edu, gov, 등등이 되고, kr, jp. fr 등등 각 나라의
국가 도메인이 된다.
위의 www.yahoo.co.kr. 을 보면 처음 루트도메인 다음에 1차도메인 KR 이 오게 되었다.
그 다음에 존재하는 co 라는 부분이 2차 도메인에 해당된다.

2차 도메인은 사용자가 원하는 이름을 신청해서 사용할 수 있다. 하지만 kr이나 jp 등등의 국가도메인이
1차 도메인이 오면 국가에서 기관을 분류시키기 위해 미리 정의된 이름을 사용하기 때문에 이럴 경우에는
사용자가 직접 2차 도메인 이름을 지정하여 사용할 수 없다.
Oracle.com 같은 사이트는 최상위 도메인으로 이미 정해져 있는 것을 사용하였기 때문에 2차 도메인으로
oracle 이라는 이름을 지정하여 사용하였다… 유가릿??

3단계 도메인은 하위 도메인이라고 하며 우리가 만들고자 하는 yadong.pe.kr 같은 사이트에서
yadong 같은 녀석이 3차 도메인이 되게 된다. 왜 3차 인지 이해가 안되면 벽보고 반성한다.

자… 이렇게 도메인이 이루어졌다는 것을 알았다. 그럼 네임서버는 어떤 역할을 해주는 것일까…
네임서버는 위에서 말한 도메인 이름을 ip 주소로 바꾸어 주는 기능을 해준다.
반대로 ip 주소를 도메인 이름으로 바꿔주는 역할도 한다.

그럼 어떻게 작동 할까… (칠판에 그림참조)

일단 내가 브라우져에서 www.yahoo.com 이라고 입력을 한다.
그러면 이것은 네임서버로 질의를 보내게 된다. 만약 ADSL 이라면 인터넷공급회사에서 자동으로 네임서버가
지정이 되어있을 것이다.

일단 네임서버로 질의를 하게 되는데… 여기에는 당근 yahoo.com 의 정보가 없다.
그럼 로컬네임서버는 루트네임서버(.) 로 질의를 요청하게 된다.
그런데…. 루트 네임서버에서도 com 이라는 1차 도메인을 모르겠다고 하고… 질의를 com 네임서버를 참조하라고 한다.
그럼 다시 질의는 com 네임서버로 가게 된다… 여기서 열라 뒤진다. 이때 yahoo.com 이 정확하게 인터닉에 등록이
되어있는 도메인이라면 여기서 yahoo.com 의 아이피 주소를 우리가 맨 처음 질의한 로컬 네임서버에 알려주게 된다.
이렇게 알게된 IP 주소를 최종적으로 우리에게 알려주게 된다.
그런데 여기서… 맨 처음 질의를 할 때 ROOT 도메인부터 찾는다고 하였는데, 이때 제일 처음부터 찾으려면 서버는
쌩 노가다를 하게 된다. 그래서 CACHE 파일을 제공하여 주는데 /var/named/named.ca 라는 파일이다.
버전마다 약간 이름이 틀리다.

이 파일은 우리가 작성하는 것이 아니라 인터닉에서 제공을 하여 준다.
이 파일이 없다면 다른 PC 에서 복사를 하던지 인터닉에 접속해서 다운을 받던지 한다. 절대 수정금지..


/////////////////////
설 정 하 기
/////////////////////

네임서버를 구동하기 위해서는 bind 라는 패키지가 필요하다. 이 패키지는 웬만한 배포판에는 기본으로 들어있다.
현재 사용되는 버전은 bind8 과 bind9 이다.그럼 깔려있는지 살펴보자..

rpm -qa | grep bind <=== 라고 입력을 해서 뭐가 있으면 깔려있는 것이다.

거의 대부분 전체설치를 하기 때문에 자동으로 깔린다… 만약 없다면 linux cd 넣고 다시 깐다.
위치는 RedHat/RPMS 에 존재한다… source 로 깔고 싶다면 www.isc.org 에서 받던지 국내 Linux site 를 뒤져본다…


*********************
Bind 소스로 설치하기.
*********************

일단 RPM 패키지로 설치되어있는 bind 를 제거하여야 한다.
rpm -qa | grep bind 라고 쳐서 뭐가 나오면 지운다.

rpm -e 나온 패키지이름 <== 지운다.

이렇게 지운다음에 다운로드 받은 소스파일을 압축을 푼다.
/tmp/tar xvzf bind-9.2.0.tar.gz 라고 쳐서 압축을 푼다.
그리고 압축 풀린 디렉토리로 들어간다.

./configure -with-opens니
make; make install;
이렇게 설치가 되면 /usr/local/bind 디렉토리에 라이브러리 파일이 생성되고 바이너리 파일은
/usr/sbin 디렉토리에 생성된다.
설치 끝.

네임서버의 유형은 크게 세가지로 나뉘어진다.

1. primary name server : 1차 네임서버
2. secondary name server : 2차 네임서버
3. caching only server : 캐시 서버.

1차 네임서버는 당근 필수적이다. 2차 네임서버는 1차 네임서버에 주기적으로 접속하여 백업본을 유지한다.
일반적으로 2차 도메인은 1차 도메인이 다운되었거나 기타 다른 문제가 발생되었을 경우를 대비하여 같은
네트워크에 두지 않는다. 만일 같은 네트웍에 존재한다면 1차 네트웍이 죽으면 2차 네임서버도 작동을 안하게
될것이다. 그럼 뭐하러 2차를 만들어…

캐쉬 서버는 local DNS 에 접속하기 곤란한 상태에 있을 때 효과적으로 운영된다.
원거리에 위치한 같은 도메인을 사용하는 네트워크에 대해서 LOCAL DNS 를 시용하면 약간의 NETWORK DELAY가
발생하게 되므로 좋지 않은 상황이 된다.
이때 캐시 서버를 이용한다. Cache 서버는 이름을 IP 로 변환하는 작업만을 수행한다.


네임서버 설정 파일은 아래와 같다.

/etc/resolv.conf <== 기본 네임서버 지정. 여기에 기본 네임서버 설정이 없으면
네임서버 질의를 하지 못한다.
/etc/named.conf <== 이 파일은 /etc/hosts와 DNS 에 질의할 순서를 정한다.
/var/named/named.ca <== 루트 네임서버에 대한 정보가있는 데이터베이스파일
/var/named/named.local <== 루프백인 localhost 에 대한 설정파일
/var/named/파일이름.zone <== Public domain 에 대한 forward zone 파일
/var/named/파일이름.rev <== Inverse domain 에 대한 reverse zone 파일…


위의 파일중에 *.zone , *.rev 파일은 named.local 파일을 복사하여 사용한다.

먼저 named.conf 파일을 vi로 열어서 보자..

vi /etc/named.conf

options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};


제일 위에 보면 option 부분이 존재하고 그 안에는 directory "/var/named"; 라고 되어있다.
끝에는 항상 세미콜론이 붙는다. 이 부분은 여기에서 설정한 네임서버의 파일이 존재할 디렉토리를 말한다.
그러니까 여기서 기본 네임서버 설정을 하고 거기에 따른 부수적인 파일들은 /var/named 디렉토리에
위치하여야 한다는 이야기이다.

Zone 이라고 시작되는 부분은 zone 설정영역이라고 하며 이 부분에 캐쉬전용서버, 1차 , 2차 네임서버등에
관련된 설정을 해준다. 설정방법은 다음과 같다.

zone "데이터베이스" {
type (hint|master|slave);
file "존 파일명";
};

여기서 데이터베이스라고 되어있는 부분은 이 값에 따라 두개의 zone 으로 나누어지게 된다.
Option 부분 아래의 zone 부분을 보면 zone "." 이라고 되어있는데 쩜 (.) 이라고 되어있는
데이터베이스는 캐시서버를 의미한다.
윗부분의 zone "데이터베이스" 부분의 데이터베이스는 우리가 실제 설정을 할 진짜 도메인 이름을 넣어준다.
Yadong.com 좋다~~ (^O^)
이렇게 우리가 사용할 도메인 이름을 입력하면 이부분의 zone 영역은 Forward zone 데이터베이스가 된다.

그런데 앞의 설명에서 이름을 IP 주소로, IP주소를 이름으로 바꿔주는게 네임서버 역할이라고 하였다.
우리는 지금 이름을 IP 주소로 바꾸어주는 부분을 설정하였다. 그럼 반대의 경우도 설정을 해주면 된다.
방법은 아래와 같다.

zone "32.249.211.in-addr.arpa" { <== 이렇게 지정하면 reverse zone 이 된다.

};

이때 마지막의 호스트 부분은 적지 않는다. 왜? Network class 부분을 잘 생각해보자..
그렇다면 위의 두 가지 부분을 named.conf 파일에 추가하자..

zone "만들 도메인이름" {}
zone "아이피꺼꾸로.in-addr.arpa" {}

이렇게 설정이 되었다면 {} 안에 들어갈 부분을 작성해야 한다. 위쪽에 보니까 type 부분과 file 부분이 있다.
Type 부분은 hint, master, slave 중에 하나를 써주면 된다.
Hint 는 좌측 페이지의 첫번째 zone 영역을 보면 된다. 그러니까 cache 서버 라는 것을 알 수 있다.
master 부분은 1차 네임서버, slave 부분은 2차 네임서버이다. 2차 네임서버를 지정하여 줄때는
masters { 1차 네임서버 아이피 주소; }; 부분을 반드시 명시해 주어야 한다.

file "존 파일명"; 부분에는 directory 부분에 적혀있는 /var/named 디렉토리에 작성하게 될 zone 영역
파일들을 적어주면 된다.

file "만들도메인.zone"; <== 포워드 존 파일
file "만들도메인.rev"; <== 리버스 존 파일

거의 대부분 이런 형태로 zone 파일을 작성한다.

자 … 이렇게 작성이 되었다면 이제 /var/named 디렉토리로 이동하여 포워드존 , 리버스존 파일을 만들어 주자.
각 영역파일들은 named.local 파일을 복사하여 사용한다.

cp named.local 만들도메인.zone
cp named.local 만들도메인.rev

이렇게 복사를 하였으면 포워드 존 파일부터 수정한다.

vi /var/named/만들도메인.zone

$TTL 86400
@ IN SOA ns.211.249.32.119. root.ns.211.249.32.119. (
20020402 ; serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Mininum(TTL)

IN NS ns.211.249.32.119.

1 IN PTR localhost.


이런 형태의 파일이 보일것이다.
이제 차례대로 알아보자.
위쪽에 보면 @ 부분이 있는데 여기서 자주 헷갈리게 된다. 네임서버 설정에서의 @는 이메일을 보낼 때의
그 골뱅이가 아니고, 자기자신의 호스트를 가르키는 녀석이다.
골뱅이를 써도 되고 진짜 호스트 이름을 적어줘도 된다. 편의상 @로 사용한다.

@ IN SOA localhost.localdomain. root.localhost.

위의 부분은 책에 보니까 SOA 레코드는 해당 도메인에 대해 네임서버가 모든 리소스 레코드 권리를
가지고 있음을 알려주는 레코드. 라고 되어있다.
위에 골뱅이는 설명을 해 놨고 IN 은 네트워킹 어드레스 클래스를 의미하는 것으로 항상 리소스를
지정할 때 사용된다.
SOA 다음에는 1차 네임서버 주소와 관라자의 Email 주소가 있다. 이때 주의하여야 할 것은 여기서
적어주는 도메인은 완전한 도메인 이기 때문에 뒤에 반드시 쩜(.)을 찍어줘야 한다는 것이다.
쩜 빼고 울지말도록..
root.localhost 부분은 이 서버의 관리자 이메일 주소를 적어주는 부분이다.
이때 @를 사용하지 않는다. 이유는 위를 본다.

SOA <== Start of Authority
NS <== 네임서버 리소스
A <== 도메인에 IP 주소를 부여해 주는 레코드
MX <== 메일 익스체인저
CNAME <== 하나의 아이피에 여러 개의 별칭을 가질 수 있게 해주는 레코드

그리고 그 다음에 괄호 부분에는 각 설정 부분이 오게 된다.

20020402 ; serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Mininum(TTL)

여기서 세미콜론은 주석이다.

Serial 부분은 네임서버의 데이터 버전을 나타내는 부분이다. 보통 날짜를 년월일로 적어주지만 맘대로 적어도 된다.
이 부분은 2차 네임서버나 다른 네임서버에서 로컬 네임서버의 데이터를 불러올 때 자신이 가지고 있는 시리얼 넘버와
비교하여 자신의 것보다 높으면 업데이트 된 정보를 가져온다.

Refresh 부분은 2차 네임서버가 1차 네임서버에게 새롭게 업데이트된 정보가 있는지 요청 할 때까지의 시간을 지정한다.
단위는 초단위다. 60초 * 60분 * 3 = 10800 즉 세시간마다 요청을 보낼것이다.

Retry 부분은 2차에서 1차로 연결이 되지 않을 경우 재 연결할 때까지의 대기 시간이다.

Expire 부분은 2차 네임서버가 일정시간 동안 1차 네임서버에 접속하지 못했을 때 이전의 정보는 무의미하다는 것으로
간주하여 이를 파기할 시간을 정하는 부분이다.

Minimum(TTL) 이 부분은 각 zone 파일의 윗부분에 정의된 TTL 변수를 사용하고, 다른 변수에서 자신의 정보를
가져갔을 때 그쪽 서버의 캐시에 그 정보가 얼마나 오랫동안 머물것인지 정한다. 86400 초 후에 삭제된다.


NS 레코드는 해당 도메인에 대한 네임서버를 지정하는 레코드이다.

IN NS ns1.만들도메인.com. <==점 빼먹지 말자. 1차 네임서버

위처럼 지정해 주면 된다. 그리고, 우리는 위에서 적어준 도메인으로 메일도 받아야 한다.
앞 장에 보면 MX 라는 부분이 있다. 이 레코드를 사용하면 된다. 사용법은 아래와 같다.

IN MX 10 만들도메인.com.

MX 다음에 10 이라고 되어있는 부분은 1차 메일서버를 지정하게 된다. 2차 메일서버가 있다면
MX 20 2차도메인.com. <== 이렇게 추가한다.
이때 MX 레코드는 절대 IP 주소로 지정하지 않는다. 왜??? 안되니까… ㅡ,.ㅡ

우리는 지금 Forward zone 을 설정하는 부분이다. 이름을 치고 들어왔다면 그것을 IP로 바꾸어 주어야 하는데
지금은 1차 네임서버 이름만 지정을 하였다. 각 부분은 탭으로 띠어준다. 스페이스바는 사용하지 않는다.

먼저 /etc/named.conf 파일에 zone 영역에 yadong.com 이라고 적어줬다면 이것이 도메인이름이 될 것이다.
그럼 @ 를 써도 되겠지??

@ IN A 211.249.32.119 <==이 부분은 자기의 호스트
즉 /etc/named.conf 에서 yadong.com 이라고 적었다면
그 이름을 치고 들어왔을 때 바꾸어줄 아이피 주소를 적어준 것이다.

//////////////////////////////////////////
www.yadong.com 이라고 치고 들어왔을때는 ???
//////////////////////////////////////////

www IN A 211.249.32.119 <==이렇게 해주면 되겠지??
ns IN A 211.249.32.119 <==ns.yadong.com 이라고 치고 들어왔으면 이렇게 추가해주면 된다.


그럼 완성된 파일을 보자..

$TTL 86400
@ IN SOA ns. yadong.com. root. yadong.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.yadong.com.
IN MX 10 yadong.com.
@ IN A 211.249.32.119
ns IN A 211.249.32.119
www IN A 211.249.32.119

위와 같은 형식이 될 것이다. 자~ 여기서 우리는 Forward zone 영역 파일의 설정을 끝냈다.
이제 Reverse Zone 영역을 작성해 보자.

$TTL 86400
@ IN SOA ns.yadong.com. root.yadong.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.yadong.com.
119 IN PTR yadong.com.
119 IN PTR www.yadong.com.
119 IN PTR ns.yadong.com.

이렇게 작성하면 된다.
/etc/named.conf 에서 우리는 Reverse Zone 데이터베이스를 설정할 때
zone "0.0.127.in-addr.arpa" 이렇게 적어주었다.
자기 자신의 루프백 주소는 127.0.0.1 이다
이 부분을 잘 보면 마지막의 호스트부분인 1 을 생략하고 나머지 번호를 거꾸로 적었다는 것을 알 수 있다.
내가 사용하고 있는 IP 주소가 만약 211.249.32.119 이라면 뒷부분의 119 부분을 뺀 나머지 부분 211.249.32 를
거꾸로 써주면 되는 것이다. 그러니까 119를 뺀 나머지부분은 이미 설정이 되어있는 부분이기 때문에 IP 주소를
다 써 줄 필요가 없다는 말이다. 그냥 119 라고 적어주고 그 IP 가 들어왔을 때 변환시켜줄 도메인이름을 적어주면 된다.
그리고 PTR 레코드는 IP주소를 도메인 이름으로 변환해 주는 역할을 한다.

이렇게 해서 Reverse Zone 영역의 설정도 끝났다.
이제 막바지 작업이다.
/etc/hosts 에 자신의 도메인정보를 입력한다.
/etc/resolv.conf 에 자신의 도메인 정보를 입력한다.

/etc/rc.d/init.d/network restart 해주고
/etc/rc.d/init.d/named restart 라고 해준다. 에러가 없다면 네임서버 질의를 한다.

nslookup 자기도메인.com <== 이렇게 해서 호스트 이름과 아이피 주소가 나와야 한다.
물론 반대로 IP 주소를 쳐도 이상없이 나와야 한다.

Posted by tornado
|