[CentOS] Linux DNS Server 정리 및 구축 [bind / Root Hint / hosts / resolv.conf]
Nowhere 와 Now here 의 차이

IT/ㄴ Linux

[CentOS] Linux DNS Server 정리 및 구축 [bind / Root Hint / hosts / resolv.conf]

TIENE 2023. 8. 1. 16:06
반응형

- 공기와 같이 당연하게 항상 있는 것이 있다.

- 수많은 것이 있겠지만, 그 중 하나가 DNS Server다.

- 이 DNS Server가 없다면, 무수히 많은 IP 주소를 담은 리스트를 각 PC마다 보유하고 있어야할 것이다.

- 무수히 많은 IP 주소와 함께, 무수히 많은 도메인도 존재한다.

- IP와 도메인이 매칭되어 사람이 읽기 쉬운 문자의 도메인 이름을 입력하면, 원하는 도메인으로 이동하는데, 그 과정에서 DNS Server 도움이 필요하다.

- 관련 내용은 [CISCO] DNS(Domain Name Service) 알아보기 [Packet Tracer]에서 알아보았는데, 구축하면서 느낀점은 아주 간략하게 알아보았다는 점이다.

- 테스트하고 정리하여 올리는 이 글 또한 DNS의 전부를 담은 것은 아니다. 제일 복잡했고 제일 힘겨웠다. 알게 된 것들을 정리하는 것에 의의를 두어야겠다.

[Linux DNS Server 정리 및 구축]


 

[도메인 체계]

참고 : 한국인터넷정보센터

 


[도메인 검색 흐름도]

 

/etc/hosts와 /etc/resolv.conf의 우선순위

/etc/hosts를 수정하기 전에 임의 도메인 주소의 IP를 알아보자.

 nslookup

- www.google.com을 입력하여 IP 주소를 알아온다.

- 142.250.206.196이라는 IP 주소를 받았다.

 

- 과연, www.google.com이라는 도메인주소의 IP가 정말 맞는지 확인해보기 위해 Ping Test를 진행한다.

- 위에서 알아온 IP로의 Ping Test가 정상적으로 진행되었다.  

 

- 이제, /etc/hosts 파일을 수정하여 우선순위를 알아본다.

- /etc/hosts 파일을 열어서 www.google.com의 IP 주소를 1.1.1.1이라고 변경한다.

- 실제로 1.1.1.1은 DNS를 서비스하는 IP 주소다.

 

1.1.1.1 — the Internet’s Fastest, Privacy-First DNS Resolver

DNS: Internet’s Directory DNS: Internet’s Directory Nearly everything on the Internet starts with a DNS request. DNS is the Internet’s directory. Click on a link, open an app, send an email and the first thing your device does is ask the directory: W

1.1.1.1

 

 

- 위에서, 142.250.206.196이라는 IP를 가진 도메인의 주소가 [www.google.com]인 것을 알았다.

- /etc/hosts 파일에서 [www.google.com]의 IP를 1.1.1.1로 변경 후, Ping Test를 시도했다.

- 정상적으로 통신이 되기는 하지만, 1.1.1.1의 실제 주소는 [https://1.1.1.1/dns/] 이다.

- /etc/hosts파일에서 1.1.1.1 [www.google.com] 으로 설정되었고, [www.google.com] 으로 통신하고자 할때, 먼저 /etc/hosts파일을 참고하는 것을 확인할 수 있다.


DNS Query의 종류

- Recursive Query (재귀 쿼리)

= DNS Client  Local DNS Server  통신에 사용하는 쿼리

 

 

- Interactive Query (반복 쿼리)

= Local DNS Server  외부의 다른 DNS Server 통신에 사용하는 쿼리

 

 


DNS Root Domain File

- NS(Name Space) 대한 권한 보유 DNS Server 

(Local DNS Server가 요청한 영역을 가지고 있을 경우)

= 요청 받은 쿼리에 대한 IP 주소 응답

 

- NS(Name Space) 대한 권한이 없는 DNS Server

(Local DNS Server가 요청한 영역을 가지고 있지 않을 경우)

= Root Hint 파일을 이용하여 IP 주소를 응답 받아서 전달

 


/etc/named.conf

- 참조할 Root Domain에 대한 설정파일.

zone "." IN
= Root Domain 정의 하나의 온점으로 지정 / 존에 대한 클래스를 정함 / Internet Class의 약자
        type hint;
= Root Zone 자신을 포함하면서, Top-level Domain에 대한 서버의 힌트를 포함하고 있다는 의미의 Zone type
        file "named.ca"; 
= Root Zone에 대한 힌트를 담고 있는 파일 지정
};

 

more /var/named/named.ca

- Local DNS Server에서 가지고 있지 않은 DNS 정보는 /var/named/named.ca  있는 Root Hint 통하여 요청 받은 IP 주소를 찾아간다.

 


[종합 정리]

 

1.Recursive Query 통하여, 내부에서 요청한 Query 처리한다.

2.처리할  없으면, Interactive Query 통하여 외부 DNS Server 통신하여 IP주소를 받는다.

3.외부 DNS Server 통신할 때의 기준은  개의 파일이다.

 3.1/etc/namd.conf /var/named/named.ca

 3.2 /etc/namd.con 에서 Root Domain 대한 영역과 그에 대한 힌트 파일을 확인한다.

 3.3 /var/named/named.ca 파일 내부에 있는 Root Hint 참고하여 IP 받아온다.

 

 

 


DNS Server 구축하기

1. DNS Server 설치하기

yum -y install caching-nameserver 
yum -y install bind*

- 위 명령어 모두 DNS Server를 설치할 수 있는 명령어다.

- 둘 중 하나의 명령어를 입력하여 DNS Server를 설치한다.

 

 

2. DNS Server Main File 수정

vim /etc/named.conf

- 설치 후, 위의 파일을 열어보면 다음과 같이 설정되어있다.

- Port 번호 53(DNS)를 Localhost에서만 Listening 상태로 설정되어있다.

- allow-query도 마찬가지다.

- 두 개의 설정을 모든 IP로부터 오는 요청을 응답하도록 변경한다.

        listen-on port 53 { any; };
-모든 IP로부터 네임 서버로서 응답

        allow-query     { any; };
-네임 서버가 제공하는 도메인 정보에 대한 질의 가능 클라이언트 지정
-any로 모든 IP 가능

- 저장 후 DNS Server를 실행한다.

 

1.1 짧막한 DNS Server Test

systemctl start named

- 실행하여, google.com으로 Ping Test를 해보았다.

- 먼저, 현재 설정하고 있는 DNS Server의 DNS Server IP 는 8.8.8.8 으로서, 외부에 IP를 요청하고 그 응답을 받아온다.

- 따라서, 다음과 같이 도메인 영역을 가지고 있지 않아도, Root Domain에 Query를 보내어서 정보를 받아온다.

 

- 만약, DNS Server 주소를 8.8.8.8에서 자신으로 변경 후 DNS Server를 끄면 어떻게 될까

- 자신의 IP [192.168.1.132] 으로 DNS Query에 대한 요청을 응답해야하는 상황이다.

 

systemctl stop named

- DNS Service를 중지하고, Ping으로 Test 해본다.

- 자기 자신에게 google.com에 대한 IP를 요청했으나, DNS Service를 중지하였기 때문에, IP를 알아올 수 없다.


 

2. 도메인 영역 지정

vi /etc/named.rfc1912.zones

- 위의 파일을 수정하여 도메인 영역을 지정하고  Zone File을 지정한다.

 

- tiene.vm이라는 도메인 영역을 생성하고, 관련 파일은 tiene.vm.zone으로 지정한다.

- 확장자 [.zone] 은 임의로 지정할 수 있다. 하지만, 보통 zone으로 보기 편하게 사용한다.

- 저장 후 빠져나온다.

 

systemctl restart named

- DNS Service를 재시작해야함으로 명령어를 실행했다.

- 하지만, 다음과 같은 Error Log로 인하여 실행할 수 없었다.

- systmectl status named으로 관련 내용을 살펴볼 수 있다.

 

systmectl status named

- DNS Service 상태 확인 명령어를 통해, 어떤 Error가 발생하였는지 확인할 수 있다.

- zone tiene.vm에 대한 파일을 불러오는 과정에서 Error가 발생한 것으로 보인다.

- 아래에 file not found라는 Log도 보이는데, 이 Error는 당연한 Error다.

- 도메인 영역 지정 시, File만 지정했을 뿐, File을 생성해야하기 때문이다.

- 따라서, tiene.vm에 대한 도메인 영역 파일을 생성해야한다.


 

3. 도메인 영역 파일 생성

cd /var/named
cp -p named.localhost tiene.vm.zone

- 명령어 cp의  [-p] 옵션은  허가권과 소유권을 같이 복사한다.

- 도메인 영역 파일은 허가권과 소유권이 각각 640 / root | named 이어야한다.

- 또한, name.localhost 정방향 / name.loopback 역방향에 대한 도메인 영역 파일 견본이다.

 

-  다음과 같이 허가권과 소유권이 올바르게 생성되어 복사되었다.

 

systemctl start named
systemctl status named

- DNS Server를 재시작하고 상태를 확인한 결과, 정상적으로 실행되었다.


 

4. 주 영역 네임 서버 구축

vi tiene.vm.zone

- 이제, 주 영역 NS의 설정이 필요하다.

- 관련 DNS Record는 여기서 확인할 수 있다.

 

[Win2003] DNS Record 알아보기

- 기본적인 DNS를 살펴본 적이 있다. - [CISCO] DNS(Domain Name Service) 알아보기 [Packet Tracer]에서 정말 간단하게 동작 원리만 알아보았다. - 이제는, 그 과정에서 어떤 정보가 필요하고 그에 상응하는 식

a-gyuuuu.tistory.com

$TTL 1D [캐시를 저장하는 시간]
@       IN SOA  @ root.korea.vm. (   [@ = 자신의 도메인 영역   root.korea.vm = 관리자 이메일]
                                        0       ; serial 갱신 번호 (클수록 최신 버전이다)
                                        1D      ; refresh 갱신 주기 시간
                                        1H      ; retry 갱신 여부 확인 실패 시, 재 시도 시간
                                        1W      ; expire 갱신 실패 시, DNS 정보 질의 중단 시간
                                        3H )    ; minimum 갱신 반영 최소 시간
        NS      ns1.korea.vm.
        A       192.168.1.10
www  A      192.168.1.10
ns1    A       192.168.1.10   

- 저장 후 재시작하여 Web Server로 접속해보자.


* - named.conf 파일과 Zone 파일의 오류로 인해 정상적으로 실행되지 않을때가 있다. 

- 그래서 2개 설정에 대해서 오류 검사를 하는 명령어를 확인해 보았다

- named-checkconf 명령어를 통하여 현재 사용 중인 conf 파일의 오류를 알아낼 수 있다.

 named-checkconf /etc/named.conf

- 아무런 반응이 없다면 정상인것 이다.

 

named-checkzone tiene.vm /var/named/tiene.vm.zone

- named-checkzone aaa.com(도메인명,name.conf에 설정된것) /var/named/aaa.com.zone(zone파일의 경로 및 파일명)

- OK가 나온 것으로 보다 정상적으로 수정 및 적용이 된 것 같다.

 

- 약간의 오타로 다시 확인해 보았을 때 아래와 같이 오류가 발생한다.


5. Web Server 접속해보기

- 먼저, DNS Server에서 tiene.vm에 대한 ns 정보를 query했다.

- 아래와 같이 잘 나온다.

 


추가 - Wireshark로 각 Protocol 확인해보기

1) DNS

 

2) HTTP

 

 


 

반응형