ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DNS 서버 설치와 운영하는 방법 (1) - 기본개념
    리눅스 2024. 5. 1. 20:21

    DNS란 Domain Name System라고 하며, 원하는 서버에 접근하기 위해 우리가 쉽게 알고 있는 domain을 ip 주소로 변환시켜주는 보조적인 서버를 말한다. 우리가 웹 브라우저 주소창에 domain이 들어간 url을 입력하면 (ex https:www.daum.net) 실제 그 서버의 ip 주소가 필요한데, 그 ip 주소로 변환해줄 필요가 있다. 그 역할을 하는 것이 DNS 서버이다. 만약 우리가 사용하는 웹 서버나 FTP서버의 ip 주소를 모두 안다면 DNS 서버가 필요 없지만 그럴 일은 거의 없기 때문에, DNS 서버를 이용하는 것은 거의 필수라고 할 수 있다.

     

    웹 초창기에는 통신하는 서버가 그렇게 많지 않았기 때문에 리눅스에서는 /etc/hosts 파일에 ip와 url을 매칭해서 적어놓는 파일이 존재했고 주로 사용되었다. 지금도 존재는 하지만 실제로 자주 사용되지는 않는다. 안의 내용은 다음과 비슷하다.

     

    102.341.123.112 XXX.com

    23.14.23.54 XXX.net

    127.0.0.1 localhost

    ::1 localhost

     

    만약 내가 ip주소가 223.234.234.234 이고 domain이 tistory.com인 사이트를 알고 있다면 저 파일에

    223.234.234.234 tistory.com 을 추가해주면 웹 브라우저로 tistory.com을 접속할때마다 내가 설정한 ip로 접속하게 된다.

    하지만 이렇게 하나하나씩 설정하기에는 웹서버가 기하급수적으로 많고 실시간으로 변화하기 때문에 '이름 해석(name resolution)'을 전문으로 하는 서버 컴퓨터가 필요해졌다. 그게 바로 네임 서버, 즉 DNS서버이다.

     

    네임 서버는 인터넷에서 변화하는 모든 컴퓨터의 url과 ip 정보를 거의 실시간으로 제공하기 때문에 사용자는 url만 알면 특정 서버와 통신이 가능하다.

     


    실습: /etc/hosts/ 파일의 설정과 네임 서버 설정 확인하기

     

    터미널에서 nslookup 명령어를 입력하고 server를 입력해서 현재 server에 설정된 네임서버를 확인한다. 그리고 www.nate.com,  www.kernel.org,  www.hanbit.co.kr 을 입력해 ip 주소를 확인해본다.

     

    server를 입력했을때 defualt server가 127.0.0.53이라고 되어 있다. 하지말 실제로는 내가 컴퓨터에서 사전에 설정한 192.168.111.2서버를 사용한다. 만약 자신의 네임서버 주소를 확인하고 싶다면 nmtui 또는 nm-connection-editor 명령으로 확인할 수 있다.

     

    그리고 다른 사이트들도 ip가 나오는 것을 알 수 있다. 예를 들어 www.nate.com이라고 입력하면 Non-authoritative answer: 라고 나오며 ip 주소가 나온다. 이 응답은 공식적인 nate.com의 dns 서버에서 응답해준 것이 아니어서 이렇게 나온다. 만약 공식적인 답변을 얻고 싶다면 nslookup -type=ns www.nate.com  명령을 실행한 다음 나오는 authoritative server(여기서는 ns1.nate.com)를 이용해서 ip 검색을 할 수 있다. 
    예를 들면 nslookup www.nate.com ns1.nate.com 명령을 이용하면 더 이상 non-authoritative answer가 나오지 않는다. 

     

    그리고 각 회사마다 웹 서버를 운영하는 몇가지 방식이 존재하기 때문에 하나의 ip만 보여주는 회사가 있는 반면, 검색할 때마다 계속 다른 ip주소를 보여주는 회사도 있다. 그리고 canonical name이란 '별명'이라고 해석할 수 있는데, 특정 별명으로 원래 url와 같은 ip를 가지도록 설정해주는 것이다. 그래서 여러 url이 같은 ip를 공유할 수 있다. 또한 만약 canonical name인 url을 아예 다른 ip로 할당하기도 간단하고, canonical name url이 연결된 url의 ip를 바꾸기 위해서는 마지막 단의 ip만 변경하면 된다.

     

    이제 cat /etc/resolv.conf 명령으로 네임 서버가 설정된 파일을 확인해본다. nameserver 127.0.0.53이라고 되어 있는 것을 볼 수 있다. 하지만 실제로는 192.168.111.2로 설정되어 있다. 이 상태에서 www.hanbit.co.kr  에 접속하면 정상적으로 잘 접속이 된다.

     

    하지만 /etc/resolv.conf 파일에서 nameserver 행을 #으로 주석처리 한 다음에 저장한다(이 파일은 재부팅하거나 네트워크가 재시작되면 다시 초기화된다). 다시 웹브라우저를 종료한 뒤에 다시 www.hanbit.co.kr에 접속하면 접속되지 않는다. 하지만 주소창에 아까 nslookup으로 얻었던 www.hanbit.co.kr의 ip 주소인 218.38.58.195를 입력하면 다시 접속이 완료된다. 그 이유는 ip주소를 알고 있으니 네임서버의 역할이 필요 없기 때문에 무능화된 네임서버의 영향이 없는 것이다. 따라서 여기서 알 수 있는 점은 네임 서버는 결국 url 주소를 ip 주소로 변환해주는 것 일뿐, 실제 컴퓨터의 네트워크에 영향을 미치지 않는다. 단지 우리가 평소에 사용하는 웹사이트의 ip주소를 잘 모르기 때문에 인터넷이 안된다고 느끼는 것 뿐이다.

     

    이제는 앞서말한 /etc/hosts 파일에 218.38.58.195 www.hanbit.co.kr  을 추가해주면 주소창에 url을 입력해줘도 잘 접속이 된다. 물론 아까와 마찬가지로 네임서버가 제 역할을 하지 못하는 상태이기 때문에 다른 웹사이트들은 url로 접속이 되지 않는다. 또한 /etc/hosts/ 파일에 url을 다른 서버의 ip로 적어주면 실제 url의 웹서버가 아닌 다른 웹서버로 접속이 된다. 다만 브라우저에서 보안 경고를 한다.

     


     

    url을 통해 ip를 획득하는 과정을 정리해보겠다.

    1. 먼저 url을 입력한다.

    2. /etc/host.conf 파일을 확인 후, order hosts,bind라고 되어 있으면 먼저 /etc/hosts파일을 열람하고 해당 url의 ip가 없으면 /etc/resolv.conf에 설정된 네임서버를 통해서 진행된다. 만약 먼저 네임서버를 통해 ip를 얻고 싶다면 order bind,hosts로 순서를 바꾸면 된다고 하는데 내가 해본 결과 실패했다. 이유는 아직 모른다(https://ftp.kaist.ac.kr/LDP/en/solrhe/chap5sec39.html 나중에 확인해보기. DNS/BIND 소프트웨어가 설치되어야 이 설정이 효과가 있다고 한다). 그리고 multi on이라는 키워드도 있는데 이건 /etc/hosts 파일에 여러 url을 사용할 수 있다는 의미이다(이 의미도 모호하다). 

     

     

    다음 포스팅에서 계속

Designed by Tistory.