Domain Name SystemDNS
DNS(Domain Name System)는 사람이 읽을 수 있는 도메인 이름(예: google.com)을 컴퓨터가 통신에 사용하는 IP 주소로 변환하는 인터넷의 전화번호부다. 1983년 Paul Mockapetris가 설계했으며, 인터넷 모든 통신의 시작점이다.
DNS 조회 우선순위
실제 도메인 조회 시 다음 순서로 확인한다:
파밍(Pharming) 공격: hosts 파일을 변조해 정상 도메인 입력 시 악성 사이트로 유도. 우선순위 1순위를 악용.
DNS 동작 과정
재귀적 질의 vs 반복적 질의
| 항목 | 재귀적 질의 (Recursive) | 반복적 질의 (Iterative) |
|---|---|---|
| 주체 | 리졸버(Local DNS)가 대신 질의 | 클라이언트가 직접 단계별 질의 |
| 흐름 | 리졸버 → 루트 → TLD → 권한 DNS (내부 처리) | 클라이언트 → 루트 → TLD → 권한 DNS (각 단계 반환) |
| 특징 | 클라이언트가 최종 결과만 받음 | 각 단계에서 "다음에 물어볼 서버 주소"를 받음 |
| 주 사용 | 클라이언트 ↔ 리졸버 구간 | 리졸버 ↔ 루트/TLD DNS 구간 |
실제 동작: 클라이언트는 리졸버에 재귀적 질의를 보내고, 리졸버는 루트/TLD/권한 DNS에 반복적 질의를 수행한다.
DNS 레코드 유형
| 레코드 | 설명 | 예시 |
|---|---|---|
| A | 도메인 → IPv4 주소 | example.com → 93.184.216.34 |
| AAAA | 도메인 → IPv6 주소 | example.com → 2606:2800::1 |
| CNAME | 도메인 → 다른 도메인 | www.example.com → example.com |
| MX | 메일 서버 지정 | example.com → mail.example.com |
| NS | 권한 네임서버 지정 | example.com → ns1.example.com |
| TXT | 텍스트 데이터 | SPF, DKIM, 도메인 인증 |
| SOA | 영역의 권한 정보 | 마스터 서버, 갱신 주기 등 |
역방향 DNS 조회 (Reverse DNS Lookup)
일반 DNS가 도메인 → IP인 반면, Reverse DNS는 IP → 도메인명으로 변환한다.
- •
PTR 레코드 사용: in-addr.arpa 도메인 체계를 통해 IP 주소를 역순으로 매핑
- •
예: 93.184.216.34 → 34.216.184.93.in-addr.arpa → example.com
- •
활용: 스팸 필터링, 서버 신원 확인, 네트워크 디버깅
역방향 조회
nslookup 93.184.216.34 dig -x 93.184.216.34
DNS 계층 구조
TTL (Time to Live)
DNS 응답을 캐시에 유지하는 시간(초).
짧은 TTL → 변경이 빠르게 반영되지만 DNS 쿼리 증가.
DNS와 블록체인
탈중앙화 DNS 서비스가 등장하고 있다.
| 서비스 | 설명 |
|---|---|
| ENS (Ethereum Name Service) | .eth 도메인을 Ethereum 주소로 해석 |
| Unstoppable Domains | .crypto, .nft 등 블록체인 기반 도메인 |
| Handshake (HNS) | 루트 DNS의 탈중앙화 시도 |
alice.eth → 0xAbCd...1234 (Ethereum 지갑 주소)
DNS 보안 공격
DNS 스푸핑 (DNS Spoofing)
스니핑으로 DNS 질의를 감지한 후, 정상 응답보다 빠르게 조작된 IP가 담긴 가짜 응답을 전송하는 공격.
DNS 캐시 포이즈닝 (DNS Cache Poisoning)
DNS 서버의 캐시에 잘못된 IP 매핑을 주입하는 공격. 여러 사용자가 동시에 피해를 입는다.
- •원인: DNS Transaction ID와 소스 포트 번호가 예측 가능할 때 발생
- •대응: DNSSEC, 랜덤 소스 포트, 재귀 질의 제한
DNS 증폭 공격 (DNS Amplification DRDoS)
ANY 레코드 질의로 작은 요청에 큰 응답을 발생시켜 피해자에게 DDoS 트래픽을 유발.
- •공격자 → DNS 서버에 소스 IP를 피해자로 속인 ANY 질의
- •DNS 서버 → 피해자에게 대용량 응답 (증폭 비율 최대 70배)
DNS 보안 (DNSSEC)
DNS 응답의 위변조를 방지하기 위한 디지털 서명 확장.
Anycast DNS와 성능
Anycast: 전 세계 여러 서버가 동일한 IP 주소를 공유. 라우터가 자동으로 가장 가까운 서버로 연결.
| DNS 서비스 | IP | 제공사 | 특징 |
|---|---|---|---|
8.8.8.8 | 빠른 응답, Anycast | ||
1.1.1.1 | Cloudflare | Cloudflare | 프라이버시 중심, 최고 속도 |
9.9.9.9 | Quad9 | IBM | 악성 도메인 차단 |
208.67.222.222 | OpenDNS | Cisco | 콘텐츠 필터링 |
DNS 쿼리 성능 최적화
| 기법 | 설명 |
|---|---|
| DNS 프리페치 | <link rel="dns-prefetch" href="//api.example.com"> — 페이지 로드 전 미리 조회 |
| TTL 조정 | 안정적 서비스는 TTL을 높게(86400s) → 캐시 적중률 향상 |
| NSEC3 | DNSSEC에서 존재하지 않는 도메인 열거 방지 |
| 0-RTT DNS | DNS over HTTPS/QUIC으로 첫 요청 지연 감소 |
관련 개념
- •네트워크 — DNS가 동작하는 인터넷 환경
- •TCP/IP — DNS는 주로 UDP 53 포트 사용
- •UDP — DNS 쿼리의 기본 전송 프로토콜
- •HTTP/HTTPS — DNS로 IP를 얻은 뒤 HTTP 연결
- •SHA-256 — DNSSEC의 서명 알고리즘
DNS 진단 도구
| 도구 | 기능 | 예시 |
|---|---|---|
| nslookup | 가장 널리 쓰이는 DNS 조회 도구 | nslookup google.com |
| dig | 상세한 DNS 응답 확인 (nslookup 대체) | dig google.com A |
| host | 단순 정방향/역방향 조회 | host 8.8.8.8 |
| whois | 도메인 등록 정보 조회 | whois google.com |
| ipconfig /flushdns | Windows DNS 캐시 초기화 | — |
| resolvectl flush-caches | Linux DNS 캐시 초기화 | — |
존 전송 (Zone Transfer)
DNS 서버 간 존 데이터를 동기화하는 메커니즘. TCP 53번 포트 사용.
| 유형 | 설명 |
|---|---|
| AXFR (Full Zone Transfer) | 존 버전에 관계없이 전체 데이터 전송 |
| IXFR (Incremental Zone Transfer) | 변경된 부분만 전송 (버전 비교) |
보안: 존 전송은 허가된 보조 네임서버에만 허용해야 한다. 무제한 허용 시 존 데이터 전체 유출 위험.
DNS over HTTPS / TLS (DoH / DoT)
기존 DNS 질의는 평문(UDP 53) 전송 → 도청·변조 가능.
| 방식 | 포트 | 특징 |
|---|---|---|
| DoH (DNS over HTTPS) | 443 | HTTPS 트래픽에 숨어 필터링 우회 쉬움 |
| DoT (DNS over TLS) | 853 | 전용 포트로 구분 명확, ISP 필터링 가능 |
Chrome, Firefox, Windows 11 모두 DoH 기본 지원.
참고문헌
- •RFC 1034, 1035 — Domain Names (1987)
- •RFC 4033~4035 — DNSSEC
- •Mockapetris, P. (1987). Domain Names — Concepts and Facilities