본문 바로가기

리눅스, 서버

DNS 서버 구축 리눅스(Centos)

반응형

네이버나 구글에 접속할 때 naver.com 또는 google.com을 입력창에 쳐서 접속하지 210.89.160.88 또는 172.217.26.142를 통해 접속하지 않습니다. 휴대폰에 친구들의 이름 - 번호를 저장해 주소록에서 이름을 통해 전화를 걸듯 일일이 친구의 번호를 외우지 않습니다. 하지만 친구- 번호를 지정하지 않고는 전화를 걸 수 없습니다. 마찬가지로 인터넷 창은 dns 서버 없이 naver.com이나 google.com를 인식할 수 없습니다. 

 

이 dns 서버의 역할은 휴대폰 주소록처럼 친구 - 010-xxxx-xxxx처럼 google.com - 172.217.26.142, naver.com - 210.89.160.88로 지정해 우리가 주소창에 ip 주소가 아닌 naver, google를 입력했을 때 매칭 되는 ip 주소로 접속하는 기능을 제공합니다. 

 

이 dns 서버를 리눅스 Centos 에서 구축해 보겠습니다. 

 

1. 해당 패키지 설치 

 

yum -y install bind*

dns 서버 구축에 필요한 패키지를 설치하겠습니다.

 

Complete! 가 뜨며 설치가 정상적으로 완료되었습니다.

 

rpm -qa bind 

를 통해 설치되었는지 확인하고

systemctl start named 

dns서버 설치와 실행이 완료되었습니다.  

 

이제 남은 작업은 해당포트의 개방과 conf 파일을 통해 필요한 설정을 해야 합니다. 

 

 

2. 해당 포트 개방 

 

firewall-cmd --permanent --zone=public --add-port=53/tcp

firewall-cmd --permanent --zone=public --add-port=53/udp

 

클라이언트가 naver.com 를 인터넷 주소창에 입력하게 되면 인터넷 브라우저는 dns 서버를 통해 naver.com에 대한 ip 주소 정보를 알아내고 naver 웹서버에 접속하게 됩니다. 이때 dns 프로토콜을 사용해 dns query와 response를 수행하기 위해 53번 포트를 사용합니다. 보편적으로 udp 포트를 사용하지만 dns 헤더와 메시지 영역의 길이가 512 바이트를 초과하는 경우 tcp 포트를 사용하기 때문에 53번 tcp와 udp 포트를 모두 개방해야 합니다.

 

firewall-cmd --reload 

방화벽을 껐다 켜줍니다. 

 

 

3. dns 서버 설정

 

vi /etc/named.conf 

dns 서버 설정을 시작하겠습니다. 이전에 만든 아파치 웹서버 10.10.20.160 을  "testdns.com"으로 접속 가능케 하겠습니다. 

 

실제로 testdns.com 은 존재하는 도메인네임으로 접속하면 위 화면을 볼 수 있습니다. 

 

nslookup testdns.com 

실제로 testdns.com 의 ip 주소는 81.94.198.122입니다.

 

vi /etc/named.conf 

문서 편집기로 named.conf를 수정하겠습니다. 

13,14번 라인에서 53번 포트에 허용 가능한 ip 주소를 입력하는 란입니다. 

 

13, 14번 { any; }를 입력해 모든 아이피에서 허용가능케 하겠습니다.

21번 줄 allow-query의 경우 query를 받을 호스트를 지정하는 란으로 모든 호스트가 가능케 하겠습니다. 

22번 줄처럼 해당 아이피를 지정하거나 네트워크 영역대를 지정해 호스트의 범위를 조절할 수 있습니다. 

 

vi /etc/named.rfc1912.zones

도메인을 설정하기 위한 파일입니다. testdns.com 이 10.10.20.160이며 10.10.20.160 이 testdns.com이라는 내용을 입력해야 합니다. 

 

제일 아래 칸으로 가서 

zone "testdns.com" IN {

           type master;

           file "testdns.com.zone";

          allow-update { none ; }

};

testdns.com을 도메인 네임으로 정했습니다.

 

file 은 관련 설정을 담을 파일의 이름을 적습니다. 

 

type의 경우 master 또는 slave처럼 갑작스러운 장애를 대비한 dns 서버의 이중화를 위해 메인 역할, 백업 역할을 나누기 위해 필요합니다. dns slave 서버는 master 서버를 미러링 하면서 master 서버가 장애가 왔을 때 즉각적으로 master 역할을 할 수 있습니다. 일단 master 서버를 만들겠습니다. 

 

allow-update는 master 서버의 변경사항을 slave 서버가 적용할 수 있을지에 대한 내용입니다. 지금은 slave는 없기에 none으로 지정했습니다. 

 

zone "20.10.10.in-addr.arpa" IN {

           type master;

           file "testdns.com.rev";

          allow-update { none ; }

};

 

10.10.20.160 = testdns.com 라면 반대인 testdns = 10.10.20.160이라는 내용을 담기 위해 필요합니다. 웹서버 10.10.20.160에서 마지막 자리를 떼고 이를 뒤집어 20.10.10. 을 in.addr.arpa 에 추가합니다.

 

file, type, allow-update는 위의 내용과 동일합니다. 

 

마지막으로 :wq를 통해 저장 후 나가겠습니다. 

 

cp /var/named/named.localhost /var/named/testdns.com.zone

cp /var/named/named.localhost /var/named/testdns.com.rev

 

설정된 이름과 동일한 파일들을 만들겠습니다.

 

vi /var/named/testdns.com.zone

10.10.20.160의 도메인 네임이 testdns.com이라는 것을 설정하겠습니다.

 

vi /var/named/testdns.com.rev

testdns.com.zone 파일에 들어가 보니 이렇게 나옵니다. 하나하나 살펴보겠습니다. 

 

$TTL 10M : Time To Live의 약자로서 호스트 이름을 질의한 다른 네임서버가 해당 정보를 캐시에 저장하는 기간을 의미합니다. 10M 은 

10분을 의미하며 D는 일, H는 시간 등등입니다.

 

IN : internet을 의미합니다.

 

SOA : Start Of Authority로 권한의 시작이라는 의미입니다.

serial 은 버전 정보,

refresh는 상위 서버에게 업데이트된 정보를 요청하는 간격 master-slave와 allow-update를 생각하면 될 듯

retry는 상위 서버에 문제 발생 시 재접속 간격

expire는 상위 서버에 접속 못할 때 이전의 정보를 파기하는 간격입니다.

minimum 은 해당 시간 이후 정보가 삭제됨을 의미합니다. 

 

NS는 Name Server라는 뜻으로 네임서버의 이름입니다. 

A는 호스트 즉 접속할 해당 웹서버의 아이피입니다. 여기서는 10.10.20.160 이겠죠.

 

 

 

www.testdns.com의 웹 호스트 주소가 10.10.20.160으로 설정했습니다.

 

vi /var/named/testdns.com.rev

를 편집할 차례입니다. 위와 같이 수정하였습니다. 

 

PTR 이 눈에 들어오는데 PTR의 뜻은 역방향 질의로서 "testdns.com 이 어디냐?"가 아니라 "10.10.20.160 가 어디냐?"를 묻는 것입니다. 

 

이제 모든 설정이 마무리되었습니다.

systemctl restart named

systemctl enable named 

를 통해 재시작하고 서버가 켜질 때마다 dns 서버를 active 될 수 있게 설정했습니다. 

 

클라이언트에서 dns 서버를 지정합니다. 

 

testdns.com으로 접속하니 예전에 만들어 놓았던 웹서버 10.10.20.160으로 접속했습니다. 

 

nslookup testdns.com 

를 통해 testdns.com의 ip 주소가 10.10.20.160 임을 확인했습니다. 

 

클라이언트에서 dns 주소를 삭제한 뒤 다시 testdns.com에 접속해보겠습니다.

 

실제로 존재하는 testdns.com으로 접속되며 nslookup 조회를 해보니 다른 dns 서버 주소가 나타나는 것을 확인했습니다.

 

 

 

이렇게 dns 서버를 구축해봤습니다. 내용을 다루다 짤막하게 나온 마스터-슬레이브의 개념은 dns 서버가 장애가 왔을 때를 대비하기 위한 기술로서 실제로 dns 서버를 구축할 때 이렇게 이중 삼중으로 하게 되는 이것에 대해 다음 글에서 알아보려 합니다. 

반응형