Nền tảng Mạng máy tính
16/17
Bài 16 / 17~9 phútPort, Socket & DNSMiễn phí… lượt xem

DNS record types & debug — A, CNAME, MX và dig

Các bản ghi DNS A, AAAA, CNAME, MX, TXT, NS làm gì; đọc resolv.conf và /etc/hosts; tra bằng dig và nslookup; chẩn đoán NXDOMAIN, SERVFAIL và chuỗi CNAME.

TL;DR: Một domain mang nhiều bản ghi (record), mỗi loại một vai trò: 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, tức ai được uỷ quyền trả lời cho cả zone). Mỗi record vẫn mang TTL và được cache như bài trước. 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, bạn thấy nhiều dòng khác nhau: A, CNAME, MX… Mỗi loại làm một việc. Khi một tên miền không phân giải được, biết lỗi ở đâu (domain sai, resolver hỏng, hay cache bẩn) mới là phần khó.

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. Analogy — danh bạ công ty

Tra một công ty trong danh bạ, bạn không nhận về một con số duy nhất mà cả một trang: địa chỉ văn phòng, phòng nhận thư, số lễ tân. Mỗi dòng trả lời một câu hỏi khác nhau, và người giao hàng chỉ cần địa chỉ, người gửi thư chỉ cần phòng thư. DNS record cũng vậy: cùng một tên miền, mỗi loại record là một dòng trong trang danh bạ đó, trả lời đúng một câu hỏi.

Danh bạ công tyDNS record
Địa chỉ văn phòngA (IPv4)
Địa chỉ văn phòng ghi theo chuẩn mớiAAAA (IPv6)
"Công ty X giờ đổi tên, tra tên mới"CNAME
Phòng nhận thưMX
Lễ tân được uỷ quyền trả lời về chi nhánhNS

Giờ xem từng dòng trong trang danh bạ đó ứng với record nào.

2. Các loại record thường gặp

RecordTrỏ tớiDùng để
AIPv4 (vd 93.184.216.34)tên miền → địa chỉ IPv4
AAAAIPv6tên miền → địa chỉ IPv6
CNAMEmột tên khácbí danh: www → example.com
MXmail server + ưu tiênđịnh tuyến email của domain
TXTchuỗi văn bảnxác thực domain (SPF, DKIM, verify)
NSauthoritative serverchỉ 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).

Thử ngẫmmột domain có A record nhưng không có MX. Gửi email tới contact@ domain đó thất bại — record nào đang thiếu, và trình duyệt truy cập domain đó có bị ảnh hưởng không?

3. Đọc dig — section ANSWER là chính

Bash
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:

Bash
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 là công cụ thứ hai, có sẵn cả trên Windows:

Bash
nslookup example.com
# Server:         1.1.1.1
# Address:        1.1.1.1#53
#
# Non-authoritative answer:
# Name:   example.com
# Address: 93.184.216.34

Hai dòng đầu là resolver máy bạn đang hỏi. "Non-authoritative answer" nghĩa là câu trả lời do recursive resolver đó đưa (thường lấy từ cache của nó), không phải từ authoritative server của example.com; muốn câu trả lời gốc thì dig example.com NS rồi hỏi thẳng server đó bằng dig @a.iana-servers.net example.com. nslookup gọn nhưng ít chi tiết (không có TTL, không có status), nên dân debug thường ưu tiên dig. Resolver ở hai dòng đầu (Server: 1.1.1.1) đọc từ một file cấu hình trên máy bạn.

4. 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à search domain (tự thêm hậu tố cho tên ngắn).
  • /etc/hosts: bảng tĩnh IP tên được tra trước DNS. Nhờ nó mà 127.0.0.1 localhost chạy không cần DNS, và nó cũng là cách ghi đè tạm một domain về IP tuỳ ý khi test.
Bash
cat /etc/resolv.conf     # nameserver 8.8.8.8 ...
cat /etc/hosts           # 127.0.0.1 localhost

Khi hai file này đúng chỗ mà tên vẫn không ra IP, dig nói lý do ở trường status.

5. Chẩn đoán lỗi phân giải — lỗi nằm ở đâu?

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ứngNghĩaHướng xử lý
status: NXDOMAINTên không tồn tạiSai chính tả domain / chưa đăng ký / sai search domain
status: SERVFAILResolver lỗi khi traResolver/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 NOERRORTên có nhưng không có record loại đang hỏiHỏ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 xem có ra IP không; nếu không, dig tên đọc status; rồi dig @1.1.1.1 tên để loại trừ resolver nội bộ; cuối cùng kiểm tra /etc/hosts và search domain.

Thử ngẫmđồng nghiệp báo domain sản phẩm mới trả NXDOMAIN trên máy họ nhưng bạn dig ra IP bình thường. Bước tiếp theo trong quy trình chẩn đoán ở trên là gì?

6. 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:

Chuỗi CNAME bốn hộp nối tiếp: www.shop.com là CNAME trỏ sang shop.com, shop.com là CNAME trỏ sang host.cdn.net, host.cdn.net có bản ghi A, ra IP cuối cùng 203.0.113.9 — mỗi mũi tên là một lần tra thêm

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.

7. Pitfall — hiểu nhầm thường gặp

❌ Nhầm 1: "NXDOMAIN và SERVFAIL như nhau." ✅ NXDOMAIN nghĩa là tên không tồn tại (lỗi phía dữ liệu/đánh máy). SERVFAIL nghĩa là 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.

8. 📚 Deep Dive — tài liệu gốc

📚 Spec & reference chính thức

Đọc khi muốn tới gốc record & debug:

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.

9. 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ị); +short gọn, @resolver chọn resolver, dig tên MX/NS tra theo loại. nslookup đơn giản hơn.
  • /etc/resolv.conf chọn resolver + search domain; /etc/hosts tra 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.

10. Tự kiểm tra

Tự kiểm tra
0/6 câu đã trả lời
  1. Q1
    Domain có A record đúng nhưng web load ra trang của công ty khác. Record nào đáng nghi trước tiên, và lệnh dig nào xác nhận?
  2. Q2
    Phân biệt NXDOMAIN và SERVFAIL — mỗi cái chỉ về vấn đề ở đâu và xử lý khác nhau ra sao?
  3. Q3
    Mộ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?
  4. Q4
    Bạn chạy dig example.com MX và ANSWER rỗng nhưng status là NOERROR. Có phải lỗi không?
  5. Q5
    Vì sao nên giữ chuỗi CNAME ngắn?
  6. Q6
    Mộ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ả?

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?

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

Module 3 — Tổng kết & cheat sheet