DNS record types & debug — A, CNAME, MX và dig
Các loại bản ghi DNS (A, AAAA, CNAME, MX, TXT, NS) và vai trò từng cái, cách đọc resolv.conf và /etc/hosts, dùng dig/nslookup để tra, và chẩn đoán lỗi NXDOMAIN/SERVFAIL. Kèm CNAME chaining và cờ dig thường dùng.
TL;DR: Một domain không chỉ có một IP — nó có nhiều bản ghi (record) với vai trò khác nhau: A (tên → IPv4), AAAA (IPv6), CNAME (bí danh trỏ tên khác), MX (mail server), TXT (xác thực/cấu hình), NS (authoritative server). dig và nslookup là công cụ tra; đọc section ANSWER của dig là chính. Khi tên không phân giải được: NXDOMAIN (không tồn tại), SERVFAIL (resolver lỗi), hoặc kết quả rỗng. Máy chọn resolver theo /etc/resolv.conf, và /etc/hosts ghi đè DNS.
Chạy dig google.com MX hay dig github.com và bạn thấy không chỉ một IP, mà nhiều dòng — A, CNAME, MX… Mỗi loại làm một việc. Và khi một tên miền không phân giải được, làm sao biết lỗi ở đâu — domain sai, resolver hỏng, hay cache bẩn?
Bài này là phần "thực chiến" của DNS: đọc các loại record, dùng dig/nslookup, và chẩn đoán lỗi phân giải tên.
1. Các loại record thường gặp
| Record | Trỏ tới | Dùng để |
|---|---|---|
| A | IPv4 (vd 93.184.216.34) | tên miền → địa chỉ IPv4 |
| AAAA | IPv6 | tên miền → địa chỉ IPv6 |
| CNAME | một tên khác | bí danh: www → example.com |
| MX | mail server + ưu tiên | định tuyến email của domain |
| TXT | chuỗi văn bản | xác thực domain (SPF, DKIM, verify) |
| NS | authoritative server | chỉ ai phụ trách domain |
A/AAAA là cái bạn gặp nhiều nhất (trình duyệt cần IP). CNAME hay dùng để trỏ subdomain về một dịch vụ (vd trỏ app.bạn.com về một host của nhà cung cấp).
2. Đọc dig — section ANSWER là chính
dig example.com
# ;; ANSWER SECTION:
# example.com. 3600 IN A 93.184.216.34
# ^TTL ^record ^gia tri
Mỗi dòng ANSWER: tên TTL class loại giá trị. Vài cách dùng nhanh:
dig example.com +short # chi gia tri (gon)
dig example.com MX # tra record loai MX
dig example.com NS # ai la authoritative
dig @1.1.1.1 example.com # hoi resolver cu the (Cloudflare)
nslookup example.com cho kết quả tương tự, đơn giản hơn nhưng ít chi tiết. Dân debug thường ưu tiên dig.
3. resolv.conf & /etc/hosts
Máy quyết định hỏi resolver nào và tên nào bỏ qua DNS:
/etc/resolv.conf: liệt kênameserver(recursive resolver máy sẽ hỏi) vàsearchdomain (tự thêm hậu tố cho tên ngắn)./etc/hosts: bảng tĩnhIP tênđược tra trước DNS. Đây là lý do127.0.0.1 localhosthoạt động, và là cách ghi đè tạm một domain về IP tuỳ ý khi test.
cat /etc/resolv.conf # nameserver 8.8.8.8 ...
cat /etc/hosts # 127.0.0.1 localhost
4. Chẩn đoán lỗi phân giải
Khi một tên không ra IP, thông điệp dig cho biết lý do (trường status):
| Triệu chứng | Nghĩa | Hướng xử lý |
|---|---|---|
status: NXDOMAIN | Tên không tồn tại | Sai chính tả domain / chưa đăng ký / sai search domain |
status: SERVFAIL | Resolver lỗi khi tra | Resolver/authoritative trục trặc, hoặc DNSSEC (cơ chế ký số xác thực bản ghi DNS) không xác minh được; thử resolver khác |
ANSWER rỗng nhưng NOERROR | Tên có nhưng không có record loại đang hỏi | Hỏi đúng loại (vd domain không có MX) |
| Phân giải sai/cũ | Cache còn bản cũ | Chờ TTL hết, hoặc test resolver khác @1.1.1.1 |
Quy trình: dig tên +short (ra IP không?) → nếu lỗi, dig tên xem status → thử dig @1.1.1.1 tên (loại trừ resolver nội bộ) → kiểm tra /etc/hosts và search domain.
5. CNAME chaining — coi chừng vòng và tầng
CNAME trỏ tên này sang tên khác; resolver phải tra tiếp tên đích:
flowchart LR
A["www.shop.com<br/>(CNAME)"] --> B["shop.com<br/>(CNAME)"]
B --> C["host.cdn.net<br/>(A record)"]
C --> D["IP cuoi cung"]Mỗi tầng CNAME là một bước tra thêm (chậm hơn) và nếu cấu hình sai có thể tạo vòng lặp hoặc trỏ tới tên không có A record. Giữ chuỗi CNAME ngắn.
6. Pitfall — hiểu nhầm thường gặp
❌ Nhầm 1: "NXDOMAIN và SERVFAIL như nhau."
✅ NXDOMAIN = tên không tồn tại (lỗi phía dữ liệu/đánh máy). SERVFAIL = resolver không tra được (lỗi phía hệ thống/cấu hình). Hướng xử lý khác hẳn nhau.
❌ Nhầm 2: "/etc/hosts không liên quan, mọi tên đều qua DNS."
✅ /etc/hosts được tra trước DNS. Một dòng sai/cũ ở đó khiến domain trỏ nhầm dù DNS đúng — một "bẫy" debug kinh điển. Luôn kiểm tra /etc/hosts khi một tên phân giải lạ.
❌ Nhầm 3: "Domain nào cũng có record MX/TXT."
✅ Record là tuỳ chọn theo loại. ANSWER rỗng với NOERROR khi hỏi MX chỉ nghĩa domain đó không cấu hình mail — không phải lỗi. Hỏi đúng loại bạn cần.
7. 📚 Deep Dive — tài liệu gốc
Đọc khi muốn tới gốc record & debug:
- RFC 1035 — Domain Names: Implementation — định nghĩa các record type (A, NS, CNAME, MX, TXT…).
- RFC 3596 — DNS Extensions for IPv6 (AAAA) — record AAAA.
- RFC 2181 — Clarifications to the DNS Specification — quy tắc tinh tế (TTL, CNAME).
Ghi chú: dig là công cụ debug DNS chuẩn của dân vận hành — thuộc vài cờ (+short, +trace, @resolver, MX/NS) là đủ xử lý phần lớn sự cố tên miền.
8. Tóm tắt
- Một domain có nhiều record: A/AAAA (IP), CNAME (bí danh), MX (mail), TXT (xác thực), NS (authoritative).
digđọc ở ANSWER section (tên TTL class loại giá trị);+shortgọn,@resolverchọn resolver,dig tên MX/NStra theo loại.nslookupđơn giản hơn./etc/resolv.confchọn resolver + search domain;/etc/hoststra trước DNS (ghi đè).- Debug theo
status: NXDOMAIN = tên không tồn tại; SERVFAIL = resolver lỗi; ANSWER rỗng + NOERROR = không có record loại đó; sai/cũ = cache. - CNAME chaining thêm bước tra và rủi ro vòng lặp — giữ ngắn.
9. Tự kiểm tra
Q1A, CNAME và MX record khác nhau ở chỗ trỏ tới cái gì và dùng để làm gì?▸
- A: trỏ tên miền → IPv4 (cái trình duyệt cần để kết nối).
- CNAME: bí danh, trỏ tên này → một tên khác (vd
www.shop.com→shop.com); resolver phải tra tiếp tên đích. - MX: trỏ tới mail server của domain kèm độ ưu tiên — dùng để định tuyến email, không liên quan web.
Q2Phân biệt NXDOMAIN và SERVFAIL — mỗi cái chỉ về vấn đề ở đâu và xử lý khác nhau ra sao?▸
dig @1.1.1.1) để xem do resolver nội bộ hay do chính domain.Q3Một domain phân giải ra IP sai dù bạn chắc DNS đã đúng. Chỗ nào nên kiểm tra đầu tiên, và vì sao?▸
@1.1.1.1). Luôn loại trừ /etc/hosts khi một tên phân giải "lạ" so với kỳ vọng.Q4Bạn chạy `dig example.com MX` và ANSWER rỗng nhưng status là NOERROR. Có phải lỗi không?▸
A; muốn authoritative thì hỏi NS.Q5Vì sao nên giữ chuỗi CNAME ngắn?▸
Q6Một domain phân giải lỗi trên máy bạn. Vì sao chạy `dig @1.1.1.1 tên` lại giúp khoanh vùng nguyên nhân, và bạn suy ra gì từ kết quả?▸
dig @1.1.1.1 tên ép hỏi một recursive resolver khác (Cloudflare) thay vì resolver mặc định trong /etc/resolv.conf. Nếu qua 1.1.1.1 mà ra IP đúng, thì lỗi nằm ở resolver nội bộ của bạn (cấu hình sai, cache bẩn, hoặc mạng nội bộ chặn). Nếu 1.1.1.1 cũng trả NXDOMAIN/SERVFAIL, vấn đề ở chính domain (chưa đăng ký, authoritative hỏng) chứ không phải máy bạn. Đây là bước "loại trừ" kinh điển: đổi resolver để tách lỗi phía client khỏi lỗi phía dữ liệu.Bài tiếp theo: Module 3 — Tổng kết & cheat sheet
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên