본문 바로가기

Linux

리눅스 네임서버 구축 (소스 컴파일 방법)

rpm과 소스compile 방법의 차이는 

옵션을 설정할수 있느냐 없느냐의 차이인 것 같음.


rpm의 단점 중 하나가 설정, 옵션을 내가 할 수가 없다 라고 했음

소스 컴파일 방법으로 할 경우 설치 경로등 각종 옵션들을 우리가 설정할 수 있기 때문에 이 방법으로 설치해보자.


소스컴파일 방법으로 깔때 과정은

소스코드다운 & 압축풀기 -> configure -> make -> make install


-configure: 설치하기 전 환경설정 (설치위치,각종옵션세팅) 즉, 셋업을 뜻함.

-make: 기계어로 된 것들을 번역해 실행프로그램을 생성

-make install: 필요한 곳으로 복사


그럼 dns 서버 구축 시작~




1. BIND 데몬 설치


우선 http://pkgs.fedoraproject.org/repo/pkgs (리눅스에서 쓸 수 있는 각종 소스들이 많이 있음, 좋은 곳임ㅋㅋ)

에 가서 네임서버의 서버프로세스인 BIND 데몬을 받자 

(OS가 페도라 4이기 때문에 최신버전은 쓰지 않았다. 나는 9.5.0 을 쓸거임)


우선 설치할 디렉토리를 만들고

[root@server103 ~]# mkdir -p /usr/local/dns

[root@server103 ~]# cd /usr/local/dns


필요한 bind데몬을 다운받고 압축풀기

[root@server103 dns]# wget http://pkgs.fedoraproject.org/repo/pkgs/bind/bind-9.5.0.tar.gz/066484717db1d1b1b4092ddcf5d0eb6e/bind-9.5.0.tar.gz

[root@server103 dns]# tar zxvf bind-9.5.0.tar.gz


[root@server103 dns]# cd bind-9.5.0


압축푼 디렉토리에 가서 목록들을 쭈욱 보면 configure Makefile 등등이 보일 것이다.

아까 설명했듯이 configure -> make -> make install 이 과정을 따라하면 됨.

(압축을 풀면 README 파일이 있는데 읽어보자, 다양한 정보가 나와있음, 설치 옵션들이라등가 등등)


[root@server103 bind-9.5.0]# ./configure --help 

이 명령어는 configure 할때 쓰는 옵션들 설명이 나온다.

prefix 옵션 = 설치경로 옵션 


[root@server103 bind-9.5.0]# ./configure --prefix=/usr/local/dns

(끝나면 WARNING해서 openSSL 뭐시꺵이가 나오는데 가볍게 토스~)

[root@server103 bind-9.5.0]# make && make install




2. named.conf 설정하기 + zonefile 


네임서버 데몬(bind)이 시작될 때 제일 먼저 읽는 파일이 바로 named.conf (설정파일) 파일이다. 

네임 서버는 설정 파일이 한글자라도 틀리면 데몬 자체가 가동하지 않아서 대소문자 공백 주의해서 입력할 것!!

named.conf 가 어디있느냐하면 바로 우리가 설치한 곳 안에 etc 폴더에 있다 (/usr/local/dns/etc/naemd.conf)

(없으면 etc 폴더 만들고 named.conf 새로 만들어야함 

or 

/etc/ 에 가면 named.conf가 있는데 복사해오기 --> cp /etc/named.conf /usr/local/dns/etc/named.conf


나는 그냥 복사해왔음.. 다 쓰기 귀찮아.......



named.conf 설정 형식 중 주요한 부분 설명


options {

        directory "/var/named"; ---> 네임서버 데이터베이스 파일(=zone파일)이 들어있는 디렉토리

        dump-file "/var/named/data/cache_dump.db"; ---> 정보가 갱신될 때 저장되는 파일

        statistics-file "/var/named/data/named_stats.txt"; ---> 통계처리 용도의 파일

        ~~ 생략 ~~

         // query-source address * port 53;


};


zone "도메인이름" IN {

        type master;          ---> 마스터 네임 서버는 master

        file "zone파일명";  ---> 위 options에서 directory에 생성될 "도메인이름" 의 상세설정 파일 (zonefile)

        allow-update { ip주소 또는 none; };     ---> 2차 네임 서버의 주소, 생략하면 none이 된다.

};




/etc/naemd..conf 복사해 왔을 때

line 22, 23, 67 (나는 이랬음) 이 행들앞마다 주석처리를 해주삼.  

# << 요걸 맨 앞에다가 다 붙여주기 (나중에 이거때문에 에러가 나서...)

이렇게 바꿔주기


#controls {

#        inet 127.0.0.1 allow { localhost; } keys { rndckey; };

#};



#include "/etc/rndc.key";


+ 맨 마지막 부분에 


zone "naver.com" IN {

        type master;

        file "naver.com.zone";

};


를 넣어준다.

저장하고 닫기




이제 naver.com.zone 파일을 생성하러 갑시다.

아까 options에서도 봤듯이 

directory "/var/named"; ---> 네임서버 데이터베이스 파일(=zone파일)이 들어있는 디렉토리

zonefile들이 있어야 할 곳은 /var/named



[root@server103 etc]# cd /var/named/

[root@server103 named]# vi naver.com.zone


이걸 작성


$TTL    3H

@        SOA     @       root.   ( 2 1D 1H 1W 1H )

           IN       NS      @

           IN       A        (구글 ip주소)


www    IN       A        (구글 ip주소)



zone file 존파일의 문법 요약


$TTL: 

Time To Live 약자, www.naver.com의 호스트 이름을 질의해 갔을 때, 

질의해간 다른 네임 서버가 해당 ip주소를 캐시에 저장하는 기간 

3H는 3시간을 의미함


@: 

named.conf 에 정의된 naver.com를 의미함 (naver.com으로 고쳐써도 되지만 기니까 ㅇㅇ)


SOA: 

Start Of Authority 약자. 권한의 시작을 뜻한다. 

괄호안의 숫자는 시간을 의미하는데 차례대로 serial, refresh, retry, expire, minimum, hour, day, week를 의미)


IN: 

클래스 이름으로 internet을 의미함


NS: 

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


A: 

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


참고!!

             IN       A        (구글 ip주소) --> 그냥 도메인 네임만 쳤을때 가는 주소


www     IN       A        (구글 ip주소) --> www.도메인네임 쳤을때 가는 주소, 여기다가 만약 다음 ip주소를 친다면

             naver.com으로 갈때는 구글로 www.naver.com으로 가면 다음으로 뜨는 것이다.



데몬을 실행시키기 전에 named.conf 파일과 zone file의 에러를 체크하기 위해서

/usr/local/dns/sbin에 가봅시다.


[root@server103 sbin]# cd /usr/local/dns/sbin


[root@server103 sbin]# ll

total 20288

-rwxr-xr-x  1 root root 1117356 Dec  2 15:07 dnssec-keygen

-rwxr-xr-x  1 root root 3041724 Dec  2 15:07 dnssec-signzone

-rwxr-xr-x  2 root root 4289987 Dec  2 15:07 lwresd

-rwxr-xr-x  2 root root 4289987 Dec  2 15:07 named

-rwxr-xr-x  1 root root 3178669 Dec  2 15:07 named-checkconf

-rwxr-xr-x  1 root root 2990301 Dec  2 15:07 named-checkzone

lrwxrwxrwx  1 root root      15 Dec  2 15:07 named-compilezone -> named-checkzone

-rwxr-xr-x  1 root root  739791 Dec  2 15:07 rndc

-rwxr-xr-x  1 root root 1059815 Dec  2 15:07 rndc-confgen


named-checkconf, named-checkzone 이것들이 체크해주는거임


[root@server103 sbin]# ./named-checkconf

[root@server103 sbin]# ./named-checkzone naver.com /var/named/naver.com.zone

zone naver.com/IN: loaded serial 2

OK


이렇게 아무에러 없이 나오면 되는거고, 에러가 뿅 나오면 그걸 고쳐주면 된다.


++현 위치가 sbin이 아닐때는 절대경로로 하면 된다.

[root@server103 named]# /usr/local/dns/sbin/named-checkconf

[root@server103 named]# /usr/local/dns/sbin/named-checkzone naver.com /var/named/naver.com.zone




3. BIND 실행


그 다음 DNS 데몬 bind를 실행시켜보자.

[root@server103 sbin]# ./named


[root@server103 sbin]# ps -ef | grep named

root     15058     1  0 16:40 ?        00:00:00 ./named

root     15068  3571  0 16:41 pts/2    00:00:00 grep named



잘 실행되고 있네요


실행이 안되었다면 문제가 있는것

문제를 확인하기 위해서는 /var/log/messages를 보면 되는데 여기는 리눅스 모든 에러가 기록되고 있는 곳이다.

tail 10 /var/log/messages 로 10줄만 보고

에러를 찾아내서 고친다.

(9.3.1 버전은 named.pid오류가 나는데 아까 named.conf 에가서 options 안에 pid-file "/var/named/named/pid"; 를 입력)



이제 DNS서버를 나로 돌립시다.

항상 DNS정보를 확인하는 곳은 /etc/resolv.conf

[root@server103 sbin]# vi /etc/resolv.conf

nameserver 에 내 아이피주소를 넣는다.

저장하고 나와서..

네트워크 서비스 재시작을 꼭 합시다.


[root@server103 sbin]# service network restart




그럼 확인해봅시다.

우리는 네이버주소를쳤을때 네이버 화면이 아닌 구글 화면이나와야 함!!!!


리눅스안의 웹브라우저를 띄우고 naver.com 이나 www.naver.com 을 쳤을때 네이버 하면이 아닌 구글 화면 이 나오면 성공!


따단~




아니면 nslookup으로 확인가능


[root@server103 sbin]# nslookup

> server

Default server: 192.168.246.128

Address: 192.168.246.128#53

> www.naver.com

Server:         192.168.246.128

Address:        192.168.246.128#53


Name:   www.naver.com

Address: 74.125.128.94 --> 구글ip주소

> naver.com

Server:         192.168.246.128

Address:        192.168.246.128#53


Name:   naver.com

Address: 74.125.128.94 --> 구글ip주소


이러면 성공이다.




** 혹시 다 했는데도 이렇게 안되면 참고해라

오류때문에 zone,conf 파일 수정이나 다른 것 수정한 후 

ps -ef | grep named 해서 실행되고 있는 named 데몬을 kill -9 (작업번호)  명령어를 통해서 죽이고 다시 데몬 실행하고

service network restart 꼭 해주기 




bin : 일반 실행파일들 위치

sbin : root(수퍼유저) 가 실행할 파일 위치

var : 로그파일들, 실행시 프로세스 ID를 저장하는 파일들 위치