named-checkconf와 named-checkzone 명령어 사용 방법은 무엇인가요?
💡 요약 정리
- named-checkconf는 DNS 설정 파일의 문법 오류를 검사합니다.
- named-checkzone은 zone 파일의 문법 오류를 검사합니다.
- DNS 서버 재시작 전 필수적으로 사용하여 오류를 미리 확인해야 합니다.
- 오류 발견 시 정확한 라인 번호와 원인을 알려줍니다.
설치환경
- CentOS 5.x (64bit)
- bind-9.3.6-20.P1.el5_8.6
1. named-checkconf
개요
named-checkconf는 DNS 설정 시 설정 파일의 Syntax 에러를 점검해 주는 명령어입니다.
대상 파일
- BIND 9.3 이상:
/etc/named.rfc1912.zones - BIND 9.2 이하:
/etc/named.conf
사용 방법
named-checkconf [설정파일경로]
2. named-checkconf 실습
정상적인 설정 파일 검사
오류가 없으면 아무런 결과도 출력하지 않습니다.
[root@cafe24 src]# named-checkconf /etc/named.rfc1912.zones
[root@cafe24 src]#
결과:
- 출력 없음 = 문법 오류 없음
오류가 있는 설정 파일 검사
1단계: 의도적으로 오류 추가
설정 파일을 편집하여 잘못된 문법을 추가합니다.
[root@cafe24 src]# vi /etc/named.rfc1912.zones
설정 파일 내용:
-------------------------------------------------------------------------------------------------------------
zone "test.com" IN {
type master;
file "test.com.zone";
allow-update { none; };
};; # <--- 임의로 ";"를 추가하여 오류 발생
-------------------------------------------------------------------------------------------------------------
오류 내용:
};;→ 중복된 세미콜론- 올바른 형식:
};
2단계: 오류 검사 실행
[root@cafe24 src]# named-checkconf /etc/named.rfc1912.zones
/etc/named.rfc1912.zones:55: syntax error near ';' # <--- 55번 라인에 오류가 있음을 알려준다
[root@cafe24 src]#
결과 분석:
- 파일명:
/etc/named.rfc1912.zones - 라인 번호: 55
- 오류 내용:
syntax error near ';'(세미콜론 근처에 문법 오류)
3. named-checkzone
개요
named-checkzone은 zone 파일의 Syntax 에러를 점검해 주는 명령어입니다.
사용 방법
named-checkzone [zone이름] [zone파일경로]
매개변수:
- zone이름:
named.rfc1912.zones파일에 설정된 zone 이름 - zone파일경로: 실제 zone 파일의 전체 경로
4. named-checkzone 실습
정상적인 zone 파일 검사
[root@cafe24 src]#
[root@cafe24 src]# named-checkzone test.com /var/named/test.com.zone
zone test.com/IN: loaded serial 42
OK # <--- 오류가 없으면 OK
[root@cafe24 src]#
결과 분석:
loaded serial 42: zone 파일의 serial 번호 42를 읽음OK: 문법 오류 없음
오류가 있는 zone 파일 검사
1단계: 의도적으로 오류 추 가
zone 파일을 편집하여 잘못된 IP 주소를 추가합니다.
[root@cafe24 src]# vi /var/named/test.com.zone
zone 파일 내용:
----------------------------------------------------------------------------------------------------------------
$TTL 86400
@ IN SOA localhost. root.localhost. (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS localhost.
www IN A 123.123.123.123
mail IN A 111.111.111.1111 # <--- 임의로 IP에 1111로 오류를 표기하고 테스트
---------------------------------------------------------------------------------------------------------------
오류 내용:
111.111.111.1111→ 잘못된 IP 주소 (각 옥텟은 0-255 범위)- 올바른 형식:
111.111.111.111
2단계: 오류 검사 실행
[root@cafe24 src]#
[root@cafe24 src]#
[root@cafe24 src]# named-checkzone test.com /var/named/test.com.zone
dns_rdata_fromtext: /var/named/test.com.zone:10: near '111.111.111.1111': bad dotted quad # <--- 오류내용 출력
zone test.com/IN: loading master file /var/named/test.com.zone: bad dotted quad
[root@cafe24 src]#
결과 분석:
- 파일명:
/var/named/test.com.zone - 라인 번호: 10
- 오류 위치:
near '111.111.111.1111' - 오류 내용:
bad dotted quad(잘못된 IP 주소 형식)
5. 명령어 비교
| 항목 | named-checkconf | named-checkzone |
|---|---|---|
| 검사 대상 | 설정 파일 | zone 파일 |
| 검사 파일 | /etc/named.rfc1912.zones, /etc/named.conf | /var/named/*.zone |
| 주요 용도 | DNS 서버 설정 문법 검사 | zone 레코드 문법 검사 |
| 오류 시 출력 | 라인 번호 + 오류 내용 | 라인 번호 + 오류 내용 |
| 정상 시 출력 | 없음 (silent) | OK + serial 번호 |
6. 실전 활용
DNS 설정 변경 작업 흐름
권장 작업 순서:
# 1단계: 설정 파일 백업
[root@cafe24 ~]# cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.backup
[root@cafe24 ~]# cp /var/named/test.com.zone /var/named/test.com.zone.backup
# 2단계: 설정 파일 수정
[root@cafe24 ~]# vi /etc/named.rfc1912.zones
[root@cafe24 ~]# vi /var/named/test.com.zone
# 3단계: 설정 파일 문법 검사
[root@cafe24 ~]# named-checkconf /etc/named.rfc1912.zones
# 4단계: zone 파일 문법 검사
[root@cafe24 ~]# named-checkzone test.com /var/named/test.com.zone
# 5단계: 모든 검사 통과 시 서비스 재시작
[root@cafe24 ~]# service named restart
# 6단계: 서비스 확인
[root@cafe24 ~]# service named status
여러 zone 파일 일괄 검사
# 모든 zone 파일 검사
for zone in /var/named/*.zone; do
zonename=$(basename $zone .zone)
echo "Checking zone: $zonename"
named-checkzone $zonename $zone
done
7. 일반적인 오류 유형
named-checkconf 오류
1. 문법 오류
/etc/named.rfc1912.zones:10: syntax error near '{'
원인: 중괄호 누락 또는 잘못된 위치
2. 세미콜론 누락
/etc/named.rfc1912.zones:15: syntax error near '}'
원인: 라인 끝의 세미콜론(;) 누락
3. 파일 경로 오류
/etc/named.rfc1912.zones:20: open: /var/named/nosuchfile.zone: file not found
원인: 존재하지 않는 zone 파일 참조
named-checkzone 오류
1. IP 주소 형식 오류
bad dotted quad
원인: 잘못된 IP 주소 형식
2. SOA 레코드 오류
no TTL specified
원인: TTL 값 미지정
3. NS 레코드 없음
no NS records
원인: 네임서버 레코드 누락
4. CNAME 충돌
CNAME and other data
원인: CNAME과 다른 레코드 타입이 동일한 이름에 존재
8. 고급 옵션
named-checkconf 옵션
# 특정 zone만 검사
named-checkconf -z /etc/named.conf
# include 파일까지 검사
named-checkconf -p /etc/named.conf
# chroot 환경에서 검사
named-checkconf -t /var/named/chroot /etc/named.conf
named-checkzone 옵션
# 경고도 출력
named-checkzone -w test.com /var/named/test.com.zone
# 더 엄격한 검사
named-checkzone -i full test.com /var/named/test.com.zone
# 덤프 출력 (디버깅)
named-checkzone -D test.com /var/named/test.com.zone
9. 스크립트 활용
자동화 검사 스크립트
#!/bin/bash
# DNS 설정 파일 자동 검사 스크립트
echo "=== DNS Configuration Check ==="
# 1. 설정 파일 검사
echo "Checking main configuration..."
if named-checkconf /etc/named.conf; then
echo "✓ Configuration file OK"
else
echo "✗ Configuration file has errors"
exit 1
fi
# 2. 모든 zone 파일 검사
echo -e "\nChecking zone files..."
ZONES=$(grep "^zone" /etc/named.conf | awk '{print $2}' | tr -d '"')
for zone in $ZONES; do
zonefile=$(grep -A 5 "zone \"$zone\"" /etc/named.conf | grep "file" | awk '{print $2}' | tr -d '";')
if [ -f "/var/named/$zonefile" ]; then
echo -n "Checking $zone... "
if named-checkzone $zone /var/named/$zonefile > /dev/null; then
echo "OK"
else
echo "ERROR"
named-checkzone $zone /var/named/$zonefile
fi
fi
done
echo -e "\n=== Check Complete ==="
10. 문제 해결
"command not found" 오류
원인: bind-utils 패키지 미설치
해결 방법:
[root@cafe24 ~]# yum install bind-utils
"permission denied" 오류
원인: zone 파일 읽기 권한 없음
해결 방법:
[root@cafe24 ~]# chmod 644 /var/named/test.com.zone
[root@cafe24 ~]# chown named:named /var/named/test.com.zone
zone 파일 경로를 찾을 수 없음
원인: 상대 경로 사용
해결 방법:
# 잘못된 예
named-checkzone test.com test.com.zone
# 올바른 예
named-checkzone test.com /var/named/test.com.zone
11. 모범 사례
변경 전 항상 백업
# 타임스탬프 포함 백업
cp /etc/named.conf /etc/named.conf.$(date +%Y%m%d_%H%M%S)
cp /var/named/test.com.zone /var/named/test.com.zone.$(date +%Y%m%d_%H%M%S)
변경 후 즉시 검증
# 설정 변경 후 즉시 실행
vi /etc/named.conf && named-checkconf
vi /var/named/test.com.zone && named-checkzone test.com /var/named/test.com.zone
프로덕션 적용 전 테스트
# 개발 서버에서 먼저 테스트
# 문법 검사 통과 확인
# 실제 쿼리 테스트
nslookup www.test.com localhost
dig @localhost test.com
12. 관련 명령어
named-compilezone
zone 파일을 바이너리 형식으로 컴파일:
named-compilezone -f text -F raw -o test.com.raw test.com /var/named/test.com.zone
named-journalprint
journal 파일 내용 확인:
named-journalprint /var/named/test.com.zone.jnl
rndc
설정 리로드 및 상태 확인:
rndc reload
rndc status
rndc dumpdb
참고사항
- DNS 설정 변경 후 반드시 두 명령어로 검증하세요.
- 오류 발견 시 서비스 재시작 전에 수정해야 합니다.
- 프로덕션 환경에서는 변경 전 백업이 필수입니다.
- serial 번호는 zone 파일 변경 시마다 증가시켜야 합니다.
- named-checkzone 실행 시 zone 이름은 named.rfc1912.zones에 정의된 것과 정확히 일치해야 합니다.