본문 바로가기
IT Security/LINUX Basic

24. Linux - DNS 서버 구축 2, 패키지 및 DNS 설정 파일

by Rosmary 2020. 7. 27.
728x90
반응형

 

 

지난 포스팅에서는 DNS 서버가 무엇인지, 그리고 이 DNS 서버가 어떤 형태로 동작하는지 알아보았다. 이를 통해서, 우리가 "사이트 주소"라고 불리는 녀석들로 어떻게 사이트를 접속하게 되는지 파악할 수 있었다. 

 

만약 집안에서 사용할 개인 네트워크를 구성하는 경우, 국내 인터넷 제공 업체(K*나 S*T와 같은 업체)의 DNS 서버에 돈을 주고 도메인을 등록하는 것은 매우 비효율적인 일이다. 그렇기 때문에, 개인 네트워크를 구성하려는 목적을 가진 사람들은 별도의 PC가 DNS 서버의 역할을 하도록 만들어, 네트워크 상의 다른 PC에 "사이트 주소"만으로도 접속할 수 있도록 만들어준다. 예를 들면 이런거다.

 

필자가 가족들만 사용하는 홈페이지 사이트를 만든다고 가정하자. 그런데 이 사이트를 브라우저로 접속하려면 항상 IP만 주소창에 입력해야한다고 가정해보자. 네트워크에 대해서 어느정도 알고 있는 사람들이라면, IP 주소 한 개 정도야 쉽게 외워서 접속하겠지만, 일반인들은 이러한 IP 주소를 알려주면 처음보는 숫자들의 나열에 혼란만 느낀다. 따라서 접속을 쉽게 유도하기 위해, 기억할 수 있는 도메인 주소(우리가 흔히 말하는 사이트 주소)를 달아줘야 하는데, 이를 위해서 이 도메인 주소를 IP로 변환할 수 있는(DNS 역할을 하는) PC가 동일 네트워크 내에 존재해야 한다.

 

내부에 DNS 서버가 존재하지 않고, 내 PC의 기본 DNS 서버 주소가 일반 인터넷 제공 업체로 등록된 경우.

 

내부 네트워크에 사설 DNS 서버가 존재하고, 내 PC의 기본 DNS 주소가 사설 DNS 주소로 지정된 경우.

 

내부 DNS서버가 존재하지 않는 상황에서는 IP 주소로만 웹 서버 접속이 가능하다.

 

 

개인 네트워크 구축 시, DNS를 설정해야하는 이유에 대해 대략적으로 알아보았으니, 이제 DNS 서버 설치를 진행해보자.

 

 

 

 

1. DNS 서비스 패키지: bind

 

(1) 패키지 설치 여부 및 최신 버전 설치 여부 확인

 

리눅스에서 DNS 서비스를 동작시키기 위해 필요한 패키지(프로그램)는 bind 라고 불리는 패키지다. 리눅스를 최소 설정으로 설치한 상태라면, 이 bind 패키지는 설치되어 있지 않을 확률이 높다. 다음의 명령어로 bind 패키지의 설치 여부를 확인해보자.

 

#  rpm -qa | grep bind :  bind 패키지가 리눅스에 설치되어 있는지 확인하는 명령어

#  yum list bind        :  현재 설치된 bind 패키지가 최신 버전인지 확인하는 명령어

 

 

rpm 명령어로 아무 결과도 나타나지 않는다면 bind 패키지가 설치되지 않은 것이다. 설치되지 않았더라도 걱정하지 말자. 어차피 yum list bind 명령어의 결과는 동일하게 나타날 것이다.

 

최신 버전이 아닌 경우, Available Package(사용 가능 패키지)에 대한 정보가 표시된다.

 

만약 yum list bind 명령어의 결과가 아래와 같이 Installed Package로 나타난다면, 다음에 설명할 패키지 설치 과정은 건너뛰어도 된다.

 

최신 버전의 bind 패키지가 설치되었는 경우 yum list bind 명령어 결과

 

(2) bind 패키지 설치(또는 업데이트)

 

사용 가능한 최신 버전이 존재한다고 나온다면, 다음의 명령어 중 하나로 최신 bind 패키지를 설치해주자.

 

# yum install bind -y  :   bind 패키지가 설치되지 않았을 때, bind 패키지를 최신 버전으로 설치하는 명령어

# yum update bind    :  구 버전의 bind 패키지를 최신버전으로 설치하는 명령어

 

설치 또는 최신 버전 업데이트가 완료되면 다음과 같이 Complete 문구가 뜨면서 마무리된다.

 

yum install 명령어의 경우, 기존에 bind 패키지가 설치되지 않았거나, 설치되어도 구 버전인 경우 모두 사용이 가능한 명령어다. 반면 yum update 명령어는 기존에 설치된 패키지를 최신버전으로 다시 설치하는 기능이다. bind 패키지가 설치되지 않은 상태에서 yum update 명령어를 써봐야 제대로 된 결과는 나오지 않으니 이 점만 유의하자.

 

해당 패키지가 제대로 설치되었는지 확인하려면, yum list bind 명령어를 입력하고 결과가 Installed Package로 출력되면 된다.

 

 

 

 

2. bind 패키지의 설정 파일: named.conf

 

이전 포스팅에서 ssh와 http 서버스 구축에 대한 내용을 진행하면서, 이러한 서비스는 각자의 설정 파일을 가지고 있음을 확인할 수 있었다. DNS 또한 서비스의 일종이기 때문에, DNS와 관련된 bind 패키지 역시 설정 파일이 존재한다. 

 

늘 그렇듯이 설정파일은 /etc 폴더 내에 존재한다. 앞선 서비스의 설정파일과 조금 다른점이라면, 이 named.conf 설정 파일은 별도의 폴더 내에 따로 저장되지 않는다. sshd나 httpd의 설정파일 각각 /etc/ssh 또는 /etc/httpd/conf 폴더 내에 존재했던 것을 생각하면 굉장히 의외의 위치에 존재하는 설정 파일이다. 

 

 

named.conf 설정 파일의 내용은 크게 3 부분으로 나뉘는데, 첫 번째 부분은 타 서비스의 설정파일에서도 볼 수 있는 Listen Address 나 Allow-IP등 접속 정보에 대한 내용을 설정하는 부분, 두 번째 부분은 DNS 서버의 로그 옵션을 설정하는 부분, 마지막은 PC에서 서비스를 제공하기 위한 서버 타입과 관련 파일에 대한 정보를 작성하는 부분이다. 

 

왼쪽이 접속 정보에 대한 내용이다. 내용이 길긴 한데, 의외로 건드릴 부분은 많지 않다.

 

 

먼저, 접속 정보에 대한 내용을 살펴보자. named.conf 설정 파일의 좌측에 options 라고 작성된 부분이 접속 정보를 설정하는 부분이다. 

 

listen-on port 53 으로 지정된 부분은, DNS 서버로 질의가 들어오는 경우, DNS 서버의 주소를 무엇으로 할 것인지 결정하는 부분이다. 초기 설정은 { 127.0.0.1 }, 즉 자기 자신에게 질의를 하는 것으로 설정되어 있다. 외부에서 이 PC로 IP주소를 문의하기 위해서는 리눅스 서버의 IP를 입력해주어야 한다. 현재 컴퓨터의 ip를 입력해주자. 필자는 DNS로 사용할 리눅스의 주소가 172.30.1.51이다. 

 

listen-on-v6 port 53 부분은 IPv6(버전 6)에 대해 설정하는 부분이다. 아직 IPv6를 사용하는 곳이 많지 않기 떄문에 큰 의미는 없는 설정내용이다. 따라서 필자는 이 내용을 주석처리했다.

 

바로 아래에 보면, directory 설정 부분이 보이는데, 이 부분은 DNS 서비스 구동 시, 내부 네트워크 정보를 저장하는 파일의 경로를 어디에 둘 것인지 설정하는 부분이다. 기본값으로 /var/named 폴더로 설정되어 있으며, 포스팅에서도 기본값을 그대로 사용할 것이다.

 

몇 줄 건너뛰면, allow-query 부분이 보이는데, 이 부분은 어떤 IP에게 DNS 서비스를 제공할 것인지 작성하는 부분이다. 필자는 내부 네트워크에 연결된 기기, 즉, 공유기와 연결된 스마트폰과 노트북만 DNS 질의가 가능하도록 172.30.1.0/24 (172.30.1.1 ~ 172.30.1.254까지)를 설정했다.

 

여기까지 설정하면, DNS 서버로의 접근과 관련된 설정은 모두 끝난다. 이 설정을 통해, DNS의 서버 IP 지정 및 DNS 쿼리를 이용할 수 있는 IP 대역을 지정했다. 

 

 

 

다음으로 수정해야 할 설정파일의 부분은 서두에서 언급했던 세 부분 중, 마지막 부분인 서버 타입 및 정보 제공을 위한 파일을 지정하는 부분이다(zone 으로 시작하는 부분이다).

 

기본값으로는 zone "." IN 값으로 시작하는 값만 있는데, 이는 해당 PC가 DNS 서버로 동작하지 않을 때, 상위의 root DNS 서버로 질의를 하기위해 설정된 값이라고 보면 된다. zone "." 부분의 내용을 보면 type hint; file "named.ca"로 되어 있는데, 해당 PC에 DNS 서버 질의가 들어왔고, 만약 답변할 수 없는 질의가 들어왔을 경우, 루트 DNS 서버로 질의를 하겠다는 의미(type hint), 그리고, 해당 루트 서버에 대한 정보를 저장하는 파일이 "/var/named/named.ca" 파일로 지정되어 있다는 의미다. 

 

 

필자는 내부 네트워크의 주소를 family.lee라는 주소로 지정하려고 한다. 따라서 DNS 서버의 도메인 주소는 ns1.family.lee로, 그리고 웹 사이트 주소는 www.family.lee로  로 지정하기로 했다. 이를 위해 named.conf 파일에는 family.lee와 관련된 주소에 대해 정보를 전달할 수 있는 파일을 만들어야 하고, 현재 리눅스 PC에서 family.lee에 대한 DNS 응답을 직접 할 수 있다는 것을 설정 파일에 지정해야 한다. 

 

이를 위해, named.conf 파일의 기본 zone "." 영역 아래에, family.lee 네트워크에 대한 zone 설정을 추가해주어야 한다. 따라서, zone "family.lee" IN {} 문구를 named.conf 아래에 추가해주었다. 추가한 문구의 중괄호{} 내에는 type master; 를 입력하여 해당 리눅스 PC가 family.lee 주소에 대한 DNS 응답을 진행할 것임을, 그리고 file "family.lee.zone"이라는 파일을 DNS 응답을 위한 정보를 저장할 파일로 지정해주었다. 

 

------------------------------------------------------------------------------------------------------

zone "주소 영역" IN {

    type master | slave | hint;   

    file  "zone 정보를 저장할 파일명"

}

 

<type>

#  master: 해당 PC에서의 직접 질의를 위한 설정값

#  hint    : 루트 또는 상위 DNS로의 질의

#  slave  :  DNS 서버 이중화 시, 해당 PC를 보조 DNS 서버로 지정하기 위한 설정값 

<file>

#  zone 정보를 저장할 파일명 지정. 해당 파일은 option의 directory 경로에 위치해야 한다

-------------------------------------------------------------------------------------------------------

 

**  type slave는 추후 DNS 이중화 구축에 대해 언급할 때, 다시 한 번 포스팅 할 예정이다.

 

여기까지 작성이 되었다면, DNS 서비스 구동을 위한 기본적인 named 설정이 완료된 것이다. 해당 파일을 저장하고 나오자.

 

named 패키지는 설정 파일이 제대로 작성되었는지 확인할 수 있는 명령어를 제공한다. named.conf 파일 작성 / 저장 후, 아래의 명령어를 통해 named.conf 파일 내용의 이상 유무를 확인할 수 있다. 명령어 입력 후, 아래의 화면과 같이 아무 결과가 출력되지 않고 프롬프트가 뚝 떨어지면 정상적으로 설정 파일을 작성한 것이다.

 

# named-checkconf /etc/named.conf

 

 


 

이번 포스팅에서는 DNS 서버 구성을 위한 패키지 설치 및 패키지 설정 파일의 작성 방법에 대해 알아보았다. 다음 포스팅에서는, named.conf 내용으로 작성한 "family.lee"에 대한 zone 정보 저장 파일인 "family.lee.zone" 파일의 작성 방법에 대해 알아보고, 실제 DNS 질의를 통해 도메인 주소만으로 웹 사이트에 접속할 수 있는지 확인해보려 한다.

 

FIN.

 

 

 

 

 

 

 

반응형

댓글