나비 DNS 서버
프로덕션급 DNS 서버, Rust로 다시 쓰다
C/C++ DNS 서버의 메모리 취약점을 원천 차단하는 차세대 DNS 솔루션입니다. CDB 및 MySQL 듀얼 백엔드, DNSSEC 서명 검증, DNS-over-TLS, 웹 관리 패널과 REST API를 제공합니다.
23종
레코드 타입
13개
RFC 준수
18종
실행 도구
0.065ms
응답 지연
왜 나비 DNS 서버인가요?
20년간 검증된 DNS 아키텍처를 Rust로 완전히 재구현했습니다. C/C++ 기반 DNS 서버의 보안 취약점을 원천 차단하면서도 기존 인프라와의 완벽한 호환성을 유지합니다.
메모리 안전
Rust의 소유권 시스템으로 버퍼 오버플로우, Use-After-Free, 데이터 레이스를 컴파일 타임에 차단합니다. BIND9에서 매년 보고되는 CVE 취약점의 70% 이상이 메모리 관련입니다.
고성능 비동기 엔진
SO_REUSEPORT 기반 멀티소켓 아키텍처로 커널 수준에서 패킷을 분산합니다. CPU 코어 x2 워커 스레드가 독립 소켓으로 동작하여 단일 소켓 병목이 없습니다.
듀얼 백엔드
읽기 최적화 CDB(O(1) 조회)와 실시간 동적 관리용 MySQL을 동시 지원합니다. 런타임에 BACKEND 환경변수로 전환 가능하며, 하이브리드 구성도 가능합니다.
13개 RFC 표준 준수
RFC 1034/1035 코어 프로토콜부터 RFC 9156 QNAME Minimization까지, DNS Flag Day 2019/2020을 포함한 최신 권고안을 모두 준수합니다.
DNSSEC + DNS Cookies
RSA-SHA256/512, ECDSA-P256/P384, Ed25519 서명 검증과 HMAC-SHA256 기반 DNS Cookies(RFC 7873)로 스푸핑과 캐시 포이즈닝을 차단합니다.
Lock-Free 메트릭
AtomicU64 기반 17개 메트릭 카운터가 핫패스에서 잠금 없이 동작합니다. Unix 소켓으로 실시간 모니터링이 가능하며, 쿼리 처리 성능에 영향을 주지 않습니다.
REST API + 웹 관리
API 키 인증 기반 REST API로 프로그래밍 방식의 레코드 관리가 가능합니다. CSRF 보호가 적용된 웹 패널과 함께 관리자 승인 워크플로우를 제공합니다.
무중단 리로드
CDB 파일 감시를 통한 핫 리로드와 POSIX atomic rename으로 데이터 일관성을 보장합니다. 서비스 재시작 없이 DNS 레코드 변경이 즉시 반영됩니다.
구성 요소
전체 DNS 생태계를 아우르는 18종의 특화 바이너리를 제공합니다. 모놀리식 구조 대신 역할별 분리 아키텍처로 최소 메모리와 최대 보안을 달성합니다.
Authoritative Server
nabidns-auth
자사 도메인을 외부망에 게시하기 위한 권한 네임서버입니다. SO_REUSEPORT 멀티소켓 아키텍처로 커널 수준의 패킷 분산을 수행하며, CDB와 MySQL 듀얼 백엔드를 지원합니다.
Recursive Resolver
nabidns-cache
QNAME Minimization(RFC 9156)과 0x20 Case Randomization으로 프라이버시를 보호하면서 재귀 질의를 수행합니다. BTreeMap 기반 캐시와 네거티브 캐싱(RFC 2308)으로 응답 속도를 최적화합니다.
DNS-over-TLS Server
nabidns-tls
rustls 기반의 메모리 안전한 TLS 1.3 암호화 DNS 서버입니다. 포트 853에서 최대 64개 동시 TLS 연결을 처리하며, OpenSSL의 C 기반 취약점 위험 없이 안전한 DNS 통신을 보장합니다.
Zone Tools & Utilities
nabidns-data, nabidns-edit, nabidns-import 외 12종
CDB 컴파일러, 존 편집기, MySQL 임포터, 존 전송(AXFR) 서버, RBL 서버, 리버스 DNS 월, 라운드 로빈 로드밸런서 등 특화된 도구 모음입니다. 각 도구가 단일 책임 원칙을 따릅니다.
왜 분리 아키텍처인가?
BIND9와 같은 모놀리식 DNS 서버는 사용하지 않는 기능의 코드도 메모리에 상주합니다. 나비 DNS는 역할별로 분리된 경량 바이너리를 제공하여 공격 표면을 최소화하고, 각 서버가 필요한 권한만 가지도록 최소 권한 원칙을 구현합니다. 권한 DNS만 필요하면 nabidns-auth만, 캐싱만 필요하면 nabidns-cache만 배포하면 됩니다.
주요 기능
23종의 DNS 레코드 타입, 13개 RFC 표준, 7계층 보안 아키텍처 — 엔터프라이즈급 DNS 인프라를 위한 모든 기능을 제공합니다.
레코드 타입 (23종)
- A, AAAA, MX, CNAME, TXT, NS, PTR
- SRV, SOA, CAA, HINFO, RP, NAPTR
- SSHFP, TLSA, DS, DNSKEY, RRSIG
- NSEC, NSEC3, NSEC3PARAM
- HTTPS, SVCB 최신 레코드 지원
듀얼 백엔드
- CDB: O(1) 해시 조회, 원자적 교체
- MySQL: 커넥션 풀링 (2~10개)
- MySQL: 5초 로컬 캐시로 DB 부하 감소
- 런타임 백엔드 전환 (환경변수)
- InnoDB + UTF8MB4 자동 스키마 생성
보안 (7계층)
- Rust 메모리 안전 (CVE 원천 차단)
- DNSSEC: 5종 알고리즘 서명 검증
- DNS Cookies: HMAC-SHA256 인증
- RRL: IP당 응답 속도 제한
- ACL: IPv4/IPv6 CIDR 접근 제어
- chroot + setuid 권한 분리
- 0x20 Case Randomization
프로토콜
- EDNS0: 1232바이트 (Flag Day 2020)
- UDP: SO_REUSEPORT 멀티소켓
- TCP: 멀티스레드 연결 풀링
- DNS-over-TLS: rustls 포트 853
- AXFR: 존 전송 지원
- EDE: 확장 DNS 오류 코드 (RFC 8914)
운영 도구 (18종)
- nabidns-auth: 권한 DNS 서버
- nabidns-cache: 캐싱 리졸버
- nabidns-tls: DNS-over-TLS 서버
- nabidns-xfr: 존 전송 (AXFR)
- nabidns-rbl: 실시간 블랙홀 리스트
- nabidns-data: 존 데이터 컴파일러
- nabidns-ip/txt/mx/name: 쿼리 도구
관리 및 모니터링
- 웹 관리 패널 (PHP, Bootstrap)
- REST API (JSON, API 키 인증)
- 17개 실시간 메트릭 (Lock-Free)
- TAI64N 구조화 로그
- 사용자 관리 + 승인 워크플로우
- CSRF 보호, bcrypt 비밀번호 해싱
7,851
Rust 코드 라인
87
자동화 테스트
18
실행 바이너리
0.065ms
평균 응답 지연
보안 아키텍처 심층 분석
DNS 서버는 인터넷 인프라의 최전선입니다. 나비 DNS는 7개 계층의 방어 체계로 기존 C/C++ DNS 서버에서 발생하는 보안 취약점을 구조적으로 차단합니다.
컴파일 타임 메모리 안전성
Rust Ownership SystemRust의 소유권·차용·수명 시스템이 컴파일 단계에서 메모리 취약점을 원천 차단합니다. 런타임 비용 없이 메모리 안전을 보장하는 유일한 시스템 프로그래밍 언어입니다.
나비 DNS가 차단하는 취약점 유형:
DNSSEC 서명 검증
RFC 4033 / 4034 / 40355종의 암호화 알고리즘으로 DNS 응답의 무결성과 진위를 검증합니다. DS 레코드를 통한 신뢰 체인(Chain of Trust) 검증과 RRSIG 시간 유효성 검사를 수행합니다.
지원 알고리즘:
DNS Cookies 인증
RFC 7873HMAC-SHA256 기반 서버 쿠키로 각 클라이언트를 암호학적으로 인증합니다. IP 스푸핑 기반의 캐시 포이즈닝과 증폭 공격을 효과적으로 차단합니다.
쿠키 구조:
Client Cookie: 8바이트 (클라이언트 생성)
Server Cookie: 16바이트 (클라이언트 IP + 타임스탬프 + HMAC)
상수 시간 비교로 타이밍 공격 방어
DDoS 다중 방어
RRL + ACL + TCP 보호응답 속도 제한(RRL), IP/CIDR 기반 접근 제어(ACL), TCP Slow Loris 방어를 통해 다양한 유형의 DDoS 공격을 동시에 방어합니다.
방어 수치:
RRL: IP당 QPS 임계값 기반 속도 제한
ACL: IPv4/IPv6 CIDR 프리픽스 매칭
TCP: IP당 최대 8 연결 / 전체 최대 256 연결
패킷: 섹션당 최대 256 레코드 제한
권한 분리 및 격리
chroot + setuid + setgid시작 직후 3단계 권한 축소(chroot → setgid → setuid)를 수행합니다. 설정된 UID/GID가 실제 적용되었는지 검증하며, 실패 시 즉시 중단합니다. RLIMIT_DATA로 메모리 사용량도 제한합니다.
격리 순서:
1. chroot() — 파일시스템 접근 제한
2. setgid() — 그룹 권한 축소
3. setuid() — 사용자 권한 축소
4. 검증 — 실제 UID/GID 확인
암호학적 안티스푸핑
CSPRNG + 0x20 RandomizationOS의 getrandom(2) 시스콜을 직접 호출하여 트랜잭션 ID와 소스 포트를 암호학적으로 안전하게 생성합니다. 쿼리 이름의 대소문자를 무작위로 변환(0x20 Bit)하여 스푸핑을 추가로 방어합니다.
암호 라이브러리:
ring — Let's Encrypt가 사용하는 검증된 라이브러리
rustls — 메모리 안전한 TLS (OpenSSL 대체)
getrandom — 파일 디스크립터/뮤텍스 없는 CSPRNG
C/C++ DNS 서버의 현실
BIND9는 지난 5년간 100건 이상의 CVE가 보고되었으며, 이 중 대다수가 메모리 관련 취약점입니다. PowerDNS, Knot DNS 역시 C/C++ 특유의 메모리 취약점에서 자유롭지 않습니다. 나비 DNS는 Rust의 컴파일 타임 안전성으로 이러한 취약점 범주 자체를 제거합니다.
0
메모리 취약점
가능성
다른 DNS 서버와 상세 비교
주요 오픈소스 DNS 서버 4종과의 기술적 비교입니다. 나비 DNS는 최신 시스템 프로그래밍 언어 Rust의 장점을 활용하여 기존 솔루션이 해결하지 못한 보안·성능·운영 문제를 근본적으로 해결합니다.
| 기능 및 특징 |
나비 DNS
|
BIND 9 | PowerDNS | Knot DNS | CoreDNS |
|---|---|---|---|---|---|
| 기본 정보 | |||||
| 구현 언어 | Rust | C | C++ | C | Go |
| 코드 규모 | ~8,000 라인 | ~500,000 라인 | ~200,000 라인 | ~100,000 라인 | ~50,000 라인 |
| 라이선스 | Commercial | MPL 2.0 | GPL v2 | GPL v3 | Apache 2.0 |
| 보안 | |||||
| 메모리 안전성 | verified 컴파일 타임 보장 | 없음 (C 언어) | 없음 (C++) | 없음 (C 언어) | GC 기반 (Go) |
| DNSSEC | check_circle 5종 알고리즘 | 지원 | 지원 | 지원 | 플러그인 |
| DNS Cookies (RFC 7873) | check_circle HMAC-SHA256 | 지원 | 미지원 | 지원 | 미지원 |
| 응답 속도 제한 (RRL) | check_circle 내장 | 내장 | Lua 스크립트 | 내장 | 플러그인 |
| ACL (IP/CIDR) | check_circle IPv4+IPv6 | 지원 | 지원 | 지원 | 플러그인 |
| 권한 분리 (chroot) | check_circle 3단계 격리 | 수동 설정 | 수동 설정 | 수동 설정 | 미지원 |
| TLS 라이브러리 | verified rustls (안전) | OpenSSL | OpenSSL / GnuTLS | GnuTLS | Go TLS |
| CVE 발생 빈도 | verified 구조적 차단 | 연간 10~20건 | 연간 3~5건 | 연간 2~4건 | 연간 1~3건 |
| 성능 | |||||
| 비동기 I/O | check_circle SO_REUSEPORT | 스레드 풀 | 스레드 풀 | epoll 기반 | 고루틴 |
| 메트릭 수집 오버헤드 | verified Lock-Free | Mutex 기반 | Mutex 기반 | Mutex 기반 | Mutex 기반 |
| 캐시 아키텍처 | check_circle Arc + BTreeMap | RBT 기반 | 패킷 캐시 | 슬랩 할당 | 플러그인 |
| GC 없는 실행 | verified 제로 GC | GC 없음 | GC 없음 | GC 없음 | GC 일시정지 발생 |
| DNS-over-TLS | check_circle 내장 (853) | 내장 | dnsdist | 내장 | 플러그인 |
| 백엔드 & 데이터 | |||||
| CDB (Constant DB) | check_circle 네이티브 | 미지원 | 미지원 | 미지원 | 미지원 |
| MySQL / MariaDB | check_circle 커넥션 풀 | 미지원 | 네이티브 | 미지원 | 플러그인 |
| 원자적 데이터 갱신 | verified POSIX rename | rndc reload | API | knotc reload | 재시작 |
| 존 전송 (AXFR) | check_circle 지원 | AXFR/IXFR | AXFR/IXFR | AXFR/IXFR | 플러그인 |
| 운영 & 관리 | |||||
| 웹 관리 패널 | verified 내장 | 없음 | 별도 설치 | 없음 | 없음 |
| REST API | check_circle JSON + API Key | 없음 | 내장 | 없음 | 없음 |
| 사용자 관리 | verified 역할 기반 | 없음 | 없음 | 없음 | 없음 |
| 실시간 메트릭 | check_circle 17개 카운터 | 통계 채널 | 내장 | 내장 | Prometheus |
| 최소 메모리 | 512MB | 2GB | 1GB | 512MB | 512MB |
vs BIND9
BIND9는 50만 라인의 C 코드로 연간 10~20건의 CVE가 보고됩니다. 나비 DNS는 8천 라인의 Rust 코드로 메모리 취약점 범주 자체를 제거하며, BIND9에 없는 웹 관리 패널과 REST API를 기본 제공합니다. 코드 규모가 1/60 수준이라 보안 감사와 유지보수가 훨씬 용이합니다.
vs PowerDNS
PowerDNS는 풍부한 백엔드를 지원하지만 C++의 메모리 위험성을 가지고 있고 DNS Cookies를 지원하지 않습니다. 나비 DNS는 CDB+MySQL 듀얼 백엔드로 PowerDNS의 유연성을 확보하면서, Rust의 메모리 안전성과 Lock-Free 메트릭으로 더 높은 성능을 달성합니다.
vs CoreDNS
CoreDNS는 Go 언어의 GC(가비지 컬렉터)로 인해 예측할 수 없는 지연 시간이 발생합니다. 나비 DNS는 GC가 없는 Rust로 일관된 응답 지연을 보장합니다. 또한 CoreDNS에 없는 CDB 백엔드, 내장 웹 관리 패널, 사용자 관리, chroot 권한 분리를 기본 제공합니다.
이런 환경에 적합합니다
금융, 공공, 통신, 호스팅 등 높은 보안과 안정성이 요구되는 환경에서 나비 DNS의 기술적 우위가 빛납니다.
도메인 호스팅 사업자
수천 개 도메인의 실시간 관리와 대량 쿼리 처리가 필요한 호스팅 인프라에 최적입니다.
- ✓ MySQL 백엔드로 고객별 실시간 레코드 관리
- ✓ REST API로 자동화 시스템 연동
- ✓ 웹 패널로 고객 셀프서비스 제공
보안 중시 기업
금융, 공공기관 등 보안 규정이 엄격한 환경에서 메모리 안전한 DNS를 운영할 수 있습니다.
- ✓ Rust 메모리 안전으로 CVE 원천 차단
- ✓ chroot + setuid 3단계 권한 분리
- ✓ DNSSEC + DNS Cookies 완전 지원
레거시 DNS 마이그레이션
기존 DNS 환경에서 데이터 변경 없이 고성능 Rust 엔진으로 즉시 전환할 수 있습니다.
- ✓ Tinydns 호환 존 데이터 포맷
- ✓ nabidns-import로 자동 데이터 이관
- ✓ CDB 파일 형식 완벽 호환
통신사 / ISP
대량의 재귀 쿼리를 처리하는 ISP 환경에서 캐싱 리졸버와 RBL을 활용할 수 있습니다.
- ✓ Lock-Free 메트릭으로 성능 저하 없는 모니터링
- ✓ RRL + ACL로 DDoS 증폭 공격 방어
- ✓ DNS-over-TLS로 가입자 프라이버시 보호
DevOps / IaC 환경
API 기반 인프라 자동화 파이프라인에 DNS 관리를 통합할 수 있습니다.
- ✓ REST API로 CI/CD 파이프라인 연동
- ✓ systemd 네이티브 서비스 관리
- ✓ 환경변수 기반 설정 (12-Factor)
교육 / 연구 기관
소규모 인프라에서도 최소 리소스로 엔터프라이즈급 DNS를 운영할 수 있습니다.
- ✓ 싱글 코어 + 512MB RAM으로 동작
- ✓ 8천 라인의 감사 가능한 코드베이스
- ✓ 87개 자동화 테스트로 신뢰성 검증
Technical Specifications
terminal 시스템 요구사항
극도의 효율성을 추구하여 최소한의 리소스로 동작합니다.