BIND(named) Error: ran out of space
문제 개요
BIND DNS 서버에서 Zone 파일을 검사하거나 로딩할 때 다음과 같은 오류가 발생할 수 있다.
named-checkzone bioscbyun.com bioscbyun.com.zone
dns_rdata_fromtext: bioscbyun.com.zone:13: ran out of space
zone bioscbyun.com/IN: loading from master file bioscbyun.com.zone failed: ran out of space
이 오류는 Zone 파일 내 특정 레코드의 데이터 길이가 DNS 규격에서 허용하는 최대 크기를 초과했을 때 발생한다.
문제 발생 Zone 파일
문제가 발생한 Zone 파일 예시는 다음과 같다.
cat bioscbyun.com.zone
; Created by Internet Connection SNG 961081821
$TTL 10m
@ IN SOA scbyun.com. root.scbyun.com. (
2009102710 ;
7200 ; refresh = 7200, 21600 (2 hours)
1800 ; retry = 3600 (1 hour)
302400 ; expire = 302400 (3 days 12 hours)
43200) ; minimum ttl = 1800 (30 mins)
IN NS ns.scbyun.com.
IN A 192.168.0.100
IN TXT "v=spf1 ip4:xxx.xxx.xxx.xx ip4:xx.xx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:v ip4:xxx.xxx.xxx.xx -all"
IN MX 10 mail.scbyun.com.
www IN A 192.168.0.101
위 Zone 파일에서 TXT(SPF) 레코드의 길이가 과도하게 길어 DNS 규격을 초과하면서 오류가 발생한다.
오류 원인 분석
DNS에서는 레코드 데이터에 대해 다음과 같은 크기 제한(Size Limit)이 존재한다.
- Label 길이 63 bytes 이하
- Domain Name 전체 길이 255 bytes 이하
- TTL signed 32bit 정수
- UDP DNS 메시지 512 bytes 이하
특히 TXT 레코드 문자열은 255 bytes 제한이 있으며 SPF 레코드가 길어질 경우 이를 초과할 수 있다.
현재 Zone 파일에서는 SPF 레코드에 IP 주소가 과도하게 나열되어 TXT 레코드 크기 제한을 초과하면서 다음 오류가 발생한다.
dns_rdata_fromtext: ran out of space
해결 방법 방법
TXT 레코드 분할
DNS에서는 긴 TXT 레코드를 여러 문자열로 나누어 작성할 수 있다.
IN TXT (
"v=spf1 ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx"
"ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx"
"ip4:xxx.xxx.xxx.xx ip4:xxx.xxx.xxx.xx -all"
)
이 방식은 DNS RFC 규격에서 허용되는 방법이며 실제 응답 시 하나의 문자열로 결합된다.
SPF 구조 단순화
SPF 레코드가 지나치게 길어질 경우 다음과 같은 방법을 사용할 수 있다.
- include: 사용
- 서브 SPF 레코드 분리
- 사용하지 않는 IP 제거
IN TXT "v=spf1 include:_spf.example.com -all"
수정 후 검증
Zone 파일 수정 후 다음 명령으로 오류 여부를 확인한다.
named-checkzone bioscbyun.com bioscbyun.com.zone
zone bioscbyun.com/IN: loaded serial 2009102710
OK
참고URL
- bind9 docs : Can I have a TXT or SPF record longer than 255 characters?
- aws : Route 53에서 255자를 초과하는 SPF 또는 TXT 레코드를 구성하려면 어떻게 해야 하나요?
- akamai community : Set up TXT or SPF record longer than 255 bytes in Edge DNS
- rfc1035 : DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION
'네임서버' 카테고리의 다른 글
| named hint(named.cache) 파일을 생성하는 방법 (0) | 2013.09.07 |
|---|---|
| BIND rndc(Remote Name Daemon Control) 유틸리티 (0) | 2013.09.07 |
| Powered by DNS (0) | 2013.09.07 |
| 원도우 DNS 이벤트 ID 4000 (0) | 2013.09.04 |
| bind zone 파일 IP 변경 스크립트 (0) | 2013.09.04 |