본문 바로가기

컴퓨터/리눅스 서버구축

DNS 서버 (네임서버)와 호스트(hosts) 파일

  DNS(Domain Name System)서버(일명 네임서버)의 주된 역할은 도메인네임을 IP주소로 변환시키거나, 반대로 IP주소를 도메인네임으로 변환시켜 주는 것이다. 


  이러한 작업이 왜 필요할까.....


  송파구청의 홈페이지에 접속을 하려 한다면, 보통은 포털사이트에서 검색하여 접속하게 된다. 자주 방문하는 사이트라면 즐겨찾기에 등록시키거나, 홈페이지 주소(www.songpa.go.kr)를 외워서 주소창에 직접 입력할 수 도 있을 것이다. 하지만 사이트에 접속하기 위한 필수 데이터인 IP주소를 직접 입력하는 경우는 없을 것이다. 이것은 도메인네임만 알고 있으면 해당되는 서버의 IP주소를 알려주는 네임서버의 도움이 있기 때문이다.


  물론 아래의 그림처럼 웹브라우저에 직접 IP주소를 입력하여 접속할 수도 있다. 


  인터넷에 연결된 모든 서버와 클라이언트들은 서로 중복되지 않는 고유한 IP주소(Internet Protocol Address)를 갖고 있다. 하지만 위의 그림과 같이 특정 서버에 접속하기 위해서 그 서버의 IP주소를 직접 입력해야 한다면 외우기도 쉽지 않고, 사용하기도 불편할 것이다. 그래서 고안된 것이 호스트파일인데, 이는 각각의 도메인네임과 이들의 IP주소를 하나하나 대응시켜서 저장해 놓은 텍스트파일이다.  인터넷이 세상에 나온지 얼마 안된 초기에는 호스트파일이 유용했겠지만, 시간이 지날수록 많은 서버들이 생겨났을 것이고, 새롭게 등장한 서버의 정보(이름과 IP주소의 나열이겠지만)를 계속 업데이트 하기에는 좀 벅찼을 것이다. 또한 서버의 IP주소가 바뀌었다면 호스트파일도 수정해야 하는 번거로움이 있다. 이것이 네임서버가 생긴 이유중의 하나일 것이다.


  물론 호스트파일은 여전히 존재한다.  아래의 그림은 윈도우에서의  호스트 파일의 내용이다.(Windows 7)


다음은 맥(OSX)에서의 호스트 파일이다. (OSX 10.11.4 El Capitan)


마지막으로 리눅스에서의 호스트 파일의 내용이다. (CentOS 7.2)


  정말로 호스트파일이 유효한지는 간단한 테스트를 통해서 알아볼 수 있다. 윈도우의 호스트파일에 다음과 같이 한 줄을 추가해보자. 맨 마지막줄에 211.252.220.29 www.daum.net를 추가했다.


  이제 인터넷 창을 열어서 다음(www.daum.net)에 접속해보자. 위와 같이 호스트 파일을 수정하고 저장했다면 리부팅 할 필요는 없다. 웹브라우저의 주소창에 www.daum.net을 입력하게 되면 컴퓨터는 호스트 파일을 먼저 검색하게 된다. 호스트파일에는 이미 우리가 입력해 놓은 서버의 이름과 IP주소가 존재하므로 네임서버에 질의하지 않고, 곧바로 211.252.220.29 의 주소로 접속하게 된다. 이 주소는 송파구청의 주소이기 때문에 당연히 송파구청의 사이트에 접속되는 것이다. 이러한 호스트파일의 특성을 악용한 호스트파일 변조바이러스는 정상적인 홈페이지의 주소를 입력하더라도 가짜 사이트로 유도되는 파밍(Pharming)의 수법으로 악용된 사례이다.


  호스트 파일은 서버의 이름과 그에 해당하는 IP주소를 미리 저장해 놓아야만 활용할 수 있다. 특별한 경우가 아니고서는 사용할 일이 별로 없겠지만, 네임서버 쿼리(query)보다는 호스트파일의 우선순위가 높다. 물론 리눅스에서는 호스트 파일이 먼저인지, 네임서버 쿼리가 먼저인지의 우선순위를 바꿀 수 있다.


  호스트 파일을 유심히 보면 OS의 종류에 상관없이 공통적으로 아래의 내용이 있다.


127.0.0.1        localhost

::1              localhost 


  첫 번째 줄의 의미는 localhost라는 이름의 서버는 IP주소가 127.0.0.1 이라는 의미일 것이다. 루프백(loop back) 주소로 불리우는 이 IP주소는 자기자신의 IP주소로 사용되도록 미리 예약되어 있다. 웹서버를 구축하고 홈페이지를 만든 후에 테스트해보기 위해서 자신의 컴퓨터에 접속을 시도하려 한다면 루프백 주소가 유용하게 쓰일 수 있다.  루프백 주소로 미리 예약된 IP주소의 범위는 127.0.0.0 ~ 127.255.255.255.255이다. 두 번째 줄의 ::1은 127.0.0.1이라는 주소의 IPv6의 표현이다.