본문 바로가기

네임서버

BIND(named) Error: ran out of space

반응형

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
728x90

해결 방법 방법

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

 

728x90
반응형