본문 바로가기

CentOS 5.x 네임서버(DNS)와 가상호스트

728x90
반응형


10년동안 웹호스팅만 사용해 오다 처음으로 서버를 임대 받았다.
서버 호스팅은 리눅스 설치 외에는 별도로 지원되는게 서비스가 없어 서버 세팅과 운영 전반은 사용자 스스로 해결 해야 한다.
딱히 지식도 없으면 무작정 서버 임대부터 했다.

DNS란?
그 개념은 너무 많은 책들과 인터넷에 자세하게 설명 되어 있다.

웹서버를 운영하는데는 많은 지식이 필요하지만 한 번 익숙해지면 어렵지 않다.
반복이기 때문에 쉽다고 여겨질만큼 반복 해 보는 것이 좋다.

가정에서 PC를 이용해 직접 서버를 구축 했을 땐 유동IP에 도메인을 연결 시켜야 하는데 이때는 애쓰지 말고 kr.dnsever.com을 이용하는 것이 편하다.
실무에 사용할 고정IP 서버가 준비 되었다면 우선 APM을 설치한다.

CentOS라면 yum을 이용해 bind를 설치한다.
bind는 네임서버 프로그램이라고 이해하는게 좋다.
]# rpm -qa | grep bind
ypbind-1.19-1l.el5
bind-libs-9.3.4-10.P1.el5_3.1
bind-9.3.4-10.P1.el5_3.1
bind-utils-9.3.4-10.P1.el5_3.1
bind-chroot-9.3.4-10.P1.el5_3.1

이런 결과가 나왔다면 이미 bind가 설치 되어 있으니 install은 생략해도 된다.
]# rpm -qa | grep nameserver
caching-nameserver-9.3.4-10.P1.el5_3.1
caching프로그램이 설치 되어 있지 않다면 설치 해야 한다.

]# yum -y install bind*
bind를 설치하는 방법
]# yum install caching-nameserver
보안을 위한 caching-namesserver를 설치하는 방법

이제 네임서버 기본 환경설정이 필요하다.
]# vi /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; };
        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; };
        allow-query-cache { any; };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };
        match-destinations { any; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
};
-----------------------------------------------------------------------------------------------
한번 설정 되면 다시 수정 할 일이 없다.

네임서버를 위한 준비는 끝났다.
이제 hosts, resolv.conf, host.conf, zone파일 등을 설정하거나 생성하며 도메인이 웹 서버에 연결되도록 한다.

]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
180.71.58.181   ziumsoft.co.kr  ziumsoft
127.0.0.1       localhost
------------------------------------------------------------------------------------------------
hosts파일은 인터넷에서 내 서버로 접근 해 올 때 네임서버를 거치지 않고 도메인과 IP를 바로 연결 시켜주는 파일이다.
네임서버 이름으로 사용할 주 도메인 하나만 등록 해 두자.
네임서버가 정상 작동 된다면 꼭 등록하지 않아도 무관하다.
180.71.58.181   ziumsoft.co.kr  ziumsoft
[서버 아이피] [도메인] [닉네임]
각 항목은 Tab으로 칸을 뛰우고 닉네임은 서버 내에서 도메인 대신 사용할 수 있는 이름으로 생략해도 부관하다.
여기서 ziumsoft는 ziumsoft.co.kr과 같다.

]# cat /etc/host.conf
order hosts,bind
-------------------------------------------------------------------------------------------------
host.conf 파일에 한 줄이 있다.
order hosts,bind는 도메인을 찾을 때 hosts 파일을 먼저 찾을 것인지 bind 즉 네임서버에서 찾을 것인지 순서를 정하는 것이다.
bind, hosts로 순서를 바꾸면 네임서버를 먼저 검색하기 때문에 의미가 없어진다.
보통은 수정 없이 그대로 사용하면 된다.

]# cat /etc/resolv.conf
nameserver      180.71.58.181
nameserver      168.126.63.1
nameserver      168.126.63.2
---------------------------------------------------------------------------------------------------
도메인 정보를 검색할 네임서버 목록이다.
첫째줄은 네임서버가 설치 된 내 서버의 아이피이고 둘째, 셋째줄은 KT의 네임서버로 첫줄부터 1차, 2차, 3차 네임서버까지 등록 할 수 잇다.
1차 서버에서 도메인 정보를 찾지 못하면 2차 서버를 찾는 순이다.

여기까지 되었다면 위의 파일들은 이제 손댈 필요가 없다.


사용자를 추가하고 도메인을 등록하고 사용자의 계정에 올려진 홈페이지로 연결 하도록 하는 작업은 익숙 해 질 때까지 반복 해 보는게 좋다.
자주 작업하게 될 부분이다.

사용자 추가
]# adduser userid
userid라는 사용자를 추가한다.
]# passwd userid
userid라는 사용자의 비밀번호를 설정한다.

CentOS라면 아마도 /home이라는 디렉토리가 있을 것이다.
계정 사용자가 이용 할 수 잇는 디렉토리로 주로 홈페이지는 이 곳에 올려진다.
/home이란 디렉토리가 없다면 만들어도 된다.
chmod 실행 권한은 755로 한다.
이 폴더에 들어가면 userid라는 폴더가 생성 된 걸 볼 수 있다.
userid는 로그인 후 이 폴더에만 접근이 가능하게 된다.
]# mk www
]# chown userid:userid www
]# chmod 755 userid
www라는 디렉토리는 앞으로 홈페이지를 올릴 디렉토리이다. index가 존재할 경로가 된다.

사용자가 추가 됐다.
이제 네임서버에 도메인을 등록 하고 아파치가 도메인을 인식해 /home/userid/www에 있는 홈페이지로 연결 되도록 설정 해야 한다.

zone파일을 생성한다.
zone 파일은 도메인 정보를 기록하고 있다.
]# vi /etc/named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "." IN {
        type hint;
        file "named.ca";
};

zone "localdomain" IN {
        type master;
        file "localdomain.zone";
        allow-update { none; };
};

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 "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.ip6.local";
        allow-update { none; };
};

zone "255.in-addr.arpa" IN {
        type master;
        file "named.broadcast";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.zero";
        allow-update { none; };
};

zone "181.58.71.in-addr.arpa" IN { type master; file "named.rev"; allow-update { none; }; };

zone "ziumsoft.co.kr"   IN { type master; file "ziumsoft.co.kr.zone";   allow-update { none; }; };
------------------------------------------------------------------------------------------
다른 부분은 수정이 불필요 하지만 아래 두 줄은 추가 되야 할 부분이다.

zone "181.58.71.in-addr.arpa" IN { type master; file "named.rev"; allow-update { none; }; };
이 부분에서 주의 할 것은 181.58.71.in-addr.arpa 아이피가 역순으로 기제된다.
도메인 네임 서버가 가령 ziumsoft.co.kr일 때 kr > co > ziumsoft 순으로 도메인을 추적하는 것처럼 아이피도 뒤로부터 검색된다.
아이피 중심 네임서버일 때 이 부분의 설정이 필요한데 없어도 실행에는 문제가 없었으나 남들도 다 하니까... ㅡㅡ
zone "ziumsoft.co.kr"   IN { type master; file "ziumsoft.co.kr.zone";   allow-update { none; }; };
중요한 레코드다.
ziumsoft.co.kr에 대한 도메인 정보는 ziumsoft.co.kr.zone이란 파일에 기록 되어 있다는 뜻이다.

]# vi /var/named/chroot/var/named/ziumsoft.co.kr.zone

$TTL    43200
@               IN SOA          ns.ziumsoft.co.kr. admin.ziumsoft.co.kr. (
                                2011081904      ;serial (d. adams)
                                10800           ;refresh
                                3600            ;retry
                                43200           ;expriy
                                43200           ;minimum
                                )
; Name server
                IN NS           ns.ziumsoft.co.kr.
                IN MX 10        ziumsoft.co.kr.
;
; Host name & Infomations
@               IN A            180.71.58.181
mail            IN A            180.71.58.181
ns              IN A            180.71.58.181
;
; VirtualHost
ftp             IN A            180.71.58.181
;
; Alias
www             IN CNAME        @
;
*               IN A            180.71.58.181
;
ziumsoft.co.kr. IN TXT "v=spf1 ip4:180.71.58.181 -all"
---------------------------------------------------------------------------------------
$TTL    43200
43200이란 숫자는 초 단위를 말한다.
도메인 정보는 분산된 네임서버에서 정보를 불러올 때 캐쉬된 정보를 읽어온다.
43200초가 지나면 캐쉬된 정보는 없어지고 다시 원본의 네임서버 정보를 읽어들인다.
@               IN SOA          ns.ziumsoft.co.kr. admin.ziumsoft.co.kr. (
@는 origin이란 뜻으로 현재 내 도메인을 뜻한다.
SOA는 레코드 타입으로 초기활 의미한다.
ns.ziumsoft.co.kr.은 네임서버의 이름이다.
admin.ziumsoft.co.kr.은 admin@ziumsoft.co.kr로 메일이 왔을 때 이 도메인에서 처리하겠다는 뜻이다.
그런데 이메일 주소에 @가 아니라고 점(.)으로 구분한 이유는 무엇일까?
@는 이미 origin이란 의미를 갖고 있기 때문에 혼돈을 피하기 위해 .으로 구분해서 사용한다.
여기서 가장 주의 할 것은 도메인 뒤에는 항상 점(.)이 붙는다.
예를들어 ziumsoft.co.kr이란 도메인이 있을 때 실제로는 co.kr뒤에 .(점)이 없다면 아직 끝난 도메인이 아니다.
우리가 브라우저에서는 도메인 뒤에 .을 찍지 않지만 컴퓨터 내부에서는 .을 자동으로 부여한다.
만약 ns라고만 썼다면 ns.ziumsoft.co.kr과 같은 의미가 된다.
.을 찍지 않았고 ziumsoft.co.kr로 표기 했다면 도메인 뒤에 @가 붙어 실제로는 ziumsoft.co.kr.ziumsoft.co.kr로 컴퓨터는 인식하게 된다.
zone파일을 작성 할 때는 도메인 뒤에 반드시 점(.)을 찍어야 한다.
                                2011081904      ;serial (d. adams)
zone파일 일련번호가 된다.
규칙이 따로 있는건 아니지만 보통 날짜뒤에 숫자를 쓰게 된다.
네임서버가 한 번 작동하게 되면 분산 된 네임서버에는 캐쉬된 도메인 정보를 갖게 된다.
만약 네임서버를 재실행 했을 때 캐쉬에 있는 일련번호보다 이 숫자가 크다면 캐쉬는 지워지고 새 정보가 읽혀진다.
만약 수정 된 zone파일을 적용하고 싶다면 이 번호를 이전보다는 크게 적어야 한다.
                                10800           ;refresh
도메인정보를 다시 읽을 때까지 기다리는 시간이다.
                                3600            ;retry
도메인정보 실패시 재시도 할 때가지 기다리는 시간이다.
                                43200           ;expriy
프리머리 서버에서 갖어온 도메인 정보를 제거하는 시간이다.
                                43200           ;minimum
nslookup을 할 때 캐쉬에서 도메인 정보를 읽어오게 되는데 캐쉬에서 도메인 정보가 제거되는 시간이다.
캐쉬정보가 제거되면 다시 도메인을 정보를 읽어오므로 이 시간은 TTL값고 같게 한다.
                                )
; Name server
                IN NS           ns.ziumsoft.co.kr.
네임서버의 주소가 된다.
                IN MX 10        ziumsoft.co.kr.
MX는 mail exchange로 메일 서버의 주소가 된다.
;
; Host name & Infomations
@               IN A            180.71.58.181
@는 origin으로 현재 도메인을 뜻하며 A는 아이피 정보를 말한다.
여기서 해석하자면 ziumsoft.co.kr가 연결 되는 아이피는 180.71.58.181이 된다.
mail            IN A            180.71.58.181
이 문장을 해석 하자면 mail.ziumsoft.co.kr의 아이피는 180.71.58.181이 된다.
mail뒤에 점(.)이 없으므로 뒤에 @가 붙는 것과 같다.
ns              IN A            180.71.58.181
네임서버의 아이피
;
; VirtualHost
ftp             IN A            180.71.58.181
ftp.ziumsoft.co.kr의 주소를 의미한다.
;
; Alias
www             IN CNAME        @
CNAME은 A와 같은 의미를 갖는다.
A는 뒤에 아이피로 기록한다.
;
*               IN A            180.71.58.181
*는 와이드카드로 모든 문자를 의미한다.
모든 서브도메인은 이 아이피로 연결 된다.
;
ziumsoft.co.kr. IN TXT "v=spf1 ip4:180.71.58.181 -all"
이 줄은 생략해도 무관하다.
화이트도메인을 등록하기 위한 것인데 KISA 홈페이지를 참조해야 한다.
안전 서버로 인정 받으면 한메일로도 메일을 보낼 수 있게 된다.

이제 zone 파일을 작성했다.

]# service named restart
네임서버를 재실행 한다.

]# nslookup ziumsoft.co.kr
Server:         180.71.58.181
Address:        180.71.58.181#53

Name:   ziumsoft.co.kr
Address: 180.71.58.181
---------------------------------------------------------------------------
만약 KT의 네임서버를 1, 2차 네임서버로 했다면 Server와 Adress는 KT의 아이피가 보인다.


]# cat named.rev
$TTL 43200
@                       IN      SOA     @       root (
                                2011081801      ; serial
                                3H              ; refresh
                                15M             ; retry
                                1W              ; expire
                                1D )            ; minimum

                        IN      NS      ns.ziumsoft.co.kr.
-----------------------------------------------------------------------------
위에서 /etc/named.rfc1912.zones에서 zone "181.58.71.in-addr.arpa" IN { type master; file "named.rev"; allow-update { none; }; }; 이 부분을 기억 할 필요가 있다.
리버브 파일은 존 파일과 형식은 같다.

이제 도메인과 서버는 연결 됐다.
아파치 설정 후 바로 사용이 가능하다.
아파치는 /var/local/apach/conf/extra/vhost-httpd.conf파일에서 가상 호스트를 설정 설정한다.
httpd.conf에 대한 내용은 책이나 블로그에 너무 많이 나와 있다.


이 서버에 다른 도메인을 추가 하고 싶을 땐
zone파일을 작성하고 네임서버를 재실행 하면 된다.
예를들어 aaaa.co.kr을 추가하고자 할 때는
]# vi /etc/named.rfc1912.zones
...
zone "aaaa.co.kr"   IN { type master; file "aaaa.co.kr.zone";   allow-update { none; }; };
를 추가한다.
]# vi /var/named/chroot/var/named/aaa.co.kr.zone
zone 파일을 작성한다.

네임서버를 재실행한다.




주의!
zone 파일에서 도메인네임 뒤에는 항상 점(.)을 찍어야 한다.

주의!
원래 zone 파일의 위치는 /var/named 이곳인데 /var/named/chroot/var/named에 기록하는 이유는 보안 때문이다.
비정상적으로 접근 사용자에게 zone 파일의 위치를 노출하지 않기 위해서다.
심볼릭링크로 네임버서가 zone 파일을 읽을 수 있도록 해 준다.
]# ln -s /var/named/chroot/var/named/aaaa.co.kr.zone /var/named/aaaa.co.kr.zone
ls -s [원본파일] [링크파일]

주의!
보통 이런 작업은 root권한인 상태에서 하게 된다.
파일을 작성하게 되면 소유권은 root가 된다.
]# ll
...
-rw-r------ 1 root root 4096 1월 20 19 17:03 aaaa.co.kr.zone
]# chgrp named /var/named/chroot/var/named/aaaa.co.kr.zone
그룹소유를 named(네임서버)에게 넘겨 주지 않으면 네임서버를 재 실행해도 zone 파일을 읽을 수 없기 때문에 네임서버에 도메인 정보를 적용 할 수 없다.
zone파일의 그룹 소유권은 named가 갖는다는 걸 잊지 말아야 한다.

주의!
동기화 시간을 기다려야 한다.
네임서버를 재실행 해도 도메인 정보가 분산된 네임서버에 적용 되는데는 시간이 걸린다.
느긋하게 마음 먹자.

주의!
계정을 얻은 사용자가 FTP로 서버에 접근 했을 때 보통은 상위 디렉토리로 계속 이동하다보면 루트(/)까지 볼 수 있게 된다.
/home 이상으로 벗어나지 못하게 할 때는 /vsftpd.conf파일에서 chroot_local_user = YES로 바꾸자.
vsftp를 사용할때만 적용된다.


Tip!
각 계정별 사용량 제한은 Queta로 지정 할 수 있다.
Tip!
화이트도메인 등록은 http://ziumsoft.co.kr/zms/bbs/board.php?bo_table=tipntech&wr_id=4&page=0

728x90
반응형