네트워크 트러블슈팅 · DNS 조회 실전 · 실습
dig 로 DNS 캐내기
목표
dig 로 레코드 타입별 조회를 하고, TTL 과 네거티브 캐시를 읽고, getent 와 dig 의 답이 갈리는 지점을 직접 만들어 봅니다.
왜 중요한가
dig 출력은 status 와 flags 부터 읽어야 합니다. NXDOMAIN(이름 자체가 없음)과 NOERROR + ANSWER 0(이름은 있는데 그 타입만 없음)은 완전히 다른 상황이고 대응도 다릅니다. aa 플래그가 없으면 캐시에서 온 답이고, 그래서 TTL 이 줄어듭니다. 그리고 dig 는 /etc/hosts 를 보지 않으므로, 같은 이름에 대해 getent 와 서로 다른 답을 할 수 있습니다 — 그 차이가 곧 원인의 위치입니다.
단계
1. /root/dns 디렉터리를 만들고, /etc/resolv.conf 에서 nameserver 로 시작하는 줄만 /root/dns/nameserver.txt 로 저장하세요.
2. example.com 의 A 레코드 값만 /root/dns/a.txt 로 저장하세요. 파일에는 IPv4 주소가 최소 한 줄 있어야 합니다.
3. google.com 의 MX, NS, TXT 를 각각 /root/dns/mx.txt, /root/dns/ns.txt, /root/dns/txt.txt 로 저장하세요. 세 파일 모두 비어 있으면 안 됩니다.
4. example.com 의 답변 섹션만 출력해 /root/dns/ttl1.txt 로 저장하고, 5초 이상 기다린 뒤 같은 방법으로 /root/dns/ttl2.txt 를 만드세요. 두 번째 TTL 이 첫 번째보다 크면 안 됩니다.
5. 8.8.8.8 의 역방향 조회 결과를 /root/dns/ptr.txt 로 저장하세요.
6. labhub-does-not-exist-9137.example.com 을 조회해 전체 출력을 /root/dns/nxdomain.txt 로 저장하세요. 파일에 status: NXDOMAIN 과 SOA 레코드가 모두 들어 있어야 합니다.
7. /etc/hosts 에 10.77.0.1 www.example.com 을 추가한 뒤, getent hosts www.example.com 결과를 /root/dns/getent-www.txt 로, dig +short www.example.com 결과를 /root/dns/dig-www.txt 로 저장하세요. 두 결과는 서로 달라야 합니다.
8. /root/dns/report.txt 를 다음 5줄로 만드세요.NAMESERVERS=<1번 파일의 줄 수> / A_COUNT=<2번 파일의 줄 수> / PTR=<5번에서 얻은 이름, 끝의 점 제외> / HOSTS_WINS=<7번 getent 결과의 IP> / DNS_SAYS=<7번 dig 결과의 첫 번째 IP>
참고
dig +short,dig +noall +answer,dig -x <IP>,dig -t MX <이름>을 조합하면 이 실습의 대부분이 끝납니다.- 4번에서 TTL 은
+noall +answer출력의 두 번째 열입니다. - 6번에서 SOA 는 AUTHORITY 섹션에 나옵니다.
+noall +authority로 따로 볼 수도 있습니다. - 흔한 실수 1: 7번에서 hosts 에 넣은 IP 가 실제 DNS 응답과 같으면 이 단계의 의미가 없습니다. 사설 대역 주소를 쓰세요.
- 흔한 실수 2:
dig결과가 비어 있다면 그 타입의 레코드가 없는 것입니다.status를 확인해 NXDOMAIN 인지 NOERROR 인지 구분하세요.
단계 8개
- 리졸버 설정 읽기
- 정방향 조회
- 레코드 타입별 조회
- TTL 이 줄어드는 것 관찰
- 역방향 조회
- 없는 이름과 네거티브 캐시
- getent 와 dig 가 갈리는 지점
- 조회 종합 보고서