OS/CentOS

DNS Cache 구성하기

Dragonfog.net 2023. 11. 17. 10:37
반응형

 

### DNS Cache 구성 하기

테스트 OS : CentOS 7

 

# Bind 설치 하기
yum install caching-nameserver

 

# named.conf 설정하기
vi /etc/named.conf

options {
....
        listen-on port 53 { any; };  --> 외부에서도 접속해야 하니 any로 설정
//      listen-on-v6 port 53 { none; };  --> ipv6 사용하지 않을거라 주석 처리
        allow-query     { any; };  --> DNS 질의를 위해서 any 혹은 대역으로 설정
        dnssec-validation no;

...};

zone "." IN {
        type hint;      -> cache로 사용 할거기에 type을 hint로 설정
        file "named.ca";
};


여기 까지만 설정하고 named 데몬 기동

# named 데몬 기동 및 테스트
# named 기동
systemctl start named
systemctl enable named

 

# DNS 질의 TEST
dig @127.0.0.1 naver.com

 

아래와 같은 결과가 나오면 정상

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 <<>> @127.0.0.1 naver.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58373
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;naver.com.                     IN      A

;; ANSWER SECTION:
naver.com.              300     IN      A       223.130.200.107
naver.com.              300     IN      A       223.130.200.104
naver.com.              300     IN      A       223.130.195.95
naver.com.              300     IN      A       223.130.195.200

;; AUTHORITY SECTION:
naver.com.              172800  IN      NS      ns2.naver.com.
naver.com.              172800  IN      NS      ns1.naver.com.

;; ADDITIONAL SECTION:
ns2.naver.com.          172800  IN      A       125.209.249.6
ns1.naver.com.          172800  IN      A       125.209.248.6

;; Query time: 417 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 금 11월 10 13:05:56 KST 2023
;; MSG SIZE  rcvd: 170

 

 

## resolve.conf 수정
vi /etc/resolve.conf
nameserver 127.0.0.1

 

## dns root 도메인  관리
. root 도메인은 유동적으로 변하기에 월1회는 업데이트 해주는게 좋음
wget ftp://ftp.rs.internic.net/domain/db.cache -O /var/named/named.ca && rndc reload


-- script
#!/bin/bash
TEMP_DIR=/app/script/tmp
TARGET_DIR=/var/named
BACKUP_DIR=/app/script/backup
DATE=`date +%Y%m%d-%H%M`


#wget ftp://ftp.rs.internic.net/domain/db.cache -O /var/named/named.ca && rndc reload

/usr/bin/wget ftp://ftp.rs.internic.net/domain/db.cache -O ${TEMP_DIR}/named.ca
/usr/bin/chown -R named.named ${TEMP_DIR}/named.ca

/usr/bin/cp ${TARGET_DIR}/named.ca ${BACKUP_DIR}/named.ca_${DATE}
/usr/bin/cp ${TEMP_DIR}/named.ca ${TARGET_DIR}/named.ca

/usr/sbin/rndc reload


-- cron (매월 10일 11시에 업데이트)
0 11 10 * * /app/script/dns_update.sh > /app/script/log/dns.log

 

## DNS 로깅 및 통계
options {
  ....

        zone-statistics yes;   --> 추가

...

};

# 로깅 옵션 추가
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };

        category notify { zone_transfer_log; };
        category xfer-in { zone_transfer_log; };
        category xfer-out { zone_transfer_log; };
        channel zone_transfer_log {
                file "/var/log/named/transfer.log" versions 10 size 50m;
                print-time yes;
                print-category yes;
                print-severity yes;
                severity info;
        };

        channel query_log {
                file "/var/log/named/queries.log" versions 10 size 50m;
                severity        dynamic;
                print-severity  yes;
                print-time      yes;
                print-category  yes;
        };

        category queries {
                query_log;
        };
};


## statistics 설정 (any로 오픈)
statistics-channels { 
        inet 0.0.0.0 port 8080 ; 
};


OR
## 특정 호스트만 접근 허용
statistics-channels {
  inet 127.0.0.1 port 8053 allow { 127.0.0.1; };
};

 

## Prometheus 모니터링 참고
https://github.com/prometheus-community/bind_exporter/releases

반응형