7. 실도메인의 예

실제 도메인의 예

이제 실제 예시로 사용이 되고 있는 예를 들어보기로 한다

나는 예제로 Dave Bullock의 LAND-5를 예로 들어 본다. 이 파일들은 1996년 9월 24일에 만들어 졌고 BIND-8규정에 맞게 약간 확장편집을 해 놓았다. 지금의 LAND-5 named 서버를 질의한다면 약간의 차이가 있을 것이다.

7.1. /etc/named.conf (or /var/named/named.conf)

이제 127.0.0 net과 LAND-5의 206.6.177 서브넷에 필요한 2개의 reverse zone이 있는 master zone부분에 대해서 보기로 하자. 그리고 land-5의 포워드 존인 land-5.com도 보기로 하자. HOWTO에서 쓰던 pz 대신에 zone이라는 디렉토리를 쓰는 것도 주의하길 바란다.

// Boot file for LAND-5 name server

options {
	directory "/var/named";
};

zone "." {
	type hint;
	file "root.hints";
};

zone "0.0.127.in-addr.arpa" {
	type master;
	file "zone/127.0.0";
};

zone "land-5.com" {
	type master;
	file "zone/land-5.com";
};

zone "177.6.206.in-addr.arpa" {
	type master;
	file "zone/206.6.177";
};

만약 위와 같이 named.conf파일을 설정했다면 제발! 2개의 land-5 zone에 "notify no;"라고 적어서 충돌을 방지해주길 바란다.

7.2. /var/named/root.hints

이 파일들이 유동적이라는 사실을 기억해라. 그리고 이것이 옛날 것이라는 것도 기억하라. 이전에 설명한 dig 로 지금의 것을 측정하는 것이 훨씬 나을 것이다.

; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET. 
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
;; QUERY SECTION:
;;	., type = NS, class = IN

;; ANSWER SECTION:
.			6D IN NS	G.ROOT-SERVERS.NET.
.			6D IN NS	J.ROOT-SERVERS.NET.
.			6D IN NS	K.ROOT-SERVERS.NET.
.			6D IN NS	L.ROOT-SERVERS.NET.
.			6D IN NS	M.ROOT-SERVERS.NET.
.			6D IN NS	A.ROOT-SERVERS.NET.
.			6D IN NS	H.ROOT-SERVERS.NET.
.			6D IN NS	B.ROOT-SERVERS.NET.
.			6D IN NS	C.ROOT-SERVERS.NET.
.			6D IN NS	D.ROOT-SERVERS.NET.
.			6D IN NS	E.ROOT-SERVERS.NET.
.			6D IN NS	I.ROOT-SERVERS.NET.
.			6D IN NS	F.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
G.ROOT-SERVERS.NET.	5w6d16h IN A	192.112.36.4
J.ROOT-SERVERS.NET.	5w6d16h IN A	198.41.0.10
K.ROOT-SERVERS.NET.	5w6d16h IN A	193.0.14.129
L.ROOT-SERVERS.NET.	5w6d16h IN A	198.32.64.12
M.ROOT-SERVERS.NET.	5w6d16h IN A	202.12.27.33
A.ROOT-SERVERS.NET.	5w6d16h IN A	198.41.0.4
H.ROOT-SERVERS.NET.	5w6d16h IN A	128.63.2.53
B.ROOT-SERVERS.NET.	5w6d16h IN A	128.9.0.107
C.ROOT-SERVERS.NET.	5w6d16h IN A	192.33.4.12
D.ROOT-SERVERS.NET.	5w6d16h IN A	128.8.10.90
E.ROOT-SERVERS.NET.	5w6d16h IN A	192.203.230.10
I.ROOT-SERVERS.NET.	5w6d16h IN A	192.36.148.17
F.ROOT-SERVERS.NET.	5w6d16h IN A	192.5.5.241

;; Total query time: 215 msec
;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET.  198.41.0.4
;; WHEN: Sun Feb 15 01:22:51 1998
;; MSG SIZE  sent: 17  rcvd: 436

7.3. /var/named/zone/127.0.0

기본적으로 SOA레코는 필수이고, 이 레코드는 127.0.0.1를 localhost로 매핑한다. 둘 다 필요하다. 파일 안에 이 이상 필요하지도 않으며 네임서버나 hostmaster 주소가 바뀌지 않는 이상은 업데이트 하지 않는게 좋다.

@               IN      SOA     land-5.com. root.land-5.com. (
                                199609203       ; Serial
                                28800   ; Refresh
                                7200    ; Retry
                                604800  ; Expire
                                86400)  ; Minimum TTL
                        NS      land-5.com.
        
1                       PTR     localhost.

BIND를 그냥 인스톨했다면(rpm이나 옵션이 없는 경우를 이야기하는 것 같다.) 위에 $TTL라인이 위와 같이 빠져 있을 것이다. 전에는 쓰지 않다가 BIND 8.2 버젼부터 이것을 추가하기 시작했다. 이 라인이 빠진것을 보는데로 넣는 것이 좋을 것이다.

7.4. /var/named/zone/land-5.com

우리는 SOA 레코드에서 NS레코드가 쓰이는 것을 봤다. 우리는 2차 네임서버로 ns2.psi.net이라고 되있는 것을 보게 될 것이다. 이것은 2차 서버로 항상 off라인상에 있어야 하며 백업용으로 사용된다는 것이다. 또한 master 호스트가 land-5 이고 이것은 여러 다른 서비스를 하게 된다.여기서는 CNAME을 사용한다. (대체할 수 있는 것으로는 A레코드가 있다.)

i SOA 항목에서 알 수 있듯이, 존 파일은 origin이 land-5.com 이며 관리자는 root@land-5.com이다. hostmaster는 관리자의 주소로 자주 사용되는 것이다. 시리얼 넘버는 의례적으로 yyyymmdd 형식에 그날의 시리얼 넘버를 덧붙인다. 아래서 보면 아마 이 지역 파일은 1996년 9월 20일 버전 6일 것이다. 시리얼 넘버는 한방향으로만 증가해야 함을 명심하자. 여기서는 그날의 시리얼 넘버가 한자리다. 그러므로 9번을 편집하고 나서 또 편집하려면 내일을 기다려야 할 것이다. 두 자리수 사용을 고려하자.

@       IN      SOA     land-5.com. root.land-5.com. (
                        199609206       ; serial, todays date + todays serial #
                        8H		; refresh, seconds
                        2H		; retry, seconds
                        4W		; expire, seconds
                        1D )		; minimum, seconds
                NS      land-5.com.
                NS      ns2.psi.net.
                MX      10 land-5.com.  ; Primary Mail Exchanger
                TXT     "LAND-5 Corporation"

localhost	A	127.0.0.1

router          A       206.6.177.1
        
land-5.com.     A       206.6.177.2
ns		A	206.6.177.3
www             A	207.159.141.192

ftp             CNAME   land-5.com.
mail            CNAME   land-5.com.
news            CNAME   land-5.com.

funn            A       206.6.177.2

;
;       Workstations
;
ws-177200	A       206.6.177.200
                MX      10 land-5.com.   ; Primary Mail Host
ws-177201       A       206.6.177.201
                MX      10 land-5.com.   ; Primary Mail Host
ws-177202       A       206.6.177.202
                MX      10 land-5.com.   ; Primary Mail Host
ws-177203       A       206.6.177.203
                MX      10 land-5.com.   ; Primary Mail Host
ws-177204       A       206.6.177.204
                MX      10 land-5.com.   ; Primary Mail Host
ws-177205       A       206.6.177.205
                MX      10 land-5.com.   ; Primary Mail Host
; {Many repetitive definitions deleted - SNIP}
ws-177250       A       206.6.177.250
                MX      10 land-5.com.   ; Primary Mail Host
ws-177251       A       206.6.177.251
                MX      10 land-5.com.   ; Primary Mail Host
ws-177252       A       206.6.177.252
                MX      10 land-5.com.   ; Primary Mail Host
ws-177253       A       206.6.177.253
                MX      10 land-5.com.   ; Primary Mail Host
ws-177254       A       206.6.177.254
                MX      10 land-5.com.   ; Primary Mail Host

확인해 보면 알겠지만 host 명이 ws_number 형식으로 되어있다. BIND4 버젼에서는 named를 시작할 때 쓰이는 호스트명이 강제적으로 제한되었다. 그러나 BIND 8에서는 이러한 것이 적용되지 않으므로 '_'(underline) 대신에 '-'(dash)로 바꾸었다.

또 하나 주목해야 할 부분은 workstation 의 이름이 개인의 이름이 아니고 IP 주소의 끝 2부분이라는 것이다. 이러한 것들은 관리를 편하게 할 수 있겠지만 조금은 비인간적이고 고객과의 불신의 요인이 될 수도 있다.

또한 funn.land-5.comland-5.com 를 CNAME대신에 A 레코드를 썼다는 사실을 주의해야 한다. 이것은 전에 이야기 했듯 좋은 방침이다.

7.5. /var/named/zone/206.6.177

아래에 이 파일의 설명이 있다

@               IN      SOA     land-5.com. root.land-5.com. (
                                199609206       ; Serial
                                28800   ; Refresh
                                7200    ; Retry
                                604800  ; Expire
                                86400)  ; Minimum TTL
                        NS      land-5.com.
                        NS      ns2.psi.net.
;
;       Servers
;
1       PTR     router.land-5.com.
2       PTR     land-5.com.
2       PTR     funn.land-5.com.
;
;       Workstations
;
200     PTR     ws-177200.land-5.com.
201     PTR     ws-177201.land-5.com.
202     PTR     ws-177202.land-5.com.
203     PTR     ws-177203.land-5.com.
204     PTR     ws-177204.land-5.com.
205     PTR     ws-177205.land-5.com.
; {Many repetitive definitions deleted - SNIP}
250     PTR     ws-177250.land-5.com.
251     PTR     ws-177251.land-5.com.
252     PTR     ws-177252.land-5.com.
253     PTR     ws-177253.land-5.com.
254     PTR     ws-177254.land-5.com.

역변환 존은 대부분의 비극을 야기시키는 설정이다. 이것은 IP주소를 가지고 있으면 hostname을 찾는데 사용된다. 예를 보자: IRC 서버가 있고 IRC 클라이언트로부터 접속을 허용할 경우를 보자. 노르웨이 IRC 서버를 사용하며 노르웨이와 스칸디나비아반도 클라이언트와의 접속만 허용하려 한다. 클라이언트 접속을 할 때 C 라이브러리가 클라이언트의 IP 번호를 알려준다. 클라이언트의 IP번호가 넷상으로 오는 패킷에 포함되어 있기 때문이다. 이제 gethostbyaddr이라는 함수를 호출해서 주어진 IP로 그 컴퓨터를 찾는다. gethostbyaddr은 DNS서버에 질의를 할 것이며 DNS는 찾은 컴퓨터 이름으로 변환할 것이다. 클라이언트가 ws-177200.land-5.com에 접속했다고 가정해 보자. IRC서버를 위해 C라이브러리는 IP가 206.6.177.200임을 알아내고 컴퓨터의 이름을 알아내기 위해 200.177.6.206.in-addr.arpa을 찾게 된다. DNS는 우선 arpa.을 찾게되며 그리고는 in-addr.arpa., 역순으로 206, 6 을 추적하고 마지막으로 177.6.206.in-addr.arpa를 LAND-5 존으로부터 찾아내게 된다. 거기에서 우리는 최종적으로 200.177.6.206.in-addr.arpa를 "PTR ws-177200.land-5.com" 레코드로부터 얻게 된다. 이것은 206.6.177.200ws-177200.land-5.com을 의미하는 것이다. 위의 설명은 prep.ai.mit.edu에서도 했고 여기에서는 허구가 곁들여져 있다.

IRC 서버 이야기로 돌아와서, IRC서버는 이제 스칸디나비아 지역의 접속만을 허가한다. *.no,*.se, *.dk 같은 것을 허가할 것이고 ws-177200.land-5.com 은 적합하지 않고 접속을 거부할 것이다.in-addr.arpa 존으로부터 206.2.177.200 에 대한 역변환 mapping이 없으면 서버는 이름들을 전혀 찾지 못하며 206.2.177.200은 매치가 안되는 *.no, *.se , *.dk와 비교할 것이다.

혹자는 역변환 mapping을 찾는 것이 단지 서버에게만 필요한 일이거나 중요하지 않다고 하는데, 결코 그렇지 않다. 많은 ftp, news,IRC와 심지어는 http(www)서버도 이름을 찾지 못하면 접속하지 않을 것이다. 역변환 mapping은 사실 필수적인 것이다.