[이석준]님이 남기신 글:
>안녕하세요? 초보 서버관리자입니다.
>책을 읽고 사이트 하나를 겨우 세팅하였는데요.. 궁금한 점이 하나 있어 질문을 드립니다. 만약 서버로 웹호스팅등을 할때 네임서버가 관리하는 도메인이 1000개라면 1000개의 서로 다른 zone파일을 서버내에 만들어 줘야 하는지요? 그리고 그럴 경우 속도가 저하되지는 않을런지요?
>
BIND는 처음 시작할때
/etc/named.conf 파일에 설정한 /var/named/* zone 데이터베이스 파일을
읽어서 메모리로 올립니다.
메모리로 올리고 나면 더이상 /var/named/* 파일은 필요하지 않습니다.
즉 localhos 또는 원격의 리졸버에 대한 요청은 메모리에 있는 정보를
되돌려 줍니다.(파일을 읽어서 답변하지 않음)
1000개의 zone 데이터베이스 파일이 각자 모두 완전히 다르다면,
즉 공통적이 부분이 거의 없다면 1000개의 파일을 만들어줘야 합니다.
(참고)
ext2 파일 시스템에서 하나의 디렉토리에서 1000~3000개 이상의
파일에 대해서 입출력이 일어나면 엄청나게 시스템이 느려짐
그러나 대부분 1,2차 네임서버주소, 네임서버 관리자 주소
www 호스트, mail 호스트, ns, ns2 호스트 등등 기본적으로
사용하는 호스트는 거의 같은 IP 주소를 사용하거나
비슷한 패턴을 가집니다.
만약 관리하는 모든 도메인에 대해서 도메인 부분만 다르고
모든 호스트가 완전히 각자 모두 동일한 IP 주소를 가진다면
하나의 파일로 통일할 수 있습니다.
예)
file "zone-default"; // for domain1.com
...
file "zone-default"; // for domain2.com
...
file "zone-default"; // for domain3.com
...
file "zone-default"; // for domain4.com
-- /var/named/zone-default -------------
$TTL 86400
@ SOA (....)
@ IN NS 111.111.111.111
@ IN NS 111.111.111.222
@ IN A 111.111.111.123
@ IN MX 0 mail
...
www IN A 111.111.111.123
mail IN A 111.111.111.124
...
----------------------------------------
($ORIGIN 지시자를 반드시 빼야함, 유동적으로 설정하므로)
이와 같이 '도메인' 부분을 모두 빼주어 설정해 주면 됩니다.
이 방법은 공통적으로 적용되는 부분에 대해서 도메인 부분을
빼고 하나의 파일로 만든 다음 그 파일을 zone 데이터베이스로
지정하는 예입니다.
따라서 도메인이 추가되면 /etc/named.conf파일에만
추가하고 따로 zone 데이터베이스 파일을 만들 필요가 없는
방법이죠.
혹시 '개정판'을 가지고 계신다면 p.448을 참고하면
비슷한 방법에 대해서 쉽게 답을 얻을 수 있습니다.
[권장방법]
일반적으로 도메인은 순차적으로 등록하여 사용하므로
어느 시점에 가면 첫번째 도메인과 모두 같은 설정을
가지는게 보통입니다.(NS, www, mail, ns)
따라서
50개 또는 100개 또는 200개 단위로 공통적인 부분을
뽑아서 공유하는 파일을 만들어 관리하든지
아니면 동일한 구조를 갖는 도메인인 끼리 묶어서
앞의 경우와 같이 공유하는 파일을 만들어 주면 됩니다.
zone 데이터베이스 파일에서
$ORIGIN, $INCLUDE 지시자를 사용하면 아주 관리가
편해집니다.
>그리고 또 하나요, hosts파일에 같은 ip에 해당하는 호스트들을 전부 적어주고 host.conf에 "order hosts,bind"로 적어주었습니다. 그랬더니 그냥 dns를 쓰는것보다 사이트접속이 빠르더군요. 그런데 같은 ip에 매칭시킨 다른 도메인은 hosts파일에 설정을 해주었는데도 속도가 dns를 통해 접속하는것 같았습니다. "ns1.도메인"도 이파일에 세팅해뒀는데 smtp가 메일을 보내거나 받을때 처음 접속이 느립니다. 원인이 뭔지 모르겠습니다. 그리고 hosts파일의 경우에도 1000개면 1000개를 전부 적어주어야 하는지요? 답을 좀 부탁드립니다. 수고하십시오~
/etc/hosts 파일은 localhost의 리졸버들이 사용하는
파일입니다. 'localhost의 리졸버'의 의미는 localhost의
telnet, mozilla, ftp, stmp, ... 등등 localhost가 원격의 어떤
호스트에 접속하기 위해서 '호스트->IP'로 변환해 주는 테이블입니다.
원격의 호스트가 사용하지 않고 localhost의 모든 리졸버가 사용하고
실시간으로 변경된 /etc/hosts 파일을 확인해서 사용합니다.
간단하게 localhost가 /etc/hosts 파일을 사용하는지 아니면
실제로 DNS을 사용하는지에 대해서 그 진위를 알고 싶다면
간단하게 telnet 으로 알아볼 수 있습니다.
/etc/hosts 파일에는 192.168.10.111으로 설정되어 있고
localhost의 DNS에는 192.138.10.3으로 설정되어 있고,
인터넷상의 www.linux.ac.kr 호스트는 실제로
218.53.178.130 주소입니다.
$ telnet www.linux.ac.kr
Trying 192.168.10.111...
...
localhost의 리졸버인 telnet이 제대로 /etc/hosts 파일을
사용하고 있다는 것을 알 수 있습니다.
만약 /etc/hosts 파일을 사용하고 그 테이블 길이가 너무
길면 오히려 역효과가 납니다.
즉 실시간으로 /etc/hosts 파일을 뒤져서 찾아야 하기 때문에
시간이 오래 걸릴 수 있다는 단점이 있습니다.
이 경우는 편법적으로 localhost의 DNS에 자주 접속하는
도메인을 등록해주어 localhost의 리졸버들이 메모리에
있는 DNS 정보를 이용하도록 하는 방법도 강구해 볼 수 있습니다.
(계속 localhost의 DNS를 구동해줘야함)
/etc/hosts 파일에서 1000개의 라인이 있다면
좀 비효율적인 방법이 될 수 있습니다.
(시스템 사양에 따라서 다름)
*PS:
설명이 길어서 존 난잡하네요.
혹시 빠진 부분이 있으면 다시 질문해 주세요. |