다음 이전 차례

4. 도메인을 한번 설정해 보자.

도메인을 설정하는 간단한 방법

4.1 먼저 알아야 하는 것들

이 절을 시작하기 전에 DNS가 어떻게 동작하는지 약간의 이론을 설명하겠다. 읽어 두면 많은 도움이 되기 때문에 계속 읽는 것이 좋다. 읽고 싶지 않더라도 대충 훑어 보기는 해야 한다. 어째든 named.conf에 관한 내용부터는 자세히 읽어서 완전히 이해해야 한다.

DNS는 계층적인 시스템이다. 최상위 계층은 `.'으로 적고 `루트'로 발음한다. `.' 아래로 ORG, COM, EDU, NET 같은 최상위 도메인(TLDs: Top Level Domains)이 있다.

어떤 컴퓨터를 찾을 때, 쿼리는 최상위 계층에서부터 시작하여 하위 계층으로 찾아 내려 간다. prep.ai.mit.edu를 찾는 경우 사용자의 네임 서버는 edu 도메인을 담당하는 네임 서버를 찾아야 한다. 그래서 . 서버에서 질의하게 되고 그러면 . 서버는 edu 도메인 담당 서버들의 목록을 넘겨 준다. (이미 . 서버에 대해서는 사용자의 네임 서버가 알고 있다. 왜냐하면, root.hints 파일에서 명시해 주었기 때문이다.)

$ nslookup
Default Server:  localhost
Address:  127.0.0.1

루트 서버에 질의 시작

> server c.root-servers.net.
Default Server:  c.root-servers.net
Address:  192.33.4.12

쿼리 유형을 NS로 설정 (name server records):

> set q=ns

edu에 관해 질의

> edu.

여기에서 마지막 칸의 .이 중요한데, . 아래에 있는 edu 도메인에 대해 질의하고 있음을 뜻한다. (이렇게 함으로써 검색 범위를 축소한다.)

edu     nameserver = A.ROOT-SERVERS.NET
edu     nameserver = H.ROOT-SERVERS.NET
edu     nameserver = B.ROOT-SERVERS.NET
edu     nameserver = C.ROOT-SERVERS.NET
edu     nameserver = D.ROOT-SERVERS.NET
edu     nameserver = E.ROOT-SERVERS.NET
edu     nameserver = I.ROOT-SERVERS.NET
edu     nameserver = F.ROOT-SERVERS.NET
edu     nameserver = G.ROOT-SERVERS.NET
A.ROOT-SERVERS.NET      internet address = 198.41.0.4
H.ROOT-SERVERS.NET      internet address = 128.63.2.53
B.ROOT-SERVERS.NET      internet address = 128.9.0.107
C.ROOT-SERVERS.NET      internet address = 192.33.4.12
D.ROOT-SERVERS.NET      internet address = 128.8.10.90
E.ROOT-SERVERS.NET      internet address = 192.203.230.10
I.ROOT-SERVERS.NET      internet address = 192.36.148.17
F.ROOT-SERVERS.NET      internet address = 192.5.5.241
G.ROOT-SERVERS.NET      internet address = 192.112.36.4

위의 결과로 *.root-servers.netedu. 담당 서버임을 알 수 있다. 이제 계속해서 c 서버에게 질의할 수 있다. 이번에는 어느 서버가 mit.edu. 도메인을 담당하는지 알아 보자. 계속해서 아래와 같이 mit.edu.을 입력한다.

> mit.edu.
Server:  c.root-servers.net
Address:  192.33.4.12

Non-authoritative answer:
mit.edu nameserver = W20NS.mit.edu
mit.edu nameserver = BITSY.mit.edu
mit.edu nameserver = STRAWB.mit.edu

Authoritative answers can be found from:
W20NS.mit.edu   internet address = 18.70.0.160
BITSY.mit.edu   internet address = 18.72.0.3
STRAWB.mit.edu  internet address = 18.71.0.151

steawb, w20nsbitsy 서버가 mit를 담당한다. 그 중 하나를 선택하여 ai.mit.edu에 대해 질의해 보자.

> server W20NS.mit.edu.

호스트명은 대소문자를 구별하지는 않는다. 다만 마우스로 화면을 긁어 붙여서 이렇게 보인다.

Server:  W20NS.mit.edu
Address:  18.70.0.160

> ai.mit.edu.
Server:  W20NS.mit.edu
Address:  18.70.0.160

Non-authoritative answer:
ai.mit.edu      nameserver = ALPHA-BITS.AI.MIT.EDU
ai.mit.edu      nameserver = GRAPE-NUTS.AI.MIT.EDU
ai.mit.edu      nameserver = TRIX.AI.MIT.EDU
ai.mit.edu      nameserver = MUESLI.AI.MIT.EDU
ai.mit.edu      nameserver = LIFE.AI.MIT.EDU
ai.mit.edu      nameserver = BEET-CHEX.AI.MIT.EDU
ai.mit.edu      nameserver = MINI-WHEATS.AI.MIT.EDU
ai.mit.edu      nameserver = COUNT-CHOCULA.AI.MIT.EDU
ai.mit.edu      nameserver = MINTAKA.LCS.MIT.EDU

Authoritative answers can be found from:
AI.MIT.EDU      nameserver = ALPHA-BITS.AI.MIT.EDU
AI.MIT.EDU      nameserver = GRAPE-NUTS.AI.MIT.EDU
AI.MIT.EDU      nameserver = TRIX.AI.MIT.EDU
AI.MIT.EDU      nameserver = MUESLI.AI.MIT.EDU
AI.MIT.EDU      nameserver = LIFE.AI.MIT.EDU
AI.MIT.EDU      nameserver = BEET-CHEX.AI.MIT.EDU
AI.MIT.EDU      nameserver = MINI-WHEATS.AI.MIT.EDU
AI.MIT.EDU      nameserver = COUNT-CHOCULA.AI.MIT.EDU
AI.MIT.EDU      nameserver = MINTAKA.LCS.MIT.EDU
ALPHA-BITS.AI.MIT.EDU   internet address = 128.52.32.5
GRAPE-NUTS.AI.MIT.EDU   internet address = 128.52.36.4
TRIX.AI.MIT.EDU internet address = 128.52.37.6
MUESLI.AI.MIT.EDU       internet address = 128.52.39.7
LIFE.AI.MIT.EDU internet address = 128.52.32.80
BEET-CHEX.AI.MIT.EDU    internet address = 128.52.32.22
MINI-WHEATS.AI.MIT.EDU  internet address = 128.52.54.11
COUNT-CHOCULA.AI.MIT.EDU        internet address = 128.52.38.22
MINTAKA.LCS.MIT.EDU     internet address = 18.26.0.36

위의 결과에서 museli.ai.mit.eduai.mit.edu 담당 네임 서버 중 하나임을 알 수 있다. 마지막으로 아래와 같이 질의해 보자.

> server MUESLI.AI.MIT.EDU
Default Server:  MUESLI.AI.MIT.EDU
Address:  128.52.39.7

네임 서버를 찾았으므로 이제 쿼리 유형을 바꿔서 prep.ai.mit.edu에 관한 모든 사항을 질의해 보자.

> set q=any
> prep.ai.mit.edu.
Server:  MUESLI.AI.MIT.EDU
Address:  128.52.39.7

prep.ai.mit.edu CPU = dec/decstation-5000.25    OS = unix
prep.ai.mit.edu
        inet address = 18.159.0.42, protocol = tcp
          ftp  telnet  smtp  finger
prep.ai.mit.edu preference = 1, mail exchanger = gnu-life.ai.mit.edu
prep.ai.mit.edu internet address = 18.159.0.42
ai.mit.edu      nameserver = beet-chex.ai.mit.edu
ai.mit.edu      nameserver = alpha-bits.ai.mit.edu
ai.mit.edu      nameserver = mini-wheats.ai.mit.edu
ai.mit.edu      nameserver = trix.ai.mit.edu
ai.mit.edu      nameserver = muesli.ai.mit.edu
ai.mit.edu      nameserver = count-chocula.ai.mit.edu
ai.mit.edu      nameserver = mintaka.lcs.mit.edu
ai.mit.edu      nameserver = life.ai.mit.edu
gnu-life.ai.mit.edu     internet address = 128.52.32.60
beet-chex.ai.mit.edu    internet address = 128.52.32.22
alpha-bits.ai.mit.edu   internet address = 128.52.32.5
mini-wheats.ai.mit.edu  internet address = 128.52.54.11
trix.ai.mit.edu internet address = 128.52.37.6
muesli.ai.mit.edu       internet address = 128.52.39.7
count-chocula.ai.mit.edu        internet address = 128.52.38.22
mintaka.lcs.mit.edu     internet address = 18.26.0.36
life.ai.mit.edu internet address = 128.52.32.80

이렇게 해서 .로부터 시작해서 도메인 네임을 담당하는 전단계의 네임 서버들을 성공적으로 찾았다. 다른 서버를 사용하지 않고 여러분의 DNS 서버를 사용했다면 여러분의 named는 당연히 그 모든 정보들을 보관해 두었을 것이다. 그리고 당분간은 같은 질의를 하지 않을 것이다.

많이 거론되지는 않지만 중요한 도메인이 in-addr.arpa 이다. 이 도메인 역시 정상 도메인을 구성한다. in-addr.arpa는 호스트의 주소를 알고 있을 때 그 이름을 알려준다. 여기서 주의해야 할 점은 in-addr.arpa 도메인에서는 ip 숫자들이 역순으로 사용한다는 것이다. 192.128.52.43 컴퓨터의 주소를 알고 있는 경우, prep.ai.mit.edu의 예처럼 'named'는 arpa. 서버를 찾는다. 그 다음으로 in-addr.arpa. 서버를 찾고, 192.in-addr.arpa. 서버를 찾은 다음, 128.192.in-addr.arpa. 서버를 찾아서 52.128.192.in-addr.arpa. 서버를 찾는다. 그리고는 43.52.128.192.in-addr.arpa.에 해당하는 항목을 찾는다. 똑똑하죠?(그렇다고 말하길... ) 숫자를 역순으로 사용하는 것은 처음 2년 정도는 혼란스러울 수 있다.

사실 필자는 지금까지 거짓말을 했다. DNS는 저자가 이야기한 글자 그대로 작동하지는 않는다. 그렇지만 그 의미는 충분하다.

4.2 도메인을 설정해 보자.

이제는 간단하게라도 한번 도메인을 설정해 보자. linux.bogus라는 도메인을 정하고 그기에 속한 컴퓨터들의 이름을 정의할 것이다. 어느 누구도 혼동하지 않도록 실제로는 존재하지도 않는 도메인을 사용할 것이다.

시작하기 전에 하나 더: 모든 문자를 호스트명으로 사용할 수 있는 것은 아니다. 영문자: a-z, 숫자: 0-9, 그리고 '-' (dash) 문자만 사용할 수 있다. 이 문자들을 명심하라. 대문자나 소문자나 DNS에게는 마찬가지다. 그래서 pat.uio.noPat.UiO.No와 동일하다.

named.conf에서 아래 부분 설정에 대한 것은 이미 설명했다.


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

이 파일에서 도메인 네임의 마지막에 `.'이 없음에 유의하자. 위의 설정 중 첫번째 라인은 0.0.127.in-addr.arpa 존(zone)에 대한 정의임을 뜻하고, 두번째 라인인 이 서버가 0.0.127.in-addr.arpa 존의 마스터 서버임을 뜻하며, 마지막 라인은 호스트명과 IP 주소 사이의 매핑 정보가 ps/127.0.0 파일에 저장되어 있음을 뜻한다. ps/127.0.0 파일에 대해서는 이미 설명하였다. 내용은 다음과 같다.


@               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                                1       ; Serial
                                8H      ; Refresh
                                2H      ; Retry
                                1W      ; Expire
                                1D)     ; Minimum TTL
                        NS      ns.linux.bogus.
1                       PTR     localhost.

위의 named.conf 파일과는 대조적으로 이 파일에서는 완전한 도메인명(full domain name)의 끝에는 모두 `.'이 있음에 유의하자. Some people like to start each zone file with a $ORIGIN directive, but this is superfluous. The origin (where in the DNS hierarchy it belongs) of a zone file is specified on the zone section of the named.conf file, in this case it's 0.0.127.in-addr.arpa.

이 `존(zone) 파일'에는 `resource records' (RRs)가 3개 있다. SOA, NS, 그리고 PTR이다. SOA는 `Start Of Authority'의 축약어이다. `@'은 origin을 뜻하는 특수문자이다. 이 파일에 대한 `도메인' 항목이 0.0.127.in-addr.arpa 이므로 첫줄의 의미는 다음과 같다.

0.0.127.in-addr.arpa.   IN      SOA ...

NS는 네임 서버 RR이다. 이 줄에는 처음에 '@' 문자가 없다. 바로 위에서 '@' 문자로 시작한 줄이 있으므로 이를 암묵적으로 따른다. 타수도 줄일겸.. 그러므로 NS 줄은 다음과 같다.

0.0.127.in-addr.arpa.   IN      NS      ns.linux.bogus

0.0.127.in-addr.arpa 도메인의 네임 서버가 ns.linux.bogus임을 다른 DNS들에게 알려 준다. 'ns'가 네임 서버의 이름으로 관례처럼 쓰인다. 그러나 웹서버의 이름이 관례적으로 www.something이듯 다른 이름을 사용하는 것도 무방하다.

마지막으로 PTR 항목은 0.0.127.in-addr.arpa 서브넷에서 주소가 1인 호스트, 즉 127.0.0,1의 이름이 localhost임을 뜻한다.

SOA 항목은 존 파일의 머리말로 각 존 파일마다 꼭 하나씩, 첫줄에 반드시 있어야만 한다. 이 항목은 현재 설정하고 있는 Primary 네임 서버의 이름은 무엇인지 (ns.linux.bogus), 관리자는 누구인지, (hostmaster@linux.bogus), 존 파일은 버전이 어떻게 되는지 (serial: 1), 캐시 설정과 secondary DNS 서버에 관한 내용을 설정한다. 남은 항목들은 refresh, retry, expire, 그리고 minimum인데, 이 문서와 동일한 값으로 설정하면, 크게 신경쓰지 않아도 잘 작동할 것이다.

이제 ndc restart 명령으로 named를 재시작하고 nslookup으로 지금까지 설정한 것을 시험해 보자.

$ nslookup

Default Server:  localhost
Address:  127.0.0.1

> 127.0.0.1
Server:  localhost
Address:  127.0.0.1

Name:    localhost
Address:  127.0.0.1

위에서 IP 127.0.0.1에 매핑된 호스트명 localhost를 찾는데 성공했다. 굿  이제 named.conf에 존(zone)을 새로 추가하여 우리의 주목적인 linux.bogus 도메인을 설정해 보자.


zone "linux.bogus" {
        notify no;
        type master;
        file "pz/linux.bogus";
};

named.conf 파일에서 도메인 네임 마지막에 `.'이 없다는 것에 주의하도록 한다.

linux.bogus 존 파일에 100% 가상 데이타를 삽입할 것이다.


;
; Zone file for linux.bogus
;
; The full zone file
;
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                        199802151       ; serial, todays date + todays serial #
                        8H              ; refresh, seconds
                        2H              ; retry, seconds
                        1W              ; expire, seconds
                        1D )            ; minimum, seconds
;
                NS      ns              ; Inet Address of name server
                MX      10 mail.linux.bogus     ; Primary Mail Exchanger
                MX      20 mail.friend.bogus.   ; Secondary Mail Exchanger
;
localhost       A       127.0.0.1
ns              A       192.168.196.2
mail            A       192.168.196.4

SOA 항목에서 2가지를 주의해야 한다. ns.linux.bogus는 A 레코드가 있는 실제 컴퓨터이어야 한다. SOA 레코드에서 언급된 컴퓨터를 다른 컴퓨터로 알리아싱하는 CNAME 레코드가 있으면 규칙에 어긋난다. 이름이 `ns'일 필요는 없으며 다른 호스트명을 사용해도 무방하다. 다음으로, hostmaster.linux.bogus는 hostmaster@linux.bogus로 읽으면 된다. DNS 관리자의 메일 알리아스나 메일박스를 설정하는 곳이다. 도메인 관련 메일은 모두 이 주소로 배달된다. 이름이 `hostmaster'일 필요는 없다. 전자우편 주소라면 어떤 것을 사용해도 상관없지만, `hostmaster'를 사용하는 것도 나쁘지 않다.

이 파일에는 MX(Mail eXchanger)라는 새로운 RR 유형이 있다. someone@linux.bogus의 주소로 들어오는 메일을 처리할 메일 시스템을 지정한다. 위의 예에서 someone@linux.bogus 주소로 수신되는 메일은 mail.linux.bogus 또는 mail.friend.bogus로 보낸다. 호스트명 바로 앞에 있는 숫자는 MX 항목의 우선 순위을 뜻한다. 메일은 이 숫자가 가장 낮은(여기서는 10) RR에 메일을 보낸다. 여기서 실패하면 숫자가 그 다음으로 낮은 두번째 메일 서버 즉, 우선 순위가 20일 mail.friend.bogus으로 보낼 것이다.

ndc restart로 'named'를 재시작한 다음 nslookup으로 결과를 확인하자.

$ nslookup
> set q=any
> linux.bogus
Server:  localhost
Address:  127.0.0.1

linux.bogus
        origin = ns.linux.bogus
        mail addr = hostmaster.linux.bogus
        serial = 199802151
        refresh = 28800 (8 hours)
        retry   = 7200 (2 hours)
        expire  = 604800 (7 days)
        minimum ttl = 86400 (1 day)
linux.bogus     nameserver = ns.linux.bogus
linux.bogus     preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
linux.bogus     preference = 20, mail exchanger = mail.friend.bogus
linux.bogus     nameserver = ns.linux.bogus
ns.linux.bogus  internet address = 192.168.196.2
mail.linux.bogus        internet address = 192.168.196.4

위 결과를 잘 살펴보면 버그를 찾을 수 있을 것이다.

linux.bogus     preference = 10, mail exchanger = mail.linux.bogus.linux.bogus

위 라인은 틀렸다. 다음과 같이 출력되어야 정상이다.

linux.bogus     preference = 10, mail exchanger = mail.linux.bogus

여러분이 좀 더 잘 이해할 수 있도록 이 부분에 실수를 일부러 넣어 두었다. ;-) 존 파일에서 다음 라인을 찾도록 하자.

                MX      10 mail.linux.bogus     ; Primary Mail Exchanger

마지막에 점이 빠졌다. 고치지 않으면 `linux.bogus'가 붙어 나오게 된다. 존 파일에서 호스트명이 점으로 끝나지 않으면 linux.bogus.linux.bogus처럼 origin이 첨부된다. 그러므로


                MX      10 mail.linux.bogus.    ; Primary Mail Exchanger

또는


                MX      10 mail                 ; Primary Mail Exchanger

로 설정하는 것이 올바르다. 저자는 타이핑 수가 적은 후자를 더 좋아한다. bind를 잘 아는 사용자들 중에는 여기에 동의하지 않는 사람도 있고, 동의하는 사람도 있다. 지역 파일에서 도메인은 `.'으로 끝나게 완전히 적거나 아니면 디폴트인 origin에 해당하는 부분을 포함하지 말아야 한다.

강조하건데 named.conf 파일에서는 도메인 네임의 끝에 `.'이 없어야 한다. `.'이 있고 없음이 얼마나 일을 꼬이게 만들고 사람들을 혼란스럽게 만드는지 상상도 못할 것이다.

여기 저자의 견해가 반영된 새로운 존 파일이 있다. 자료가 약간 더해졌다.


;
; Zone file for linux.bogus
;
; The full zone file
;
@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                        199802151       ; serial, todays date + todays serial #
                        8H              ; refresh, seconds
                        2H              ; retry, seconds
                        1W              ; expire, seconds
                        1D )            ; minimum, seconds
;
                TXT     "Linux.Bogus, your DNS consultants"
                NS      ns              ; Inet Address of name server
                NS      ns.friend.bogus.
                MX      10 mail         ; Primary Mail Exchanger
                MX      20 mail.friend.bogus. ; Secondary Mail Exchanger

localhost       A       127.0.0.1

gw              A       192.168.196.1
                HINFO   "Cisco" "IOS"
                TXT     "The router"

ns              A       192.168.196.2
                MX      10 mail
                MX      20 mail.friend.bogus.
                HINFO   "Pentium" "Linux 2.0"
www             CNAME   ns

donald          A       192.168.196.3
                MX      10 mail
                MX      20 mail.friend.bogus.
                HINFO   "i486"  "Linux 2.0"
                TXT     "DEK"

mail            A       192.168.196.4
                MX      10 mail
                MX      20 mail.friend.bogus.
                HINFO   "386sx" "Linux 1.2"

ftp             A       192.168.196.5
                MX      10 mail
                MX      20 mail.friend.bogus.
                HINFO   "P6" "Linux 2.1.86"

위에 새로운 RR이 꽤 많이 있다. HINFO(Host INFOrmation)은 두 부분으로 이로어져 있는데 각각을 큰따옴표로 둘러 싸는 것이 좋다. 앞부분은 컴퓨터 하드웨어 또는 CPU 정보이다. 두번째 부분은 소프트웨어 또는 OS 정보이다. `ns' 컴퓨터는 Pentium CPU에 Linux 2.0을 사용한다. CNAME(Canonical NAME)은 컴퓨터 하나에 이름을 여러 개 부여하는 방법이다. 그러므로 www은 ns에 대한 알리아스이다.

CNAME 레코드의 용법은 약간 논쟁의 여지가 있다. 그러나 다음 규칙을 따르면 안전하다. MX, CNAME, SOA 항목은 CNAME 레코드와는 절대로 연결하지 말아야 하고, A 항목이 있는 가진 다른것과 연결하여야 한다. 즉, 다음은 잘못 설정한 것이다.


foobar          CNAME   www                     ; NO!

아래와 같이 설정하는 것이 올바르다.


foobar          CNAME   ns                      ; Yes!

또한 CNAME은 전자우편 주소로 바람직한 호스트명이 아니라고 가정하는 것이 안전하다. 즉, webmaster@www.linux.bogus는 규정에 어긋난 전자우편 주소이다. 이 가정을 따르지 않으면 비록 동작은 하겠지만 메일 관리가 상당히 어려워진다. 이를 막으려면 A 레코드(또는 MX 같은 레코드)를 대신 사용한다.


www             A       192.168.196.2

많은 bind 전문가들은 CNAME을 사용하지 말 것을 권한다. 그러므로 사용하지 않는 것에 대해 아주 신중하게 검토해 보라.

그러나 여러분도 알듯, 이 하우투도 그렇고 많은 사이트가 이 규칙을 따르지는 않는다.

ndc reload로 데이터베이스를 새로 읽어 들이자. ndc reload를 실행하면 named는 파일들을 다시 읽는다.

$ nslookup
Default Server:  localhost
Address:  127.0.0.1

> ls -d linux.bogus

이는 모든 레코드가 출력되어야 함을 뜻한다 . 결과는 다음과 같다.

[localhost]
$ORIGIN linux.bogus.
@                       1D IN SOA       ns hostmaster (
                                        199802151       ; serial
                                        8H              ; refresh
                                        2H              ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                        1D IN NS        ns
                        1D IN NS        ns.friend.bogus.
                        1D IN TXT       "Linux.Bogus, your DNS consultants"
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.bogus.
gw                      1D IN A         192.168.196.1
                        1D IN HINFO     "Cisco" "IOS"
                        1D IN TXT       "The router"
mail                    1D IN A         192.168.196.4
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.bogus.
                        1D IN HINFO     "386sx" "Linux 1.0.9"
localhost               1D IN A         127.0.0.1
www                     1D IN CNAME     ns
donald                  1D IN A         192.168.196.3
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.bogus.
                        1D IN HINFO     "i486" "Linux 1.2"
                        1D IN TXT       "DEK"
ftp                     1D IN A         192.168.196.5
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.bogus.
                        1D IN HINFO     "P6" "Linux 1.3.59"
ns                      1D IN A         192.168.196.2
                        1D IN MX        10 mail
                        1D IN MX        20 mail.friend.bogus.
                        1D IN HINFO     "Pentium" "Linux 1.2"
@                       1D IN SOA       ns hostmaster (
                                        199802151       ; serial
                                        8H              ; refresh
                                        2H              ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

결과가 위와 같다면 정상이다. 위 결과는 바로 존 파일과 비슷하게 보인다. www에 대해서는 무어라 말하는지 확인해 보자.

> set q=any
> www.linux.bogus.
Server:  localhost
Address:  127.0.0.1

www.linux.bogus canonical name = ns.linux.bogus
linux.bogus     nameserver = ns.linux.bogus
linux.bogus     nameserver = ns.friend.bogus
ns.linux.bogus  internet address = 192.168.196.2

달리 표현하자면, www.linux.bogus의 실제 이름은 ns.linux.bogus이다. 도한 ns에 대한 정보도 함께 반환해 주기 때문에 프로그램은 이 정보를 이용하여 ns(www이기도 함)에 접속할 수 있다.

이제 한 반 정도를 설명하였다.

4.3 역변환 존(The reverse zone)

이제 클라이언트 프로그램들이 linux.bogu 도메인 호스트들의 이름을 주소로 변환하여 원하는 컴퓨터에 접속할 수 있다. 그렇지만, 역변환 존이 설정되어야 DNS가 주소를 이름으로 변환할 수 있다. FTP, IRC, WWW 등 다양한 서버가 여러분의 컴퓨터와 통신을 허용할 것인지, 허용한다면 어떤 우선 순위를 줄 것인지 결정하는 데 바로 호스트명을 사용한다. 그러므로 역변환 존이 설정되어 있어야만 해당 도메인의 컴퓨터가 모든 인터넷 서비스를 완전하게 사용할 수 있다.

아래 내용을 named.conf 파일에 삽입하자.


zone "196.168.192.in-addr.arpa" {
        notify no;
        type master;
        file "pz/192.168.196";
};

0.0.127.in-addr.arpa과 동일하다. 내용도 비슷하다.


@       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                        199802151 ; Serial, todays date + todays serial
                        8H      ; Refresh
                        2H      ; Retry
                        1W      ; Expire
                        1D)     ; Minimum TTL
                NS      ns.linux.bogus.

1               PTR     gw.linux.bogus.
2               PTR     ns.linux.bogus.
3               PTR     donald.linux.bogus.
4               PTR     mail.linux.bogus.
5               PTR     ftp.linux.bogus.

이제 당신의 named를 재시작(ndc restart)하고 nslookup으로 지금까지 설정한 내용을 확인해 보자.


> 192.168.196.4
Server:  localhost
Address:  127.0.0.1

Name:    mail.linux.bogus
Address:  192.168.196.4

위와 같이 제대로 보이면, 확인삼아 전체를 덤프시켜 보자.


> ls -d 196.168.192.in-addr.arpa
[localhost]
$ORIGIN 196.168.192.in-addr.arpa.
@                       1D IN SOA       ns.linux.bogus. hostmaster.linux.bogus. (
                                        199802151       ; serial
                                        8H              ; refresh
                                        2H              ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                        1D IN NS        ns.linux.bogus.
1                       1D IN PTR       gw.linux.bogus.
2                       1D IN PTR       ns.linux.bogus.
3                       1D IN PTR       donald.linux.bogus.
4                       1D IN PTR       mail.linux.bogus.
5                       1D IN PTR       ftp.linux.bogus.
@                       1D IN SOA       ns.linux.bogus. hostmaster.linux.bogus. (
                                        199802151       ; serial
                                        8H              ; refresh
                                        2H              ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

와우, 성공이다!

여기에 보충해야 할 것이 약간 있다. 위의 예에서 사용된 IP 숫자들은 'private nets' 블럭중에서 하나를 택한 것이다. 그러므로 인터넷에 물려서 공식적으로 사용되어서는 안된다. 그래서 HOWTO에서 예제로 사용하는 것은 안전하다. 두번째는 notify no; 줄이다. 이것은 'named'가 그 지역 파일들 중에서 하나가 갱신되었을 때 secondary(slave) 서버에게 알리지 않도록 한다. bind-8에서는 지역 파일이 갱신되었을 때 지역 파일에 나열된 NS 레코드의 서버에게 'named'가 알려줄 수 있다. 이 기능은 DNS를 실제로 운영할 때는 편리하지만 사적인 연습에는 이 기능을 꺼야할 것이다. 우리의 연습으로 인터넷을 오염시킬 수는 없지 않은가?

지금까지 사용한 도메인도 완전히 가상이고, 그 주소들도 실제로 사용하는 주소가 아니다. 실제 도메인의 예는 다음 절을 참조하라.


다음 이전 차례