DNS 작동 원리: 재귀적 해석과 스텁 리졸버
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
시스템 관리자 및 DevOps 엔지니어 (DNS 설정, 서비스 발견, 네트워크 구성 관련 지식 필요)
핵심 요약
- 스텁 리졸버(Stub Resolver)는 OS 내부의 DNS 쿼리 전달자로, 재귀 리졸버(Recursive Resolver)에 요청을 전달함
- 재귀 리졸버는 루트 서버 → TLD 서버 → 권한 서버 순서로 완전한 DNS 조회를 수행하고, 결과를 캐싱하여 재사용
- Consul은 서비스 발견을 위해 DNS 인터페이스를 제공하며,
web.service.consul
과 같은 형식의 A record/SRV record을 통해 서비스 IP/포트 정보 제공
섹션별 세부 요약
1. DNS 처리 흐름
- 스텁 리졸버가 사용자 입력을 기반으로 재귀 리졸버에 쿼리 전달
- 재귀 리졸버는 캐시된 결과가 없을 경우 루트 서버 → TLD 서버 → 권한 서버 순서로 조회 수행
- 캐싱 메커니즘으로 동일한 쿼리에 대해 반복적인 서버 접근 방지
2. Unix/Linux DNS 설정
- /etc/resolv.conf 파일에서
nameserver
와search
옵션으로 DNS 서버 및 검색 도메인 설정 - 예시:
```bash
nameserver 8.8.8.8
search example.com
```
- systemd-resolved 사용 시
/etc/resolv.conf
는127.0.0.53
로 가리킴 (로컬 리졸버 경로)
3. systemd-resolved 설정
DNS=
및Domains=
설정으로 외부 DNS 서버와 검색 도메인 지정- 예시:
```ini
[Resolve]
DNS=1.1.1.1
Domains=~consul
```
~
접두사로 루트 도메인(Route-only Domain) 지정 → 해당 도메인 쿼리만 특정 DNS 서버로 전달
4. Consul DNS 인터페이스
- 서비스 등록 시 A record 및 SRV record 제공
```bash
dig web.service.consul @127.0.0.1 -p 8600
```
- 예시 응답:
```
web.service.consul. 0 IN A 10.0.0.1
web.service.consul. 0 IN A 10.0.0.2
```
- SRV record을 통해 서비스 포트 정보도 제공 (예:
_web._tcp.service.consul
)
결론
- systemd-resolved를 사용하여 DNS 캐싱과 서비스 발견을 효율적으로 관리
- Consul의 DNS 인터페이스를 활용해
web.service.consul
형식으로 서비스 IP/포트 자동 조회 가능 - SRV record을 통해 서비스 포트 정보까지 확인 가능하며, 네트워크 구성 시
~
접두사로 도메인 전용 DNS 경로 설정 권장