server & network/DNS 서버

캐싱 DNS 서버

infra 2021. 9. 18. 21:45

캐싱 (전용) 네임서버=캐싱 (DNS 전용) 네임 서버=캐싱전용 네임 서버=Caching-Only Nameserver

: PC에서 URL로 IP 주소를 얻고자 할 때 해당하는 URL의 IP주소를 알려주는 네임서버를 의미한다.

 

왼쪽그림의 로컬 네임서버가 DNS전용 네임서버 역할을 한다.

 

로컬네임서버에서 자신이 관리하는 도메인이 따로 없으나, 외부에 따로 질의(문의)하며 그다음 응답을 해줄 때 알려주는 서버이다.

 

요청한 도메인에 대해 IP를 알아내기 위해선 여러 서버에 query를 보내게 된다.

모든 사용자의 요청에 대해 여러 서버에 쿼리를보내게 되면, 응답은 느리고, ROOT DNS 및 각 DNS는 엄청난 부하가 발생하게 됨.

그래서 이 문제점을 해결하기 위해서 캐싱DNS가 존재한다.

 

캐싱 DNS 서버는 한번 쿼리한 도메인에 대해 TTL(=Time To Live: cache가 유효한 시간)이 지나게 되면 다시 쿼리를 하게 된다. 주(primary) DNS서버의 부하를 줄이고 싶다면, TTL값을 높게 잡아주면 된다.

 

cf)서버의 IP가 자주 바뀐다면(실무적으로 구성 상 변경해야될 때,서버 이전, 서버 relocation 등등 ) TTL값을 작게 잡아 도메인에 대한 IP가 빨리 바뀌도록 해야 할 것이다.

예를 들어 , 일반적으로 TTL은 24 Hours(60x60x24=86400 Seconds)로 잡고, 서버 이전하게 된다면 TTL을 5분으로 설정 하고 그다음 24시간 후에 서버 이전작업을 해야 한다.

 

dns를 test하기 위해 서버 총 3대로 해놓음 (Client, Server(B), Server(A))

캐싱 DNS 서버 구축 방법

 

1.BIND 설치하기

bind는 대부분의 배포판에서 패키지 형태로 제공함, yum 패키지 관리 프로그램으로 설치할 수 있다.

8버젼 이상,Redhat/CentOS 인 경우 , dnf 로 설치해야 된다.

7.0 이상 OS 버젼 8.0 이상 OS version
yum -y install bind bind-chroot bind-utils dnf -y install bind bind-chroot

캐싱네임 서버는 복잡한 설정이 필요 없고, 리눅스 배포판에서 패키지로 제공되는 bind=caching 기능이 설정된 상태임.

server(A) :

[root@serverA ~]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)

 

[root@serverA ~]# dnf -y install bind-chroot

[root@serverA ~]#

[root@serverA ~]# rpm -qa |grep -i bind-chroot
bind-chroot-9.11.4-17.P2.el8_0.1.x86_64


2. /etc/named.conf 내용 수정하기

더보기

2. /etc/named.conf 내용 수정하기

/etc/named.conf 수정 전/ 후의 vi editor 화면

10 options {

11     listen-on port 53 { any; };

=> Service Port및 IPv4 정보 => any 로 변경

12     listen-on-v6 port 53 { any };

=> Service Port및 IPv6 정보  => any 로 변경

 

13     directory   "/var/named";

=> BIND server가 사용할 zone 파일은 찾을 위치,   

14     dump-file   "/var/named/data/cache_dump.db";

=> SIGINT 를 받으면 서버를 cache_dump.db에 덤프 한다. 정보가 갱신될 때 저장되는 파일임.

15     statistics-file "/var/named/data/named_stats.txt";

=> 서버의 통계 정보를 저장, 통계처리 용도의 파일

16     memstatistics-file "/var/named/data/named_mem_stats.txt";

=> 서버의 메모리 사용 통게 정보를 저장

19     allow-query     { any; };

=> 쿼리를 받을 호스트를 정한다. 사용 안할시 default를 모든 호스트의 쿼리로 받는다.

, 도메인 이름의 query가 허용된 컴퓨터 또는 IP주소

 

29     recursion yes;

=> 재귀쿼리 요청 설정(yes)/미설정(no) : 캐싱네임서버와 관련된 설정

yes로 하면 다른 도메인에 대한 정보도 클라이언트에게 제공한다는 의미.

no로 설정하면 Only Authoritative 서버로 설정한다는 의미.

즉, 오직 현재 설정파일에 정의된 도메인정보만 클라이언트에게 제공한다.

30 

31     dnssec-enable yes

=> 기존의 DNS에 공개키 암호화 방식의 보안기능을 추가 부여하여 DNS의 보안성을 대폭 강화하는 역할을 합니다.[yes/no] - 캐시 DNS 서버의 dnssec 서명 검증 기능 설정

34     dnssec-validation yes;

=> dnssec 검증 설정 [yes/no]

 

위의 더보기를 클릭 후 4가지 행을 설정후에 다음과 같이 확인해주면 된다.

부가설명은 다음과 같다.

 

4가지 행에 대해서 설정하는 이유는 VMware Workstation 네트워크 주소안에 있는 모든 컴퓨터가 네임서버를 사용할 수 있게 설정하는 것이다.

11행  127.0.0.1 -> any 로 변경

12행   ::1  ->  none

19행   localhost -> any

34행   yes -> no

DNS 자체의 포트는 TCP,UDP 를 다 사용하는 포트이며, 포트번호는 default로 53번이다.

11행 listen-on port 53 {IPver4} 네임서버에 접속이 허용된 컴퓨터 또는 서버의 IP 주소 및 포트번호

11행의 loopback이라고하는 자기자신인 가상의 IPv4는 (=127.0.0.1 )에 대해 리스닝하기 때문에, 외부에서 접근이 불가능하다. 그래서 서버에 설정된 모든 IP에 대해 리스닝 할 수 있게 any로 변경한 것이다.
->허용된 네트워크에서 DNS 질의가 가능하도록 허용한다!

12행 listen-on port 53{ipver6} 네임서버에 접속이 허용된 컴퓨터 또는 서버의 IPv6 주소 및 포트번호

12행은 11행과 마찬가지의 설명이지만, 차이점은 IPv4가 아니라 IPv6 일 떄의 설정값이다.
IPv6일 때 loopback의 아이피는 (=::1) 이며, 외부에서 접근이 불가능하다.그래서 
서버에 설정된 모든 IPv6에 대해 리스닝 할 수 없게 none로 변경한 것이다. 




 

19행은 localhost만 질의가 가능했지만, 어떤 IP라도 질의가 가능하도록 설정한 것이다.

 

서비스 상태 변화

 

3.네임서버의 서비스(=데몬) : 'named'

 

*서비스(=데몬)  관련 스크립트 파일 위치: /usr/lib/systemd/system/

 

서비스 상태 확인/시작/부팅시에도 서비스 ON 되게 하는 명령어

 

#systemctl start 서비스명

서비스를 시작하려면 start 를 옵션으로 넣어준 후 Active상태가 inactive(dead) -> active (running)상태로 변경됨.

대신 서비스는 Loaded :  service; disabled 상태임.

 

#systemctl enable 서비스명

해당 서비스를 부팅시 자동으로 올라오게 하려면 enable 옵션을 넣어주면 자동으로 리부팅시에도 서비스가 올라오게 되며,

Loaded : service; enabled 로 변경됨

 

* Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.

심볼릭 링크가 생성되며, 자동으로 가동시켜 줌.

symbolic link란 윈도우 OS에서 바로 가기 링크라고 생각하면 된다.

 

 

 

4.방화벽 설정

 

Client나 ServerB가 ServerA로 네임서버를 사용하기 위해선 방화벽(포트 및 서비스) 을 허용해야 한다.

 

 

방화벽 관련은 보통 실무에서 6버젼 이하에선 iptables 명령어를 많이 쓰나, 해당 명령어로 확인가능하다.

 

  iptables firewalld
Redhat/CentOS 6version 이하
rpm -qa |grep iptables-services
//패키지 설치되어있는지 확인
[전제조건 yum으로 설치해야 함]
yum -y install iptables-services

------------활성화-----------------
service enable iptables
service start iptables

비활성화
service firewalld disable
service firewalld stop
Redhat/CentOS 7 version 이상   기본(default)로 Active :활성화 되어있음

 

firewall-cmd 는 명령어로만 수행해서 확인하는 것과 firewall-config 는 GUI 구조에서 가능한 명령어이다.

firewall-cmd  vs firewall-config

 

 

 

 

5.캐싱 네임서버 작동하는지 확인하기

DNS 클라이언트 프로그램은 다음 3가지(dig,host,nslookup) 이다.

전제조건으로 bind-utils 패키지를 설치하면 사용할 수 있는 명령어이다.

 

 

5-1.dig명령어

 

dig [@네임서버의IP] [조회할URL]

dig[=Domain Information Groper] :

지정한 DNS서버의 설정 내용과 특정 도메인의 네임서버 설정내용을 확인하는 명령어.

nslookup, host 명령어와 마찬가지로 /etc/resolv.conf 파일에 정의되어있는 네임서버를 기본 네임서버로 사용함.

 

5-2. nslookup 명령어

여기서 설정해볼 것은 현재 ServerA의 DNS랑 G/W 가 192.168.111.2로 설정되어있지만, ServerA의 IP로 변경하면서 캐싱 전용 네임서버로 구축할 예정이다.

 

#nslookup

>server   //호스트정보의 서버 IP와 IP및 #port 정보가 나온다.

 

>server 192.168.111.100(구축할 ServerA의 IP)

 >www.nate.com   //

 

 

 

5-3. host 명령어

 

 

6.Server(B) 와 Client에서 /etc/resolv.conf 에서 해당 DNS 서버(=Server(A)의 IP=192.168.111.100)의 IP로 수정할 것!

 

client 와 Server(B)의 /etc/resolv.conf 에서 DNS serverA로 IP변경하기
nslookup으로 ServerA의 IP인지 확인 및 minimal install된 serverB에서 elinks설치 및 설정방법

serverB에서 elinks 명령어 수행후 화면 tui로도 활용가능하다.

ServerB에서의 elinks 활용

windows 10 client 의 DNS를 따로 server A의 IP(192.168.111.100)로 설정하자

 

1.powershell 또는 cmd 창(관리자 권한으로 실행)

>ipconfig로 네트워크 어댑터 및 IP 확인

>netsh interface ip set dns "네트워크어댑터" dhcp //자동으로 DNS 서버를 사용하도록 설정하기

 

'server & network > DNS 서버' 카테고리의 다른 글

DNS : 마스터 네임서버 구축  (0) 2021.09.20
DNS(Domain Name Server)란?  (0) 2021.09.18