DNS 서버 설정
(보안상 자세한 캡쳐와 아이피, 계정 등 정보는 자체 필터링(삭제))
설정 환경
1차 DNS
IP : xxx.xxx.xxx.1
장비 : HP proliant DL380 G4
HDD RAID 구성 : RAID 5
운영체제 : Ubuntu Server 16.04 (LTS) - 2021년 4월까지 지원
2차 DNS
IP : xxx.xxx.xxx.2
장비 : HP proliant DL380 G4
HDD RAID 구성 : RAID 5
운영체제 : Ubuntu Server 16.04 (LTS) - 2021년 4월까지 지원
기본 명령어
네임서버 시작/종료/재시작 : DNS 서비스 자체에 문제가 있을 때 사용하는 명령어
# service bind9 start
# service bind9 stop
# service bind9 restart
네임서버 환경설정 파일 점검
service bind9 restart 를 하기 전에 미리 실행해봐야 하는 명령어임.
# named-checkconf [설정_파일_이름]
ex) # named-checkconf /etc/bind/named.conf
ex) # named-checkconf /etc/bind/named.conf.options
ex) # named-checkconf /etc/bind/named.conf.local
ex) # named-checkconf /etc/bind/named.conf.default-zones
# namd-checkzone [점검_도메인] [zone_파일_이름]
ex) # named-checkzone domain.net /etc/nameserver/domain.zone
ex) # named-checkzone domain.net /etc/nameserver/domain.rev
ex) # named-checkzone domain.net /etc/nameserver/domain-sub.zone
네임서버 시작 시 쌓이는 로그 확인 ( 오류를 확인할 수 있음 )
파일 : /var/log/syslog
service bind9 restart 를 한 이후 아래 명령어를 실행하면 오류가 발생했을 경우 어떤 오류인지 확인이 가능하다.
# tail -n 40 /var/log/syslog
# vim /var/log/syslog
rndc 명령어 : 네임서버 데몬 컨트롤 유틸리티
# rndc stop
service bind9 stop 와 같다.
# rndc status
네임서버의 각종 정보를 확인할 수 있는 명령어
# rndc reload [zone_파일_이름]
zone 파일을 다시 로드하는 명령어
bind9 서비스는 종료하지 않으면서 zone 파일들 만을 재 로드하여 zone 파일들의 변경사항들에 대해서만 bind9 서비스에 적용시킬 수 있다.
# rndc flush
캐시된 정보를 제거하는 명령어
네임서버 변경 후 캐시된 정보들을 flushing 해주는 것인데 실시간으로 네임서버를 조회할 때 유용하게 사용된다.
진행 수순
zone, rev 파일 등 설정 파일 백업 준비
bind 설치
/etc/resolv.conf 파일 수정
/etc/hosts 파일 수정
/etc/bind/ 폴더 내의 설정 파일 수정
보안/권한 관련 apparmor 설정
1차(Master), 2차(Slave) DNS 설정
진행 방법
FTP 로 /home/{username}/ 에 nameserver.tar.gz 파일을 서버에 업로드
압축 해제
$ sudo tar -zxvf nameserver.tar.gz
/home/{username}/etc/nameserver/ 디렉토리를 /etc/nameserver/ 디렉토리로 복사
$ sudo cp -r nameserver/ /etc/nameserver/
불필요한 백업 파일 정리 (연도날짜형식으로 되어있는 파일 제거)
$ find | egrep '[0-9]{8}' 로 삭제할 파일/디렉토리 찾기
$ find | egrep '[0-9]{8}' | sudo xargs rm -r
/etc/bind/named.conf.local 파일에 zone 을 추가한다.
$ sudo vi /etc/bind/named.conf.local
/etc/resolv.conf 파일에 nameserver 127.0.0.1 을 추가한다.
vim /etc/resolv.conf
/etc/hosts 파일에 xxx.xxx.xxx.2(현재 구축하고 있는 DNS 외부 공인 아이피) 를 추가한다.
$ sudo vim /etc/hosts
/etc/bind/named.conf.options 파일 수정 : listen-on port {any}; 추가
$ sudo vim /etc/bind/named.conf.options
설정 파일 내용
/etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind9/README.Debian.gz for information on the // structure of BIND configuration files in Debian, *BEFORE* you customize // this configuration file. // // If you are just adding zones, please do that in /etc/bind/named.conf.local options { check-names master ignore; check-names slave ignore; check-names response ignore; allow-recursion {any;}; allow-transfer { xxx.xxx.xxx.2; }; }; //include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; // include "/etc/bind/named.conf.default-zones"; // Logging Configuration logging { channel systemlog { file "/etc/bind/log/named.log"; severity debug; print-time yes; }; channel audit_log { file "/etc/bind/log/security.log"; severity debug; print-time yes; }; channel xfer_log { file "/etc/bind/log/xfer.log"; severity debug; print-time yes; }; category default {systemlog; }; category security {audit_log; }; category config { systemlog; }; category xfer-in { xfer_log; }; category xfer-out { xfer_log; }; category notify { audit_log; }; category update { audit_log; }; category queries { audit_log; }; category lame-servers { audit_log; }; }; |
/etc/bind/named.conf.local
2차 DNS일 경우에는 아래 설정에서 “type master” 를 “type slave”로 변경하고
각 zone 블럭 내에 masters { xxx.xxx.xxx.1; }; 을 추가해준다.
// // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918"; zone "." { type hint; file "/etc/bind/db.root"; }; zone "domain.net" IN { type master; file "/etc/nameserver/domain.zone"; check-names ignore; }; zone "domain.kr" IN { type master; file "/etc/nameserver/domain_kr.zone"; check-names ignore; }; // Reverse zone configuration zone "xxx.xxx.xxx.in-addr.arpa" { // C클래스, B클래스, A클래스 순으로 작성 type master; file "/etc/nameserver/domain.rev"; check-names ignore; }; // Loopback zone configuration zone "0.0.127.in-addr.arpa" { type master; file "/etc/nameserver/localhost.rev"; check-names ignore;}; |
/etc/bind/named.conf.options (사용 안 함)
options { directory "/var/cache/bind"; listen-on port 53 {any;}; // check-names master ignore; // check-names slave ignore; // check-names response ignore; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. // forwarders { // 0.0.0.0; // }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; }; |
/etc/apparmor.d/local/usr.sbin.named
# Site-specific additions and overrides for usr.sbin.named. # For more details, please see /etc/apparmor.d/local/README. /etc/nameserver/* rw, |
이 코드는 프로필을 reload 해줘야 적용된다.
Command to reload this profile : apparmor_parser -r /etc/apparmor.d/usr.sbin.named
Reload Zone
rndc reload
rndc reload zone파일명
Trouble Shooting
문제 발생시 도움이 되는 명령어들
<설정 파일 확인> 아래 설정 파일의 이상 유무 확인은 named-checkconf 명령어로 확인한다.
named-checkconf /etc/bind/named.conf
named-checkconf /etc/bind/named.conf.local
named-checkconf /etc/bind/named.conf.options
아무 메시지가 없으면 이상이 없는 것이다.
<zone 파일 확인> 아래 zone 파일의 이상 유무 확인은 named-checkzone 명령어로 확인한다.
named-checkzone [DOMAIN_ADDR] [ZONE_FILE]
뜻 : [DOMAIN_ADDR] 에 대한 [ZONE_FILE] 을 체크한다.
named-checkzone domain.net /etc/nameserver/domain.zone
named-checkzone domain.net /etc/nameserver/domain_kr.zone
<Log 확인> service bind9 restart 를 실행한 후 /var/log/syslog 를 확인한다.
설정 파일들을 체크 한 후 service bind9 restart 명령어로 DNS 서비스를 재시작한다.
/var/log/syslog 파일에 bind9 가 종료되고 실행되는 로그가 쌓이고 있으니 이 파일을 확인하면 된다.
tail -n 30 /var/log/syslog
vim /var/log/syslog
운영중에는 service bind9 restart 명령어 사용을 자제하고 rndc reload 명령어를 사용하는 것이 좋다.
DNS 설정하면서 발생했던 문제들
bad owner name
named-checkzone domain.net /etc/nameserver/domain.zone 명령어를 실행했을 때 bad owner name (check-names) 라는 오류가 발생하였다.
이는 BIND 서버가 기본적으로 RFC 1123을 준수하지 않는 이름들이 리소스 레코드에 포함하는지를 검사하고 그러한 경우에는 마스터 영역을 로드하지 않기 때문에 발생하는데, RFC 1123에는 언더스코어( _ ) 문자를 허용하지 않고 있기 때문에 발생했다.
/etc/nameserver/domain.zone 파일의 레코드 중 abc_de 라는 이름에 언더스코어가 포함되어 있어서 문제가 되었음.
해결 방법
/etc/bind/named.conf 파일의 options 블럭에 check-names master ignore; 를 추가해주면 된다.
그래도 해결되지 않을 경우 /etc/bind/named.conf.local 파일에 추가한 zone 블럭마다 check-names ignore; 를 추가해준다.
가장 좋은 방법은 레코드의 이름 중에 언더스코어를 포함하고 있으면 포함하지 않는 것으로 바꾸는 것이겠다.
no TTL specified
오류라기 보다는 zone 파일 최상단에 TTL 부분이 주석처리 되어 있으므로 TTL이 명시되지 않았음을 알려주며 SOA 에서 설정한 MINTTL을 사용하겠다는 메세지가 있었음
해결 방법
해당 메시지를 일으키는 zone 파일에서 TTL 을 명시해줌.
NS 'domain.net' has no address records (A or AAAA) 에러
네임서버 domain.net 가 주소 레코드 (클래스 A 또는 AAAA)가 없어서 발생하는 에러이다.
해결 방법
해당 메시지를 일으키는 파일에서 주소 레코드를 추가한다.
참고 자료 및 진행 순서에 대한 스크린샷
DNS 설정 확인 명령어
$ dig @[DNS_ADDRESS] [DOMAIN]
$ nslookup [DOMAIN] [DNS_ADDRESS]