특정 도메인에 대한 네임서버(Master Name Server)를 구축해보자.
도메인 등록 업체에서 도메인을 구매했다면 이제 네임서버를 설정할 차례이다. (현재 보유하고 있는 도메인중에 goodmankorea.kr 이 있다. 지인의 부탁으로 구매했으나 사용하지 않는 도메인이기에 사용기간을 연장하지는 않을 것이다. 이 도메인으로 테스트를 진행하려 한다.) 도메인 등록 업체마다 메뉴구성이야 다르겠지만 기본적으로 아래와 같이 도메인의 1차 네임서버와 2차 네임서버를 설정할 수 있다. (3차, 4차도 가능하다)
bind를 설치했던 리눅스 서버의 ip 주소를 위의 1차 네임서버의 ip주소에 넣어주자. 서버가 한 대 뿐이라면 2차 네임서버는 생략해도 무방하며, 2차 네임서버의 ip주소와 1차 네임서버의 ip주소를 동일하게 설정해도 상관없다. 네임서버의 이름 앞에 붙인 ns1, ns2 는 해당 호스트를 네임서버로 사용될 것이기에 붙여주는 이름이며 큰 의미는 없다. 말 그대로 네이밍일 뿐이다. 단지 네임서버를 2개 이상 설정하는 경우에는 각각 이름의 중복을 피하기 위해서 통상 ns1, ns2 등으로 1차 네임서버, 2차 네임서버를 구분한다. 위의 예에서 1차 네임서버와 2차 네임서버의 ip주소는 동일하거나 서로 상이해도 아무런 문제가 없다. (네임서버를 여러개 설치하는 것은 부하의 분산이나 특정 네임서버가 작동하지 않는 등의 문제가 발생할 경우를 대비하기 위함이다. 따라서 1차 네임서버와 2차 네임서버(혹은 그 이상의 네임서버)를 하나의 물리적인 서버에 설치하는 것은 이러한 관점에서 봤을 때 별 의미는 작업이기는 하다.)
이제 네임서버에서 나의 도메인(goodmankorea.kr)인의 설정을 해보자.
/etc/name.conf 는 bind의 기본 설정파일이다. 파일의 하단에 include 된 "/etc/named.rfc1912.zones"를 볼 수 있을 것이다. 특정 도메인(여기서는 goodmankorea.kr)의 설정은 named.conf 를 직접 수정하거나 named.rfc1912.zone 에서 혹은 또다른 설정파일을 생성하여 추가할 수도 있다. 관리하는 도메인이 많다면 각 도메인들의 성격(용도), 사용자(계정) 혹은 기타 다른 기준으로 분류하여 몇 가지 설정파일을 만들어서 관리할 수 있다.
54 severity dynamic;
55 };
56 };
57
58 zone "." IN {
59 type hint;
60 file "named.ca";
61 };
62
63 include "/etc/named.rfc1912.zones";
64 include "/etc/named.root.key";
65
</etc/named.conf 내용의 일부>
나의 서버는 모든 관리를 당연히 내가 하겠지만, 각각의 도메인들의 사용자가 따로 있으므로 각 계정별로 파일을 별도로 만들어서 관리하고자 한다. 아래와 같다.
include "/etc/named.rfc1912.zones";
include "/etc/named.pius.zones";
include "/etc/named.phreun.zones";
include "/etc/named.root.key";
내가 사용하는 도메인은 named.pius.zones 라는 파일에서 정의할 예정이며, 그 밖의 도메인은 named.phreun.zones에서 정의할 예정이다. 파일의 소유권에 유의해야 한다. 아래와 같이 계정은 root, 그룹은 named 에게 할당하자.
[root@webpress etc]# ls -l named*
-rw-r--r-- 1 root root 621 Mar 2 00:14 named-chroot.files
-rw-r----- 1 root named 1968 Apr 17 17:02 named.conf
-rw-r--r-- 1 root named 3923 Mar 2 00:14 named.iscdlv.key
-rw-r----- 1 root named 0 Apr 17 17:02 named.phreun.zones
-rw-r----- 1 root named 0 Apr 17 17:00 named.pius.zones
-rw-r----- 1 root named 931 Jun 21 2007 named.rfc1912.zones
-rw-r--r-- 1 root named 1886 Apr 13 2017 named.root.key
named:
total 0
[root@webpress etc]#
네임서버를 구동했을 때에 loading configuration: permission denied 오류가 발생한다면 직접 추가한 파일들(여기서는 named.pius.zones, named.phreun.zones)의 ownership를 확인해보자. 소유계정은 root, 소유그룹은 named 에게 있는지 확인하자.
goodmankorea.kr 도메인을 위해서 named.pius.zones의 파일에 아래의 내용을 추가하자.
zone "goodmankorea.kr" IN {
type master;
file "goodmankorea.kr.zone";
allow-update { none; };
};
첫 번째 줄의 " " 안에는 도메인 네임을 입력한다. 두 번째 줄의 type은 1차 네임서버는 master로 2차 네임서버는 slave로 기재한다. 세 번째 줄의 file은 존파일(zone file)의 이름을 설정한다. 해당 도메인의 이름을 직관적으로 알 수 있게 지어주는 것이 관리하기에 편할 것이다. 네 번째 줄의 allow-update는 { } 안에 2차 네임서버의 ip주소를 입력한다. 만약 2차 네임서버가 없다면 위의 예에서 처럼 none;으로 설정할 수 있다.
이제 위에서 설정한 goodmankorea.kr.zone이라는 이름의 존파일을 생성해보자. 도메인과 ip주소를 연결해주는 핵심이 바로 존 파일이다. named.conf 의 option 구문을 보면 directory "/var/named"; 라고 설정된 부분을 볼 수 있다. 존 파일은 바로 이곳(/var/named)에 위치해야 한다. 물론 named.conf를 수정하여 다른 디렉토리로 변경할 수 있겠지만.....-_-;
참고로 지금과 같이 존파일을 정의만 하고 생성하지 않은 상태에서 네임서버를 (재)시동하면 file not found 오류가 발생하면서 빨간색의 Failed to start Berkeley Internet Name Domain (DNS). 라는 오류메시지를 보게 될 것이다.
/var/named 에 goodmankorea.kr.zone이라는 이름의 파일을 만들고 아래와 같이 입력하자.
$TTL 3H
@ SOA ns1.goodmankorea.kr. m.gmk.kr. ( 2021041701 1D 1H 1W 1H )
IN NS ns1.goodmankorea.kr.
IN A 1.234.67.89
ns1 IN A 1.234.67.89
www IN A 1.234.67.89
서버의 ip주소가 1.234.67.89 라는 가정하에 만든것이다. (실제 ip주소는 이게 아니지만 쉽게 확인할 수 있을 것이다.)
존파일에 대해서 간략하게 정리하자면
TTL(Time to Live)은 외부의 네임서버가 도메인(여기서는 goodmankorea.kr)의 IP주소를 캐시(cache)에 저장하고 있는 시간을 의미한다. 예를 들어 외부에서 goodmankorea.kr의 IP주소를 얻기 위해서 (지금 구축하고 있는) goodmankorea.kr의 도메인을 관리하고 있는 네임서버(goodmankorea.kr의 마스터네임서버)에 질의하여 해당 도메인의 ip주소가 1.234.67.89 라는 것을 알게 되었다면, 이후로 3시간(3H) 동안은 같은 요청이 들어왔을 때에 goodmankorea.kr의 네임서버에 질의하지 않고 자신의 캐시에서 해당 도메인의 ip주소를 얻게 되는 것이다.
@은 존파일에서 도메인네임을 의미한다. 위의 예에서는 goodmankorea.kr 이다.
IN은 Internet을 의미하는 클래스이름이다. HS, CHAOS 등 거의 사용되지 않는 클래스 이름도 존재한다.
SOA는 Start Of Authority이다. SOA 다음에 도메인이름을 기재하며(@으로 대체 가능), 그 다음에는 관리자의 이메일 주소를 넣는다. 만약 관리자의 이메일 주소가 root@goodmankorea.kr 이라면 root.goodmankorea.kr. 이라고 기재해야 하며(이메일 주소에서 사용하는 @는 존파일에서 도메인네임을 의미하기 때문), 도메인을 생략하고 root. 으로만 기재해도 된다. 위의 예에서는 관리자의 이메일주소가 m@gmk.kr 이라는 가정하에 m.gmk.kr. 로 기재했지만 실제 관리자의 이메일 주소는 아니다.(혹시 이러한 이메일 주소가 존재할지는 모르겠다. -_-;)
도메인을 등록하는 과정에서의 본인인증과 이메일 주소 등의 등록과 네임서버에서의 이메일 주소의 기재는 완전히 별개의 내용이기 때문에 존파일의 양식에만 맞춰서 등록하면 그만이다.
괄호안의 것들은 순서대로 serial, refresh, retry, expire, minimum을 나타내며 시간을 의미한다.
serial은 2차 네임서버가 1차 네임서버(Primary name server)의 존 파일이 업데이트 되었는지 확인할 때에 사용된다. 업데이트 여부는 이 시리얼을 통해 검사하며, 1차 네임서버의 시리얼번호가 2차네임서버(Secondary name server)의 시리얼보다 큰 경우 2차네임서버는 1차 네임서버가 업데이트 되었다고 판단하여 1차 네임서버의 존 파일은 전송해온다. 따라서 도메인이 변경되었거나 업데이트 된 경우 1차 네임서버의 시리얼번호를 변경(증가)시켜 주는 것이 2차 네임서버와의 동기화를 위해서 필요하다. 물론 2차 네임서버를 운영하고 있다면 말이다. 보통은 네임서버를 구축한 날짜를 시리얼로 설정하면 관리하기가 수월하다.
refresh는 위에서 설명한 2차 네임서버가 1차 네임서버가 업데이트 되었는지의 여부를 검사하는 시간주기이다. 존파일에서의 시간은 초(second) 단위로 기재가능하며, BIND가 업데이트 되면서 1D(하루:24시간), 1H(1시간), 1W(일주일) 등으로도 표기가 가능해졌다. 1D 대신에 86400, 2H 대신에 7200으로 기재해도 같은 내용이라는 뜻이다.
retry는 2차 네임서버가 1차 네임서버의 업데이트 여부를 확인하는 과정에서 1차 네임서버가 응답이 없는 경우, 2차 네임서버가 1차 네임서버의 업데이트 여부를 재확인하는 주기를 의미한다. 2차 네임서버를 운영하고 있다면 1800 (30분) 정도가 적당할 것이다.
expire는 2차 네임서버가 1차 네임서버에 재응답을 요청할 수 있는 시간 제한을 나타낸다. 여기서 설정한 시간동안 1차 네임서버로부터 응답을 받지 못했다면 2차 네임서버의 이전 정보들은 삭제된다.
NS는 네임서버(Name Server)의 약자로 해당 도메인의 네임서버를 지칭한다. 위의 예에서 goodmankorea.kr의 네임서버는 ns1.goodmankorea.kr이다.
A는 호스트에 IP주소를 지정할 때 쓰인다. 마지막줄에 www라는 호스트이름에 1.234.67.89 의 주소를 지정했다. 결국 goodmankorea.kr 의 IP 주소는 1.234.67.89 로 설정한다는 의미이다.
이 외에도 메일서버에 사용되는 MX(Mail Exchange), 호스트 이름에 별칭을 부여하는 CNAME 등이 있다.
예전에 운영하다가 그만둔 나의 또다른 티스토리 블로그에서 퍼왔다.
이 계정이 비밀번호 찾기를 해도 로그인이 안된다. -_-; lovelyhare.tistory.com/5?category=560920)
이때도 나의 토끼 사랑은 변함없었다 ^^
이제 네임서버를 재시동 해보자. 아래와 같다.
[root@webpress named]# systemctl restart named
그리고 아래와 같이 웹브라우저의 주소 입력란에 서버의 ip주소나 도메인을 입력하면 아파치웹서버가 정상적으로 작동하고 있다는 페이지가 열릴 것이다.
'Linux > 서버구축 1.2.3...' 카테고리의 다른 글
(9) 워드프레스를 위한 리눅스 서버 구축 - 웹서버3 (가상호스트2) (0) | 2021.04.19 |
---|---|
(8) 워드프레스를 위한 리눅스 서버 구축 - 웹서버2 (가상호스트1) (0) | 2021.04.18 |
(6) 워드프레스를 위한 리눅스 서버 구축 - 웹서버1 (설치와 기본설정) (0) | 2021.04.18 |
(5) 워드프레스를 위한 리눅스 서버 구축 - 네임서버1 (설치와 기본설정) (0) | 2021.04.18 |
(4) 워드프레스를 위한 리눅스 서버 구축 - ssh, [s]ftp[s]의 설정 (0) | 2021.04.18 |
댓글