캐싱 (전용) 네임서버=캐싱 (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 서버 구축 방법
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 내용 수정하기
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로 수정할 것!
serverB에서 elinks 명령어 수행후 화면 tui로도 활용가능하다.
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 |