3.DNS 설치 및 구성(1)

Posted by 빵빵빵
2009/02/11 15:55 전산(컴퓨터)/PC-Windows



3. DNS설치 및 구성(1)

-Windows 2000 DNS Service 설치

이 번 장에서는 한글 Windows 2000 Server를 기준으로 DNS를 설치하고 구성하는 방법에 대해서 설명한다. 앞에서 살펴보았듯이, DNS를 사용하기 위해서는 먼저 우리가 원하는 도메인을 등록해야 한다. 도메인 관리는 InterNIC에서 담당하고 있다. 국외 도메인의 경우(.com .net .org등)는 ICANN (The Internet Corporation for Assigned Names and Numbers / http://www.icann.org )에서 등록을 할 수 있고, 국내의 도메인의 경우(.co.kr .pe.kr등)는 KRNIC (Korea Network Information Center / http://www.nic.or.kr )에서 등록할 수 있다.

하 지만, 일반적으로는 직접 등록을 하지 않고, 등록대행기관을 통해서 하고 있다. 특히 국외 도메인의 경우는 기타 제반서류가 영문으로 처리가 되어야 하므로국내도메인 등록대행기관을 통해서 하는 것이 훨씬 수월하다고 하겠다. 국내 도메인등록 대행기관이라면 WHOIS ,Doregi, Netpia등 많은 기관이 있다. 일반적으로 도메인을 등록할 때는 아래의 몇가지 정보를 제공해 주어야 한다.

① 회사 혹은 개인의 이름
② 주소
③ 관리자
④ Name Server (= DNS Server)

이 장에서 DNS설치의 예제로 사용할 도메인은 필자가 등록한 mcpstudy.com 이라는
도메인이다. 먼저 아래에 캡춰해 놓은 화면을 살펴보자.


<화면1.WHOIS의 "mcpstudy.com" Domain 등록정보>

WHOIS (http://www.whois.org) 를 통해서 도메인등록 정보를 알아볼 수 있다. <화면1>에서 중요한 정보는 mcpstudy.com을 관리하는 DNS Server의 정보이다. 화면에서 볼 수 있듯이 mcpstudy.com 도메인은 blueapple.mcpstudy.com이라는 FQDN을 가진 Name Server에 의해 관리되고 있으며 IP Address는 203.239.61.112이다. 이제 DNS서버를 설치할 수 있는 기본준비가 되었다. 일반적인 DNS설치과정은 아래의 순서를 따른다. 자세한 사항은 설치하면서 하나씩 알아가도록 하자.


<표3. DNS Server설치순서>

위 에서 mcpstudy.com의 Name server로 등록한 서버의 IP Address는 203.239.61.112였다. 이 서버가 DNS Service를 할 수 있도록 하기 위해서 먼저 DNS Service를 추가해 보자. Windows2000에서 service라고 하는 것은 백그라운드에서 동작하도록 만들어진 네트워크 어플리케이션을 말한다. 오피스와 같은 프로그램을 포그라운드 어플리케이션이라고 하는 것과 비교하면 이해를 할 수 있을 것이다. [시작]-[제어판]-[프로그램추가/제거]-[Windows구성요소]를 통해서 아래의 화면으로 접근할 수 있다. Windows2000 원본CD가 필요하다.<화면.2>


< 화면2. DNS Service 설치 >

설치가 끝나고 [시작]-[프로그램]-[관리도구]-[서비스]항목을 보면 DNS Server Service가 동작하고 있음을 확인할 수 있다. <화면3>


< 화면3. DNS Server Service 상태 >

DNS Service를 설치하면, 관리도구에 [DNS]관리콘솔이 등록이 된다. 실행해 보자.<화면4>


< 화면4. DNS 관리도구 >

처 음 만나게 되는 화면이다.<화면5> DNS라는 항목아래에 Blueapple이라는 이름의 서버가 있고, 그 아래에는 정방향조회영역(Forward Lookup Zone)과 역방향조회영역(Reverse Lookup Zone)이라는 항목을 볼 수 있다.DNS에서의 영역(Zone)은 DNS Server가 관리하는 하나의 관리단위이다.

하 나의 DNS서버는 여러개의 도메인을 관리 할 수 있는데, 그 때 하나하나 도메인들을 가리켜서 Zone이라고 부른다. 알고 넘어가야 할 것이 있다. Zone이라는 것은 알겠는데 그렇다면 정뱡향조회, 역방향조회 라는 것이 무얼 말하는가? 원어로는 Forward Lookup, Reverse Lookup이라고 되어 있다. 필자도 개인적으로는 영어를 잘하지도 못하고 또한 좋아하지도 않는다. 인터넷 관련된(물론 컴퓨터 자체가 그렇지만) 거의 모든 용어가 영어로 되어 있다. 물론 번역을 해서 표기를 하고 있지만, 가급적이면 본래 용어로 기억을 하도록 하자. 그편이 정신건강에 도움이 된다.

DNS 의 기본기능을 생각해보자. 1장에서 설명한 대로 DNS가 하는 일의 가장 주된 기능이라면, www.mcpstudy.com 이라는 ostname을 IP Address로 분해하는 일이었다. forward Lookup Zone은 그러한 기능을 제공하기 위한 영역이다. 그렇다면 Reverse Lookup Zone은 무엇일까? 거꾸로 IP Address를 가지고 Hostname을 알고 싶었다고 하면 어떻게 해야 할까. DNS Server가 알아서 해 주겠지. 물론 그렇다. 하지만, 컴퓨터는 우리가 제공하지 않은 정보까지 스스로 알진 못한다. 누군가 IP Address를 통해서 Hostname을 알고자 했다면(Inverse Query) 그 정보를 제공하기 위해서는 역시 DNS Server에 등록을 해 주어야만 한다. 즉 Reverse Lookup Zone은 거꾸로 물어보기(Inverse Query)에 응답하기 위한 영역이 되는 것이다.


< 화면5. Windows 2000 DNS Console >

이 화면에서 관리하고자 하는 도메인을 추가한다. 예제에서는 위에서 등록했던 mcpstudy.com이라는 도메인을 등록해 보도록 하겠다. <화면6>


< 화면6. Zone 추가 >


< 화면7. 새 영역 마법사 >

영 역을 선택하는 화면이 나온다.<화면8> 기본설정은 표준주영역으로 되어 있다. 첫 번째의 'Active Directory통합영역'은 Windows2000에서 추가된 영역이다. 오로지 Domain Controll로 설정된 (Active Directory를 가진) 서버에서 DNS를 설치할 때 사용할 수 있는 옵션이다. 나중에 바꿀 수도 있다. 표준보조영역은 처음 설치되는 DNS Server에서는 사용할 수 없다. 회사에서 기존에 도메인을 관리하는 DNS Server가 있는 상태에서 추가로 DNS Server를 더 두려고 했을 경우에 사용할 수 있는 옵션이다. 뒤에서 자세히 다루어 보겠다. 여기서는 처음설치를 다루는 것이기 때문에 기본설정으로 그대로 두도록 하겠다.


< 화면8. DNS 영역형식 설정 >

다 음에 영역이름을 입력해 준다<화면9>. mcpstudy.com이라고 입력하였다. 간혹 도메인이름과 호스트이름을 구별하지 못하는 경우를 보았다. 도메인이름은 논리적인 그룹을 표기하는 것이고, 호스트이름은 실제 서버에 주어진 컴퓨터의 이름이다. 예제에서 mcpstudy.com도메인을 관리하는 서버의 이름은 blueapple.mcpstudy.com이지만, 도메인의 이름은 'mcpstudy.com"이 되는 것이다. 만일 이 항목에 blueapple.mcpstudy.com이라고 입력했다면, 그것은 mcpstudy.com의 하위도메인으로서 인식되게 된다.


< 화면9. 영역 이름 입력 >

DNS 데이터베이스는 파일형태로 저장된다. <화면10>에서는 파일이름을 결정하는 항목이다. 기본적으로 도메인이름.dns라는 파일로서 생성이 된다. 좋은 설정이다. 바꾸어도 되겠지만, 굳이 그럴 이유는 없다. 설치가 끝난다음, %systemroot%\system32\dns 폴더를 검색해 보자. "도메인이름.dns"라는 파일을 찾을 수 있을 것이다.메모장을 통해서 열어볼 수 있는 텍스트파일이다.


< 화면10. 영역 파일 이름 결정 >


<화면11. 영역 마법사 완료 >

자. 이제 영역이 만들어졌다. < 화면12>에서 만들어진 mcpstudy.com Zone을 확인할 수 있다. 콘솔 오른쪽에는3개의 레코드가 등록되어 있는 것이 보인다. blueapple이라는 호스트가 203.239.61.112 라는 정보를 보여주고 있다. 결국 blueapple이라는 호스트의 FQDN은 blueapple.mcpstudy.com이 되는 것이고, 외부의 다른 DNS Server가 이 정보를 요청했다면 Blueapple DNS Server는 요청에 응답해 줄 수 있게 되었다.


< 화면12. mcpstudy.com Zone의 생성확인 >

이어서 Reverse Lookup Zone에 대해서도 구성을 해 보자. <화면13>


< 화면13. Reverse Lookup Zone 만들기 >

위 에서 설명한 바와 같이 이번에는 문자도메인이 아니다. IP Address로 구성된 도메인을 만들어야 한다. 203.239.61.112의 IP Address는 203.239.61.0 이라는 "C"class 네트워크 네트워크 ID에서 만들어진 호스트ID이기 때문에 네트워크 ID부분을 입력한다. 입력하는 대로 아래부분에 있는 "역방향조회영역이름"을 살펴보면, "61.239.61.in-addr.arpa"라고 표기되는 것을 확인할 수 있다. 그것이 바로 생성될 Zone의 이름이다.



< 화면14. Reverse Lookup Zone 등록 >

Forward Lookup Zone / Inverse Query
이 영역에 대해서는 이미 약속이 되어 있다. DNS라는 것이 마이크로소프트만이 사용하는 것이 아닌Internet표준이기 때문에 모든 DNS간에는 호환성이 유지되어야만 한다. 그래서 IP주소를 이용해서 호스트이름을 확인하는 inverse query를 발송할 때, "in-addr.arpa"도메인명을 이용하도록 약속된 것이다. 만일 외부의 DNS Server가 203.239.61.112를 사용하는 서버의 hostname을 요청했다면 실제 요청은 "112.61.239.203.in-addr.arpa"로서 날아오게 된다. 아래의 화면은 DNS Server에서 Inverse Query를 Windows2000이 제공하는 Network Monitor Tool을 사용하여 캡쳐한 화면이다. 진한부분을 보면 요청하는 이름을 확인할 수 있다. 도메인명은 "61.239.203.in-addr.arpa"가 되고, "112"는 forward lookup zone의 레코드 형태로 하나의 호스트이름에 해당되는 내용이다.

다음 과정은 역시 Reverse Lookup Zone에 대한 데이터베이스를 저장할 파일이름을
결정해 준다. <화면15>


< 화면15. Reverse Lookup Zone Database File 결정 >

Reverse Lookup Zone설치를 하고 나면 <화면16>에서 보는 바와 같이 blueapple이라는 DNS Server는 2개의 Zone을 관리하는 DNS Server로서 설치가 되었다.


< 화면16. DNS Server 관리콘솔 >

지 금까지 DNS Service를 설치하고, DNS Server가 관리할 Domain을 구성하는 작업을 해 보았다. 막상 하고 나면 뭐가 이렇게 쉽나? 하는 생각이 든다.( 돌 날아오는 소리가 들리는 것 같다 ^^;) 마이크로소프트의 Windows기반의 OS의 가장 큰 장점은 user interface가 쉽다는데 있다. 관리자 입장에서도 마찬가지이다. 개념을 이해하는 과정이 조금 까다로울 뿐이지 막상 관리작업은 너무나 쉽다.

 

출처: http://www.secure.pe.kr

2009/02/11 15:55 2009/02/11 15:55

2.DNS의 구조 및 프로세스

Posted by 빵빵빵
2009/02/11 15:54 전산(컴퓨터)/PC-Windows



2.DNS의 구조 및 프로세스

앞에서 우리는 Hostname을 IP Address로 분해(Name resolution)하는 방법으로 hosts.txt파일을 이용했을 때 생기는 몇가지 문제점을 살펴 보았다. 이름중복이라는 문제점을 해결하고, 현재상태의 컴퓨터의 호스트 이름들을 반영할 수 있어야 하고, 관리적인 측면에서도 가장 손쉽게 접근할 수 있는 방법이라면 어떤 방법을 이용해야 할까? 이 점이 해결해야 할 중점과제이다.

한 가지 예를 들어보자. 회사에는 수많은 부서가 존재한다. 그렇듯 부서를 나누는 이유는 무엇일까? 물론 여러 가지 이유가 있겠지만 관리적인 측면을 무시할 수 없을 것이다. 모든 사원들을 사장이 혼자 관리하는 것보다는 당연히 부서를 나누고 부서장이 관리를 한다면, 보다 제대로 관리를 할 수가 있을 것이다. 또 부서가 없는경우에 한 개인은 "000"라는 형식으로 개개인의 이름을 가지지만, 부서로서 개인을 조직하게 되면 "00부서의 000"로서 불리우게 될 것이다. 한 회사에 "송원석"이라는 이름을 가진 사람이 둘이 있다고 하자. 부서의 개념이 없을 때는 단순히 "송원석"하고 부르면 누구를 부르는 건지 헷갈릴 수밖에 없다. 하지만 그들을 구별해 주는 부서가 있다면 "00부서의 송원석"이라는 식으로 어긋나지 않게 원하는 사람을 구별할 수 있게 된다.

앞 에서 문제가 되었던 이름중복은 조금만 생각을 바꾸면 해결이 가능하다. 이름을 평면적인(flat) 이름으로 사용하는 것 대신에 부서처럼 다른 이름을 하나쯤 더 붙이면 되지 않을까? 예를 들면 "www"라는 이름 대신에 "A회사의 www"로서 등록을 한다는 것이다. 그렇다면 모든 회사의 웹서버가 "www"라는 이름을 사용하더라도 더 이상 이름의 충돌은 염려하지 않아도 될 것이다.

hosts 파일 크기의 증가로 인한 네트워크 트래픽을 줄이고, 빠른 업데이트를 가능하게 하기 위해서는 관리를 분산시킬 수 있는 구조가 최선이라는 해결책을 찾고 결국 호스트들을 그룹화하는 작업을 하게 되었다. 그 그룹을 바로 "도메인 (domain)"이라고 부른다. 여기서의 도메인은 Microsoft가 사용하는 도메인이라는 용어와는 구별을 해야 한다. Microsoft의 도메인은 어디까지나 마이크로소프트의 NT라는 운영체제가 제공하는 회사의 작업그룹에 한정되는 반면에, DNS에서의 도메인은 전 세계에서 구분할 수 있는 작업그룹이다.

DNS 의 도메인은 수없이 많은 종류가 있을 수 있다. 대표적으로는 여러분들이 속해 있는 회사를 생각할 수 있고, 국가를 구분할 수도 있고, 특별한 단체를 구분지을 수도 있다. 인터넷에 연결되고 자신들의 집단을 구분할 수 있는 이름을 가지고자 한다면 어느 누구라도 Domain이라는 하나의 작업그룹을 할당받을 수 있다는 이야기다. 추가로 이러한 그룹 역시 또 다른 그룹에 소속되어 있고, 최상위에 모든 그룹은 하나의 그룹으로 묶이게 된다. 회사의 조직구조와 비슷하다. 회사안에는 몇 개의 사업본부가 있고, 사업본부 안에는 몇 개의 부서가 있고, 부서 아래에 팀이 있고, 팀 안에 팀원들이 소속되어 있는 구조와 같다. 실제 구조를 살펴보면 우리가 윈도우 탐색기를 통해서 볼 수 있는 폴더구조와 흡사하다. 최상위에 root(c:)가 있고, 그 밑에 폴더가 있으며 폴더밑에는 또 다른 폴더가 있고, 최종적으로 폴더 밑에는 파일이 들어있다. 이러한 형태의 구조를 우리는 계층구조라고 부른다.

결국 최종적으로 만들어진 DNS의 구조를 살펴보면 아래의 <그림8>과 같다.

<그림8.Domain Name Space의 계층구조>


위의 그림에서 볼 수 있는 것처럼 DNS는 뚜렷한 계층구조를 가지고 있다. 최상위에는 모든 도메인의 근본이 되는 root domain을 두고, null라벨(공백의 문자, " ")로서 이름을 할당하였다. 이것을 가리켜서 root-level domain이라고 부른다. root-level domain 아래에는 top-level domain을 두는데, 우리에게 친숙한 이름이 보일 것이다. kr, com, net, org등이 그것이다. 각각의 top-level domain은 특별한 원칙을 가지고 있다. 어느 집단이 사용을 하는 이름인지를 알아볼 수 있게 만든 것이다. 현재 약 250여개 정도의 top level domain이 사용되고 있다.<표1참고>

<표1.top level domain 이름구조>


이들 root domain과 top level domain은 우리가 등록해서 사용할 수 있는 이름이 아니다. InterNIC에서는 이미 전세계의 도메인들의 밑바탕이 될 이름을 등록하였고, 실제로 우리가 사용하게 될 이름은 이들 top level domain 아래의 도메인부터라고 할 수 있다.

< 그림8>에서 볼 수 있는 것과 같이 top level domain 아래에는 second level Domain이 있고, 거기에서 실제로 우리의 회사의 이름을 반영하는 이름들을 찾아볼 수 있게 된다. 우리가 도메인 등록을 한다고 이야기를 하면 바로 그러한 이름을 이야기하는 것이다. 물론 COM이나 Net과 같은 도메인 아래에 여러분의 회사를 등록한다면 바로 second level에서 등록하는 것이 가능하겠지만, 우리나라를 가리키는 Kr 도메인 아래에 회사를 등록하고자 한다면, 우리는 한단계 더 아래로 내려갈 수밖에 없다. Kr 아래에 또 다시 영리회사를 가리키는 "co"라는 이름이 second level로서 등록되고, 여러분이 원하는 회사이름은 그 아래에 등록되어야 하기 때문이다. 왜 그래야 할까? 답은 뻔하지 않은가! 미국에서 만들어서 사용하고 그네들이 발전시켜 오고 있는 것이기 때문에 우리는 그들이 할당해준 kr 이라는 top level domain을 우리나라 입장에서는 root로 삼고, 다시 그 안에서 분리작업을 해야 하기 때문인 것이다. 아쉬운 일이지만 힘을 키우는 도리밖에 어쩔 수가 없는 노릇이다.

이 러한 계층구조를 가진 분산데이타베이스 구조를 가리켜서 DNS(Domain Name Space혹은 Domain Name System)라고 부른다. 그렇다면 이들 DNS는 실제로 어디에 존재하는 것일까? 질문이 너무 막연해 보인다. 여러분이 즐겨찾는 인터넷이라는 공간을 가리켜 우리는 사이버공간이라고 부른다. 실체는 없는 가상공간이라는 뜻이다. 실제로 존재하는 것은 클라이언트 시스템으로서 사용하는 PC가 있고, 그들이 접속해서 사용하는 Web server라는 것이 있다. 전세계에 네트워크에 연결된 이들 모든 컴퓨터들이 어우러져서 InterNet이라고 부르는 하나의 커다란 가상공간이 존재하게 된 것이다. DNS도 마찬가지이다. 어느 한곳에 DNS라는 이름이 기록되고 관리되고 있는 형태는 아닌 것이다. 실체로 본다면 역시 물리적인 시스템인 서버가 존재하겠지만, 이들 모든 서버들이 만들어 내고 있는 하나의 가상공간인 셈이고, 이러한 가상공간을 제공하는 서비스를 DNS를 관리하는 서버, 바로 DNS Server가 이루어놓고 있는 것이다. 결국 <그림8>에서 각각의 그룹을 가리키는 도메인이라는 녀석이 존재하고 있었는데, 그 도메인의 중심에는 바로 DNS Server라고 하는 컴퓨터가 차지하고 있게 된다.

DNS를 정리해보면 "각각 회사를 구분해주는 도메인 이름을 관리하는 DNS Server들이 모여서 만들어낸 가상이름공간"이라고 요약을 해 볼 수 있겠다.

다 음은 DNS의 표기법에 대해서 알아보자. 이름충돌의 문제를 해결한다는 예제를 가지고 생각해 보자. <그림8>에서 second level domain중에 "idc2000"이라는 이름이 있고, 그 회사가 가지고 있는 서버중에 "www"라는 웹서버가 있다. 또한 Chollian이라는 회사도 역시 "www"라는 웹서버를 가지고 있다. 이들은 어떻게 똑같은 이름을 가질 수가 있게 되는가? 바로 DNS에서 바라보는 서버의 이름체계가 이 문제점을 해결해 주고 있다. 이제 더 이상 인터넷에 연결된 서버들은 서로를 구분하는데 있어서 평면적인 www라는 형태의 단순한 이름체계로 사용되지는 않는다. 인터넷상에서 서버들의 이름은 아래와 <표2>의 표기법을 사용하기 때문이다.

<표2.Fully qualified Domain Name>

결 과적으로 idc2000의 웹서버인 www서버는 www.idc2000.net과 같이 표기되고, 천리안의 웹서버는 www.chollian.net과 같이 표기되고 구별되기 때문에 전혀 다른 이름을 가지게 되는 것이다. 예전에 사용했던 평면적인 이름체계에서 벗어나 계층구조의 이름을 가짐으로써 이름충돌에 대한 문제점을 해결하게 된 것이다.

한 가지 고려사항은 여전히 남아있다. 같은 계층에 2개의 같은 도메인이 있을 수가 있을까? 라는 것이다. 예를 들면 net이라고 하는 도메인에 chollian이라는 도메인이 등록되어 있다. 또 다른 회사에서 역시 그들도 chollian이라는 이름을 사용하고자 한다면 당연히 허용해 주어선 안될 일이다. 이러한 문제 때문에 새로운 신기술이 나오면 서로 먼저 그 이름을 이용한 도메인을 등록하기 위해서 도메인전쟁이라고까지 표현되는 등록싸움이 발생하고 있는 것이다. 그렇다면 왜 도메인 등록을 하여야 할까. 그냥 우리가 사용하고 싶은 이름을 마음대로 쓰면 되는 것 아닌가? 라고 생각한다면 다음에 설명할 DNS의 이름분해과정을 이해하면 생각을 바꿀 수가 있을 것이다.

지금부터는 DNS Server가 어떤 과정을 통해서 이름분해 과정을 진행하는 지에 대해서 설명하도록 하겠다.

< 그림9>의 예제에서 DNS Client로 표기된 PC에 앉은 사용자는 www.idc2000.net이라는 이름을 가진 IDC2000회사의 웹서버에 접근해서 웹서비스를 받고자 한다. 사용자가 www.idc2000.net의 IP Address를 알고 웹 브라우저를 통해서 이름이 아닌 IP주소로 접근을 했다면 간단하겠지만, 사용자가 그런 주소를 알 필요는 없다. 이 사용자의 PC는 천리안의 DNS서버를 사용하는 DNS클라이언트로 셋팅이 되어 있다. DNS Client에 대한 부분은 1장에서 확인한 바 있다.


<그림9.DNS Name Resolution Process>

사 용자는 웹 브라우저의 주소창에 http://www.idc2000.net 이라고 입력하고 [Enter]를 누른다. 이 요청은http라는 프로토콜을 가지고 www.idc2000.net이라는 이름의 서버에 요청을 보내겠다는 뜻이다. 결국 웹서비스를 요청하는 메시지이다. 이 요청을 처리해 주기 위해서 사용자의 시스템은 먼저 www.idc2000.net의 IP Address를 알아야 한다. 하지만, 스스로 알 수 있는 방법이 없다. 그런데 DNS Client로 셋팅이 되어 있기 때문에 DNS Server로 셋팅된 서버에게 질문을 던질 수가 있다.

사 용자의 시스템은 자신의 TCP/IP등록정보에 DNS Server로 셋팅된 IP Address의 서버에게 www.idc2000.net의 IP Address를 요청하게 된다.(그림9-①) 이 요청을 가리켜서 resursive query(재귀적질의)라고 한다. resursive query라고 함은, 이 요청을 받은 서버가 '모 아니면 도' 둘중의 하나의 응답을 해야만 하는 Query를 말한다. IP Address를 가르쳐주거나, 에러메시지를 반납하거나.

① 의 요청을 받은 DNS Server는 응답을 해야 하는데, 자신 역시 자신이 관리하는 이름을 알 뿐이지 어디 있는지도 모르는 idc2000이라는 회사의 웹서버의 IP Address를 알 턱이 없다. 그래서 먼저 DNS Server는 Cache라고 부르는 데이터베이스에서 클라이언트가 요청하는 정보가 있는지를 확인해 본 다음, 없다면 다른 DNS에게 질문을 던져서 클라이언트의 요청을 해결하려는 시도를 하게 된다. Windows2000 시스템에 DNS Service를 추가하고, DNS Server로 동작하게 되면 그 서버에는 한가지 정보가 기본적으로 추가된다. 바로 Root Domain을 관리하고 있는 DNS Server들의 목록이다. 서버는 그 정보를 이용해서 root domain의 DNS Server에게 클라이언트가 요청한 www.idc2000.net 에 대한 이름분해 요청을 보내게 된다. (그림9-②) 이 때의 Query를 가리켜서 Iterative Query (반복적 질의)라고 부른다. Recursive Query와는 조금 성격이 틀린 것을 알 수 있을 것이다.

Root name server는 요청을 받았으니 응답을 해야 할텐데, 자신 역시 모든 정보를 알고 있는 것은 아니다. 자신이 알고 있는 것은 "net"도메인을 관리하는 DNS Server의 정보를 알고 있을 뿐이다. 그래서 천리안의 DNS Server가 원하는 모든 정보에 대한 응답이 아닌, "net"도메인을 관리하는 DNS Server의 정보를 제공해 주게 된다. (그림9-③)

천 리안의 Name Server는 한번의 query를 통해서 net도메인의 Name server의 정보를 알 게 되었다. 아직 완전한 정보는 얻지 못했기 때문에 임무에 충실할 책임을 다한다. "net"도메인의 DNS Server에게 www.idc2000.net. 의 IP정보를 요청하게 된다. (그림9-④)

하 지만 'net'도메인의 DNS Server역시 천리안의 Name server가 요청한 호스트이름에 대한 IP정보를 알지는 못한다. 그렇지만 idc2000을 관리하고 있는 DNS서버의 정보는 알고 있다. 자신이 관리하고 있는 도메인이기 때문이다. 그래서idc2000.net 의 DNS서버의 정보로서 요청에 응답해 주게 된다. (그림9-⑤)

idc2000.net. 도메인의 Name server정보를 얻은 천리안의 name server는 idc2000.net의 name server에게 www.idc2000.net.이라는 자신의 클라이언트가 요청했던 호스트에 대한 IP정보를 요청하게 된다. (그림9-⑥)

이 요청을 받은 idc2000.net.의 DNS Server는 요청한 FQDN이 자신이 관리하고 있는 도메인에 소속된 호스트이기 때문에 IP Address정보를 응답해 줄 수가 있게 된다.(그림9-⑦)

몇 번의 query를 통해서 DNS Client가 요청한 정보를 알게 된 천리안의 DNS Server는 www.idc2000.net의 IP Address를 제공해 줄 수가 있게 되었다.(그림9-⑧)

그 렇다면 이제 사용자는 DNS Server를 통해서 원하는 웹서버에 대한 IP Address를 알 게 되었기 때문에 TCP/IP통신을 할 수가 있게 되었다. http프로토콜로써 웹서버에게 서비스를 요청하고, 웹서버는 홈페이지를 서비스해 주게 되는 것이다.

글로 써 기록하니 상당히 복잡해 보인다. 하지만, 실제로 사용자 입장에서 보자면, 사용자는 웹 브라우저의 주소창에 친숙한 이름표기법에 따르는 이름을 입력했을 뿐이고, 내부사정은 알바가 아니지만 홈페이지를 볼 수가 있게 되었다. 이러한 작업이 가능하게 만들어지게 하기 위해서 DNS Server는 부지런히 발로 뛰며 서비스를해 주고 있었던 것이다. DNS가 없었다면 이런 일이 가능했을까? 실로 DNS의 위력은 엄청나게 보인다. 필자는 감히 인터넷을 이끌어가고 있는 것은 바로 DNS라고 말하고 싶다. 그만큼 인터넷에 있어서 DNS의 기능은 대단하다고 할 수 있기 때문이다.

만 일 DNS가 없다면 지금 우리가 사용하는 인터넷이라는 환경이 상당히 많이 다를 거라고 생각한다. TV에서 하고 있는 광고중의 상당수는 도메인이름을 알리는 광고를 하고 있다. DNS가 없다면 업체에서는 도메인이름을 알리는 광고가 아니라 IP Address를 알리는 광고를 해야만 할 것이다. 채림이가 나와서 hihome.com이라는 점(.)을 내세운 광고를 하고 있지만, 그것도 안될 말이고, 수많은 dot com으로 대변되는 벤쳐기업들도 이름자체가 애매해졌을 것이다.

그 렇다면 앞서서 가졌던 한가지 의문중에 "왜 반드시 원하는 도메인이름을 등록해야만 사용할 수 있을까"라는 것을 생각해 보자. <그림9>의 예제에서 웹서버 입장을 생각해 보자. idc2000이라는 회사는 자신의 웹서버를 통해서 회사를 홍보하고, 몇가지 서비스를 판매하는 일을 하고 있다고 가정해 보자. 사용자가 자신의 웹서버의 IP Address를 알고 찾아오게 하는 일은 가장 중요한 일이라고도 할 수 있다. 그런데 앞에서 보았듯이 사용자가 자신의 웹서버의 IP주소를 알기 위해서는 어떤 과정이 있었는가? idc2000의 DNS Server까지 요청이 와야 하는데, 그것보다 선행되었던 작업이 net도메인의 DNS Server를 찾는 과정이었다. 만일 net도메인의 DNS서버에 idc2000의 도메인의 정보가 등록되어 있지 않았다면 당연히 net도메인의 DNS Server는 천리안의 name서버의 요청에 그런 도메인은 없다라는 에러메시지를 전송해야만 했을 것이다. 당연히 천리안의 DNS Server는 이름분해를 처리하지 못했기 때문에 사용자에게 에러메시지를 반송할 수밖에 없게 되는 것이다.

도메인등록이라는 용어를 풀어본다면, "회사에서 사용하고 싶은 도메인 이름을 관리하는 DNS Server의 정보를 상위 도메인을 관리하는 DNS Server에 등록하는 작업"이라고 생각할 수 있겠다.

처 음 볼 때는 상당히 번거로운 작업이라는 생각이 들 수도 있다. 하지만, 이러한 DNS의 진행과정은 2장에서 보았던 hosts.txt파일을 이용한 이름분해의 과정이 가졌던 모든 문제점을 해결할 수 있는 방법이 되고 있다. 문제점과 비교해서 DNS의 이름분해과정을 연관시켜서 정리해 보길 바란다.

지금까지 DNS의 구조와 이름분해과정(name resolution process)에 대해 설명하였다. 다음장에서는 본격적으로 Windows2000 DNS의 설치와 구성을 다루어보도록 하겠다.

 

출처: http://www.secure.pe.kr

2009/02/11 15:54 2009/02/11 15:54

1.DNS의 이해

Posted by 빵빵빵
2009/02/11 15:53 전산(컴퓨터)/PC-Windows



1.DNS의 이해

굳 이 기업 네트워크의 전문가가 아니더라도 여러분들이 컴퓨터 앞에 앉아 있다면, 늘 DNS의 도움을 받고 있다. DNS는 마이크로소프트의 전유물은 결코 아니다. 수많은 사람들의 노력의 결과이며, 당분간 DNS의 영향력은 점점 더 증가하게 될 것이라고 감히 말하고 싶다. 마이크로소프트는 Windows 제품군으로 기업용 네트워크 운영체제인 NT에 이어서 Windows 2000이 나오면서 DNS의 쓰임새가 대폭 확장되었고, 이제 Windows2000을 제대로 이해하기 위해서 DNS를 알아야 하는 것은 필수적인 조건이 되었다.


필 자는 Windows2000의 DNS를 위주로 하여 전반적인 DNS의 기능과, 개념 등에 대해서 설명하고자 한다. 어려운 개념은 아니지만, 필자의 경험상으로 봤을 때 많은 사람들이 가장 어려워하는 내용이기도 하다. 어느 정도 지식이 있는 사람이 보기에 "나를 뭘로 알고...??" 라는 생각이 들 정도로 아주 기초적인 내용부터 접근해 보도록 할 것이다. 차근차근 익히다 보면 이 내용이 끝났을 때 여러분은 많은 내용을 얻을 수가 있을 것이다.

일단 단적으로 이해를 돕기 위해 DNS의 한가지 주된 용도에 대해서 알아보자. 우리는 인터넷에 접근하기 위하여 인터넷 익스플로러, 넷스케이프 같은 웹 브라우저를 이용한다. 아래의 그림을 보자.

<그림1. www.microsoft.com homepage>

 

빨 간선으로 구분해 놓은 곳을 보면 찾아가길 원하는 서버의 주소를 입력하는 창을 볼 수 있다. 지금 예제에서는 "www.microsoft.com"이라는 웹서버를 찾아서 홈페이지를 보고자 한다. "www.microsoft.com"이라는 것은 결국 Microsoft라는 회사의 홈페이지를 담고 있는 컴퓨터의 이름인 것이다. 보통 유저라면 "흠.. 당연한거 아닌가?" 라고 생각할 수도 있다. 그렇다면 아래의 그림도 살펴보자.

<그림2. 207.46.230.219>


출 력되는 화면에는 차이가 없지만, 주소란은 분명히 차이가 보인다. 그림1.에서의 주소와 비교해 보면, 그림1.에서는 우리에게 친숙한 문자가 쓰인 반면에, 그림2.에서는 외우기엔 조금 어려워 보이는 몇자리의 숫자가 적혀 있다. 바로 서버의 주소를 가리키는 IP Address이다. IP Address라는 것에 대해서 용어가 생소하다면, DNS는 나중일이다. 먼저 IP Address라는 것에 대한 이해를 구하고 DNS를 배우도록 하는 것이 바람직하다.

위 에서 확인해 본 바로는 문자로서 입력하든, 숫자로서 입력하든 하나의 서버로 접근해서 동일한 내용을 얻을수 있다는 사실을 알 게 되었다. 그렇다면 사용자 입장에서 볼 때 어느 것이 보다 편하게 쓸 수 있는 주소일까? 여러분이 남들로부터 "쟤는 많이 특이해.."라는 소리를 듣지 않는 이상, <그림1>의 경우가 보다 편하다는 것을 느낄 수 있을 것이다.

TCP/IP 환경에서 IP Address라는 것을 가지고 각각의 시스템을 구분하게 해 주고 있다. 웹서버도 마찬가지고, 여러분이 집에서 사용하는 컴퓨터도 마찬가지이다. IP Address라는 것을 가지고 서로를 구분하고 네트워크 상에서 통신이 가능하다는 것이다. 문제는 이러한 IP Address라는 것이 쉽게 외워서 쓰기에는 다소 부담스러운 숫자형태로 되어 있기 때문에 이 숫자를 대신할 수 있는 문자를 할당해서 www.microsoft.com과 같은 문자를 사용하고 있는 것이다. 하지만, 숫자를 대신할 수 있는 문자를 할당했다고 해서 IP Address라는 숫자는 쓰이지 않아도 된다는 것은 결코 아니다. 우리가 컴퓨터이름을 사용해서 통신을 시도했다고 할 지라도 실제 통신을 위해서는 반드시 해당 컴퓨터 이름을 가지고 있는 컴퓨터의 IP Address를 알아야만 하는 것이고, 특별한 서버를 둬서 그러한 일만 전문적으로 처리하도록 역할을 맡기게 된 것이다. 그 서버가 바로 DNS서버이다.

그 렇다면 <그림1>에서 여러분이 www.microsoft.com이라는 컴퓨터 이름을 입력했는데 어떻게 '207.46.230.219'이라는 IP Address를 알아내서 통신이 이루어 진 것일까? 여러분은 단지 이름하나 치고 [Enter]키 한번 눌렀을 뿐인데. 여러분의 컴퓨터의 TCP/IP 설정을 확인해 보라. 아래의 그림을 볼 수 있다. 화면은 Windows 2000 Professional 컴퓨터의 등록정보이다. OS마다 다르다. 다른 인터페이스는 무시하고 넘어가자. 중요한 것은 DNS 서버라고 하는 항목에 역시 IP Address가 적혀 있다는 것이다.

<그림3. TCP/IP 등록정보>


<그림4. IPCONFIG>

 

이 러한 DNS서버의 IP정보를 담고 있는 컴퓨터를 가리켜서 DNS Client라고 부를 수 있다. DNS를 사용하는 클라이언트라는 의미이다. DNS 클라이언트는 DNS 서버의 도움이 필요한 어떤 작업을 해야 할 경우가 있을 때마다, 설정된 IP Address의 컴퓨터를 찾아가서 문의를 하게 된다. 위에서 확인했던 웹 브라우저를 통해서 웹서버에 접근하는 작업이 대표적인 예이다. DNS 클라이언트가 있다면 반대편엔 분명히 이러한 응답을 처리해야 할 DNS 서버가 있어야 한다. <그림5>에서 확인할 수 있다. DNS 서버로 설정된 서버를 살펴보면 그림처럼 DNS Server라고 하는 서비스(Application)이 시작되고, 동작하고 있음을 확인할 수 있을 것이다.

<그림5. DNS Server Service status>

 

정 리하면, 사용자가 www.mcpstudy.com이라는 컴퓨터 이름을 주소창에 입력하면, 사용자의 컴퓨터가 DNS 클라이언트로 설정되어 있기 때문에 설정된 DNS 서버로 www.mcpstudy.com라는 컴퓨터 이름에 해당하는 서버가 무슨 IPAddress를 사용하고 있는지 문의를 하게 되고, 설정된 DNS서버는 사용자의 요청에 대해해 '207.46.230.219'라는 응답을 하게 된다. 이 과정을 통해서 사용자는 IP Address를 알아냈기 때문에 이 IP Address를 가지고 통신을 시도하고, 해당 서버에 접속하여 홈페이지를 받아올 수 있었던 것이다.

개 념상으로는 단순해 보이지만, 이러한 DNS가 동작할 수 있도록 하기까지 수많은 사람들의 노력이 있었다. 이제부터는 조금 더 구체적으로 접근해 보도록 하자. DNS는 왜 생겨났을까? 탄생배경에 대해서 아는 것은 DNS를 공부하는데 상당히 도움이 된다. DNS의 필요성을 이해해보도록 하자.  

먼 저 말했던 것처럼 TCP/IP프로토콜을 사용하는 모든 컴퓨터(보통 host라고 부른다)들은 네트워크상에 각각 컴퓨터들을 구분하는 방법으로 고유하게 할당된 IP Address를 사용한다. 우리는 분명히 컴퓨터들을 지칭할 때 그들에게 할당한 컴퓨터 이름을 이야기하지만, TCP/IP 세계에서는 이름보다는 IP Address가 보다 절대적이다.

 

학 교의 한 학급을 생각해 보자. 한반에 동명이인은 있을 수도 있지만, 번호가 같은 학생은 있을 수 없다. 더 생각해 보면, 1학년1반의 23번과, 1학년2반의 23번은 분명히 다른 학생이다. 23번이라는 번호는 같지만, 반이 틀려서 서로를 유일하게 구분해주고 있는 것이다. 이것과 IP Address는 개념이 유사하다. 한 학생이 학교에 입학해서 번호를 부여받게 되면 결국 그 학생은 학교내에서 고유하게 구분될 수 있는 "학번" 이라는 것이 할당된다. 이렇듯 IP Address는 네트워크에서 유일한 주소인 것이다.

IP Address는 각각 8bit단위마다 .(dot)로 구분된 32bit 체계로 이루어져 있다. 실제로 표기할 때는 2진수보다는 보기가 용이한 10진수로서 기록하고 있다. 예를 들어서 192.168.200.100 과 같은.. 그래서 컴퓨터들은 IP주소를 보고 서로를 구분하고 통신을 해야만 하는데, 문제는 이러한 IP주소가 사용자가 기억해서 쉽게 입력하고 접근하기에는 조금 까다로운 숫자 형태라는데 있다.(숫자 좋아하는 사람이 얼마나 있겠는가?) 그래서 이러한 주소를 조금 더 쉽게 표현할 수 있는 방법이 없을까 하고 연구한 결과, IP address 마다 별도의 이름을 할당을 하게 되었다.

 

예 를 들면 www, ftp, smtp, mail, korea 등이 그것이다. 당연히 사용자 입장에서 보면 숫자보다는 보기 편한 문자로 되어 있기 때문에 접근하기가 용이할 것이다. 이 이름을 가리켜 "HOST NAME" 이라고 부르며, 별명(Alias)라는 표현을 한다. IP address 대신 붙이는 별명이라는 뜻이다.

TCP/IP 통신의 기본흐름을 도식화해 보았다. 거추장스러운 추가 프로토콜을 모두 걷어내고, DNS를 이해하는데 필요한 핵심내용만 정리한 그림이다. 우리가 웹 브라우저를 가지고 웹서버에게 데이터를 보내는 과정을 생각해 보자. 웹 브라우저는 Application이다. 실제로 네트워크에 데이터를 날려보내는 것은 물론 네트워크 어댑터카드(NIC)이다. 그 둘을 연결시켜 주는 것이 무엇일까? 그것이 바로 Protocol인 것이다. 결국 어플리케이션을 가지고 통신을 하기 위해서는 반드시 프로토콜을 도움을 받아야 하고, 마지막으로 네트워크 어댑터라는 물리적인 장비를 통해서 상대방 컴퓨터와 통신을 할 수 있게 되는 것이다.

<그림6. TCP/IP통신의 기본흐름>


앞 에서 보았던 IP Address와 Hostname의 관계를 생각하고, <그림6>을 보면 이해를 도울 수 있다. 결국 어플리케이션이 hostname을 사용한다고 하더라도 실제 통신을 위해서는 거쳐야 할 단계가 IP Address라는 사실을 알수가 있게 된다. MAC Address라는 것은 그 다음 단계이다. 위의 단계에서 작업이 더 이상 진행되지 않는다면더 이상 통신을 수행할 수가 없게 된다. 아래의 <그림7>을 예제로 설명한다.

<그림7. hosts file을 이용한 Name resolution>

 

< 그림7>의 예제는 A회사의 hostA 컴퓨터를 사용하는 사용자가 B회사의 hostC라는 이름을 가진 Web server를 찾아가서 서비스를 제공받고자 한다. A회사와 B회사는 물론 인터넷이라는 네트워크 환경으로 연결되어 있겠지만, hostA의 사용자로서는 자신이 원하는 데이터를 가지고 있는 서버가 이 지구상에 도대체 어디에 존재하는지 알 턱이 없다. 다만 알고 있는 정보라고는 오직 하나, 서버이름을 알고 있을 뿐이다. 앞에서 설명할 때 서버이름을 알고 있더라도 통신을 위한 다음단계는 분명히 IP Address라는 것을 알아야 한다고 했다. 그렇다면 어떤 방법으로 서버이름을 통해서 IP Address를 얻어 낼 수가 있을 것인가?

이 것을 가능하도록 하기 위해서 인터넷 초기에는 다음과 같은 방법을 사용하게 되었다. 인터넷에 연결되는 모든 컴퓨터들은 각각 SRI-NIC이라는 컴퓨터의 hosts.txt라는 파일에 자신의 hostname과 IP Address정보를 등록하고, 각 회사에서는 FTP를 이용해서 이 파일을 다운로드 받아서 각각 외부에 통신할 때 이 파일에서 원하는 hostname에 대한 IP Address 정보를 찾아서 통신을 하는 방법이다. 충분히 가능한 일일 것이다. 전세계 인터넷에 연결된 모든 호스트가 하나의 서버에 등록될 것이기 때문에 당연히 사용자는 원하는 정보를 찾는데 큰 어려움이 없게 될 것이기 때문이다. 하지만, 여기에는 몇가지 문제점이 내포되어 있다.

첫 번째 문제점은 업데이트가 늦다는 것이다. B회사에 새로운 호스트가 추가되었다고 가정하면, 그 정보를 A회사에서 알기 위해서는 몇가지 절차가 필요하다. B회사에서는 새로운 호스트의 정보를 역시 Hosts.txt 파일에 등록해야 하고, A회사는 새롭게 바뀐 파일을 다운로드 받아야만 비로소 사용할 수가 있게 되는 것이다. 처음엔 가능했을지 모르지만 요즘같은 폭발적인 인터넷 발전속도를 따라가기엔 당연히 역부족일 수밖에 없다.

두 번째 문제점은 네트워크 트래픽이다. 파일에 등록된 호스트이름이 늘어갈수록 파일크기는 커질 수밖에 없고 인터넷이 FTP 관련된 불필요한 트래픽으로 가득 차는 우스운 일이 생길 수밖에 없다. 이에 데이터베이스를 한곳에 집중시키는 문제점을 해결하기 위한 방안이 필요해졌다. 가장 좋은 방법은 데이터를 분산시키는 방법일 것이다.

세 번째 문제점은 IP Address를 대신할 컴퓨터의 호스트이름 짓기가 너무 힘들다는 것이다. 모든 컴퓨터의 이름이 flat한 구조로(www, ftp, A회사 등) hosts.txt 파일에 등록이 되었기 때문에 당연히 사용하고자 하는 이름은 hosts.txt 파일내에서 유일해야만 정상적인 통신을 할 수가 있게 된다. 만일 어떤 회사가 자신의 회사의 웹서버의 이름을 "www"로 지어서 등록을 했다면 전세계의 어떤 컴퓨터도 더 이상 www라는 이름을 사용할 수 없을 것이다. 당연한 결과이다. 이러한 문제점도 역시 해결을 해야할 필요성이 생겼다.

Internet 을 관리하는 사람들은 이러한 문제점을 해결할 필요성을 느꼈고, 위의 몇가지 문제점을 해결할 수 있는 "분산된 데이터베이스 형태의 새로운 방법"이 필요해진 것이다. 그 결과로 나온 것이 바로 "DNS (Domain Name System)"이다.

' 빨리 DNS 사용법이나 이야기하지 무슨 사설이 이렇게 긴가'라고 생각할 수도 있겠다. 하지만, DNS가 단순히 사용법만 알아서 사용할 만큼 단순한 서비스가 아니다. 여러분들이 한번만 DNS에 대해서 체계적인 이해를 하여 둔다면 적어도 향후 몇 년간은 두고두고 도움을 받을 수 있는 중요한 서비스인 만큼 이런 내용을 소홀히 할 수가 없기 때문임을 이해해 주기 바란다. 길었던 사설은 이제 마무리 하겠다. 이제 DNS라고 하는 녀석의 구조를 알아보고, 접근방법, 설치, 구성 등에 대해서 차례대로 알아보도록 하자.

 

출처: http://www.secure.pe.kr

2009/02/11 15:53 2009/02/11 15:53