본문 바로가기
Linux/DNS server

1,2,3차,..(n)차 서브도메인을 만들기 위한 네임서버[bind] 설정

by aegypius 2022. 5. 19.
728x90
반응형

Create Subdomain

  네임서버를 설정하는 과정에서 도메인 네임(domain name)에 호스트 네임(host name)을 추가하여 (1차)서브도메인을 생성할 수 있다. 실제 테스트 중인 eseoil.com을 예로 들면 아래와 같다. (zone파일의 일부)

~~~~~ 중략 ~~~~~

;############ 1차 서브도메인 ############;

abc                    IN      A     xx1.1xx.x9.2xx
subdomain              IN      A     xx1.1xx.x9.2xx
xn--3e0bs9hfvinn1a     IN      A     xx1.1xx.x9.2xx  ; (한글)대한민국
aegypius               IN      A     xx1.1xx.x9.2xx

  위의 abc, subdomain, xn--3e0bs9hfvinn1a(대한민국의 퓨니코드), aegypius 등의 호스트 이름을 포함한 도메인을 서브도메인이라고 한다. (한글을 사용하기 위해서는 punycode로 변환하여 사용해야 한다.) 이러한 서브도메인도 모두 별개의 도메인으로 활용할 수 있다. (클릭하면 열린다.)

abc.eseoil.com
subdomain.eseoil.com
대한민국.eseoil.com
aegypius.eseoil.com

  만약 대한민국.eseoil.com에 호스트 네임을 추가하여 서울.대한민국.eseoil.com이나 jeju.대한민국.eseoil.com 등과 같은  2차 서브도메인을 만들어야 한다면, 대한민국.eseoil.com 이라는 (서브)도메인을 관리하는 네임서버를 별도로 구축해야 한다. 이것을 보통 도메인 위임(domain delegation)이라고도 하는데, 이는 주로 부하의 분산이나 관리작업의 분산, 혹은 기타 필요한 작업을 수행하기 위함일 것이다. 지금과 같이 2차, 3차, 4차....등의 서브도메인을 만들어야 할 때도 필요하다. -_-; 이것이 내가 직접 네임서버를 운영하는 이유중의 하나이기도 하다.

  대한민국.eseoil.com 이라는 (서브)도메인의 네임서버를 설정하기 위해서 그 상위 도메인(eseoil.com 의 네임서버 설정)에서 아래와 같이 별도의 네임서버를 설정해야 한다.

~~~~~ 중략 ~~~~~

;############ 1차 서브도메인 ############;

abc                    IN      A     xx1.1xx.x9.2xx
subdomain              IN      A     xx1.1xx.x9.2xx
xn--3e0bs9hfvinn1a     IN      A     xx1.1xx.x9.2xx  ; (한글)대한민국
aegypius               IN      A     xx1.1xx.x9.2xx

xn--3e0bs9hfvinn1a     IN      NS    ns.xn--3e0bs9hfvinn1a.eseoil.com.
ns.xn--3e0bs9hfvinn1a.eseoil.com.    IN      A     xx1.1xx.x9.2xx

 

  일반적인 도메인의 네임서버 설정과 동일하다. NS레코드를 사용하여 대한민국.eseoil.com 도메인의 네임서버를 ns.대한민국.eseoil.com 으로 설정했다. 다시말하면 (*.)대한민국.eseoil.com 도메인(관리)권한ns.대한민국.eseoil.com위임한 것이다. 한글 사용이 가능한 리눅스에서 파일이나 디렉토리의 이름에는 당연히 한글을 사용할 수 있지만, 도메인 이름에 한글이 포함된다면 이와같이 puny code로 표현해야 한다. 이어서 A 레코드를 통해서 IP를 설정했으므로 해당 IP를 갖는 서버에 네임서버를 구축해야 한다. 이때 동일한 서버에 새로운 네임서버를 위임하는 것이라면 (어차피 동일한)IP주소의 설정은 생략이 가능하다. (위의 예에서 가장 마지막 줄은 통째로 생략할 수 있다.)

  또한 네임서버를 의미하는 ns(혹은 dns도 흔히 사용한다)라는 호스트 이름은 생략해도 무방하지만, 만약에 대한민국.eseoil.com의 네임서버를 3개정도 계획하고 있다면 ns1, ns2, ns3 등을 붙여서 구분하는 것이 관리하기 편할 것이다.

  이제.......상위 도메인(eseoil.com)의 네임서버에서 대한민국.eseoil.com 도메인의 네임서버를 새로 설정(위임)했으므로, 이제는 대한민국.eseoil.com의 네임서버를 구축해야 한다. 일반적인 신규 도메인의 네임서버 구축과정과 동일하게 bind의 설정 과정을 따르면 된다. named.conf에 해당 도메인의 정보를 입력하고 zone 파일을 만들어 보자. 아래와 같은 내용으로 대한민국.eseoil.com을 위한 존파일을 생성했다.

$TTL       3H

@          SOA    ns.xn--3e0bs9hfvinn1a.eseoil.com.  woong. ( 2022051901  1D  1H  1W  1H )
           IN     NS   ns.xn--3e0bs9hfvinn1a.eseoil.com.
           IN     A    xx1.1xx.x9.2xx
ns         IN     A    xx1.1xx.x9.2xx
www        IN     A    xx1.1xx.x9.2xx

xn--2i4bq6h       IN   A    xx1.1xx.x9.2xx ; 서울
jeju              IN   A    xx1.1xx.x9.2xx ;
xn--vk1bo21b      IN   A    xx1.1xx.x9.2xx ; 대전

 

  이제 각각의 호스트 이름(서울, jeju, 대전)에 대한 웹서버의 설정을 마치면 아래와 같이 2차서브도메인이 적용된 홈페이지를 볼 수 있다. (이것도 클릭하면 열린다.)

서울.대한민국.eseoil.com
jeju.대한민국.eseoil.com
대전.대한민국.esoil.com
www.대한민국.eseoil.com

  개인적으로는 대한민국.eseoil.comwww.대한민국eseoil.com을 동일한 웹사이트로 설정하는 것을 선호하는데.....이건 뭐 설정하기 나름이다. 만약 지금 설정하는 서브도메인을 실제로 사용할 계획이라면 아래와 같이 설정했을 것이다.

~~~~~ 중략 ~~~~~

;############ 1차 서브도메인 ############;

abc                    IN      A     xx1.1xx.x9.2xx
subdomain              IN      A     xx1.1xx.x9.2xx
aegypius               IN      A     xx1.1xx.x9.2xx

xn--3e0bs9hfvinn1a     IN      NS    ns.xn--3e0bs9hfvinn1a.eseoil.com.  ; 대한민국
ns.xn--3e0bs9hfvinn1a.eseoil.com.    IN      A     xx1.1xx.x9.2xx

  그리고 웹서버의 설정에서 대한민국.eseoil.com www.대한민국.eseoil.com을  ServerName과 ServerAlias로 묶어서 동일한 디렉토리로 처리하면 되는데, 용도에 따라서 원하는대로 설정하기 나름일 것이다.

  만약 3차(?) 서브도메인이 필요하다면 2차의 방법을 되풀이 하면 된다. 개인적인 생각이지만 2차 서브도메인까지는 봐줄만 한데...세 번째 서브도메인 부터는 좀......어색하다!(너무 길다). 필요하다면 4차 5차 서브 도메인에 도전해보자...-_-;


[2022-06-23]
뜬금없이
...3차 서브도메인까지 만들어봤다. (이것도 클릭하면 열린다.)

송파구.서울.대한민국.eseoil.com
aegypius.서울.대한민국.eseoil.com
역시길어.서울.대한민국.eseoil.com
3차서브도메인.서울.대한민국.eseoil.com

이 역시 2차 서브도메인의 생성과정과 동일하다.

xn--2i4bq6h   IN   NS   ns.xn--2i4bq6h.xn--3e0bs9hfvinn1a.eseoil.com. ; 서울.대한민국.eseoil.com
ns.xn--2i4bq6h.xn--3e0bs9hfvinn1a.eseoil.com.  IN  A  ###.###.###.###

대한민국.eseoil.com 도메인의 zone파일(대한민국.eseoil.com.zone)에서 서울(xn--2i4bq6h) 이라는 호스트로 네임서버를 서울.대한민국.eseoil.com(퓨니코드 조합으로)으로 설정하고, 설정한 네임서버에 A(address) 레코드로 ip주소를 설정 -매핑(mapping)- 하면 된다. 이후의 작업은 '서울.대한민국.esoil.com'이라는 도메인의 네임서버를 새로 설정하는 것과 동일하다. 웹서버도 적당히(?)설정하면 되겠다...


# zone파일을 만들 때 참고사항 #

1. 도메인 네임의 끝에 .(점! 쩜!! dot!!!) ??
: zone 파일에서 도메인 이름을 표기할 때 ("SOA 레코드"도 포함해서) FQDN형식(한마디로 full-name)이라면 마지막에 "."을 꼭 넣어주자. 만약 "."을 생략하게 되면 NS 'domain.tld' has no address records (A or AAAA)라는 오류메시지를 볼 수 있을 것이다.
여기서 "."의 의미는 마침표가 아니라 도메인의 트리구조에서 최상위에 위치하고 있는 root domain을 의미한다. (bind의 설정에서)이것을 생략하게 되면 '표기한 이름(호스트 네임이건 도메인 네임이건 상관없이)'뒤에 @이 추가된 형태의 도메인 이름으로 인식된다. [zone파일에서 "@"(origin)는 현재 설정중인 public domain을 의미한다.] 위의 서브도메인을 만드는 예에서 호스트 이름에 .(dot)을 사용하지 않았기 때문에 사용한 호스트이름 뒤에 @(public domain)이 추가되어  최종적으로 'host.domain.tld.'의 형태로 인식되는 것이다. 반대로 2차와 3차 서브도메인의 생성을 위해서 서브도메인의 권한을 새로운 네임서버에 위임하고, 글루 레코드를 사용하여 ip주소를 매핑할 때에는 FQDN 형식으로 기술했는데, 여기서도 .(dot)을 포함한 public domain을 생략하면 bind가 origin을 덧붙여서 FQDN 형식으로 완성시켜준다. "글루레코드를 사용할 때에는 FQDN으로 표기하자."

dot

.(dot)을 생략하고 안하고의 문제는 습관(?인가? 아닌가?) 같다. 나는 서브도메인의 권한을 위임할 때에는 위의 예에서와 같이 표기하고, 그 이외의 상황에서는 생략한다. 이에 대한 별다른 이유는 없다. 마치 CNAME 레코드를 절대로(?) 사용하지 않는 것에 특별한 이유가 없는 것 처럼......

CNAME은 별거없다.

abc                    IN      A     xx1.1xx.x9.2xx
subdomain              IN      A     xx1.1xx.x9.2xx
xn--3e0bs9hfvinn1a     IN      A     xx1.1xx.x9.2xx  ; (한글)대한민국
aegypius               IN      A     xx1.1xx.x9.2xx

위의 내용을 cname을 사용해서 아래와 같이 설정할 수 있다.

abc                    IN      A     xx1.1xx.x9.2xx
subdomain              IN      CNAME abc
xn--3e0bs9hfvinn1a     IN      CNAME abc  ; (한글)대한민국
aegypius               IN      CNAME abc

1: abc(.esoil.com.)의 ip주소는 xx1.1xx.x9.2xx 이다.
2: subdomain(.eseoil.com.)은 abc(.eseoil.com)과 동일하다. (subdomain = abc)
3:이하 3,4번째 줄은 2번째 줄과 같은 내용이다.

호스트별로 동일한 ip주소를 계속 나열하는 것보다는 CNAME을 사용하는 것이 깔끔해 보일 수 있고, 혹시나 서버의 ip주소가 바뀐다면 CNAME을 사용한 것이 수정이 용이하겠지만 개인적으로 '보다 직관적인' A레코드가 편하다. (개인적인 의견일 뿐이다. 하지만 내 서버에 CNAME은 없다)

2. zone파일의 소유권은 root.named로 설정하자.
   : named.ca / named.empty / named.localhost / named.loopback 와 동일하게 설정하자.

3. isc.org bind9 document를 참고하자.
   : 이곳의 문서를 참고한 적은 없지만.....언젠가(?) 참고할 날이 올지도....-_-;
     각 버전별 프로그램의 소스와 문서를 얻을 수 있다.
    https://ftp.isc.org/isc/bind9/

 

Index of /isc/bind9

 

ftp.isc.org


### 1,2,3차 서브도메인과 wildcard DNS에 대한 짧은 낙서.... ###

네임서버의 권한 위임을 수차례 진행해서...1차, 2차, 3차.....등의 서브도메인을 만들었더라도 하나의 도메인에는 단 한 번(하나)의 wildcard DNS만 허용되는 아래와 같은 상황이 있다(!?).

예를 들어서
mydomain.tld라는 도메인이 있다면 multi.mydomain.tld, aegypius.multi.mydomain.tld 형태의 서브도메인을 생성할 수 있을 것이다. 실제로 사용할 수 있는 도메인을 아래와 같이 설정했다면.....
(1)ns.mydomail.tld   (2)ns.multi.mydomain.tld   (3)ns.aegypius.multi.mydomain.tld

(1)번 도메인에 wildcard dns를 적용한 후에 (2)번 도메인에 추가로 wildcard dns를 적용했더니 (2)번 도메인은 정상적인 연결이 안되고 오류가 발생했다. 여기서 (1)번의 wildcard dns를 제거하면 (2)번에 설정한 wildcard dns는 정상적으로 작동하는 것 까지 확인했다.

하지만 아래와 같은 서브도메인을 구축하고...
(1)ns.mydomain.tld   (2)ns.multi.mydomain.tld   (3)ns.sub.mydomain.tld
메인도메인이 아닌 (2)번에 wildcard dns를 설정했다면 (3)번에 설정해도 아무런 문제가 없다. 살다보니(?)이런 형식으로 운영해야 될 상황이 생긴다. 이러한 경우 (1) ~ (3) 모두 개별적으로 wildcard DNS를 설정해도 문제없이 돌아갈 것 같기는 한데...테스트 해 본 것은 아니고..그저 추축일 뿐이다.

p.s.
서버를 옮기는 과정에서 이 글에서 예제로 보여준 서브도메인 설정은 따로 백업하지도 않았고 새로 작성하지도 않았는데...뭔가 좀 허전한거 같아서...급하게 다시 만들어봤다... 서버를 이전하는 일이 흔하지는 않는데...2~3년 내에 다시 서버를 옮기게 된다면....그 때는 연습용 도메인을 좀 바꾸고...나름 체계적으로 만들어볼까..라는 생각이다. - 2024-01-30

728x90
반응형

댓글