Operations

Cách cấu hình DNS record A, CNAME, MX, TXT cho tên miền

Bạn cần cấu hình DNS cho tên miền của mình nhưng chưa rõ A, CNAME, MX, TXT record khác nhau thế nào và làm sao để thêm?

DNS (Domain Name System) là hệ thống dịch tên miền (ví dụ thuevps.vn) thành địa chỉ IP (103.xxx.xxx.xxx) để trình duyệt và các dịch vụ mạng có thể kết nối. Mỗi loại DNS record có một chức năng riêng: A record trỏ tên miền đến IP, CNAME tạo bí danh, MX định tuyến email, TXT lưu dữ liệu văn bản như SPF hay DKIM. Trong bài này, tôi sẽ hướng dẫn bạn cách tạo và kiểm tra bốn loại record này trên VPS Linux chạy BIND9, kèm các lệnh thực tế để verify ngay sau khi cấu hình.

Yêu cầu trước khi bắt đầu

  • Một VPS chạy Ubuntu 24.04 LTS hoặc Debian 12 với quyền sudo (hoặc root). Bạn có thể thuê VPS Việt Nam với IPv4 riêng và full root để thực hành.
  • Tên miền đã đăng ký (ví dụ example.com) và quyền quản lý nameserver hoặc zone file.
  • Hiểu biết cơ bản về dòng lệnh Linux và khái niệm DNS.

Trước khi cấu hình: tại sao bạn cần từng loại DNS record?

Mỗi loại record giải quyết một bài toán khác nhau. A record là loại cơ bản nhất: nó trỏ một tên miền (hoặc subdomain) đến một địa chỉ IPv4. Nếu bạn muốn website của mình hiển thị khi gõ example.com, bạn cần một A record trỏ đến IP của server. CNAME record ánh xạ một tên miền sang một tên miền khác. Ví dụ, bạn có thể tạo CNAME cho www.example.com trỏ đến example.com, giúp quản lý tập trung. MX record chỉ định máy chủ nhận email cho tên miền. Nếu bạn dùng email server riêng, bạn cần MX record trỏ đến đúng hostname. TXT record lưu thông tin văn bản, thường dùng cho SPF, DKIM, DMARC để xác thực email. Nếu thiếu TXT record, email của bạn có thể vào spam hoặc bị từ chối.

Bước 1: Kiểm tra tình trạng DNS hiện tại của tên miền

Trước khi thêm record, bạn cần biết cấu hình đang có. Dùng lệnh dig để tra cứu nhanh:

dig example.com A +short
dig www.example.com CNAME +short
dig example.com MX +short
dig example.com TXT +short

Output hiện tại sẽ giúp bạn xác nhận record chưa tồn tại hoặc cần sửa. Nếu chưa có dig, cài đặt:

sudo apt update && sudo apt install dnsutils -y

Bước 2: Thêm A record - trỏ tên miền đến địa chỉ IP

Giả sử bạn đang chạy BIND9 làm DNS server. File zone cho tên miền example.com nằm ở /etc/bind/db.example.com. Mở file:

sudo nano /etc/bind/db.example.com

Thêm dòng A record:

@    IN    A    103.xxx.xxx.xxx
www  IN    A    103.xxx.xxx.xxx

Trong đó @ đại diện cho tên miền gốc (example.com), www là subdomain. Thay 103.xxx.xxx.xxx bằng IP thật của VPS bạn. Sau đó tăng serial number (dòng hàng đầu trong zone) và kiểm tra cú pháp:

sudo named-checkzone example.com /etc/bind/db.example.com
# Nếu không báo lỗi, output hiện "OK"

Reload BIND:

sudo systemctl reload bind9

Verify: Dùng dig:

dig @localhost example.com A +short
# Output: 103.xxx.xxx.xxx

Lưu ý: Nếu bạn đang dùng nameserver của nhà cung cấp (như Cloudflare, DigitalOcean), hãy thao tác qua giao diện quản lý DNS của họ thay vì sửa file local.

Bước 3: Thêm CNAME record - tạo bí danh cho tên miền

CNAME record giúp bạn trỏ một subdomain đến một tên miền khác mà không cần IP cứng. Trong file zone, thêm dòng:

ftp  IN    CNAME    @
mail IN    CNAME    @

Dòng trên nghĩa là: khi ai đó gõ ftp.example.com, DNS sẽ chuyển hướng đến example.com (bản ghi A). Kiểm tra cú pháp và reload:

sudo named-checkzone example.com /etc/bind/db.example.com
sudo systemctl reload bind9

Verify:

dig @localhost ftp.example.com CNAME +short
# Output: example.com.

Cảnh báo: Một tên miền có CNAME record không thể có bất kỳ record nào khác (A, MX, TXT) trên cùng tên đó. Luật DNS cấm điều này. Nếu bạn cần nhiều loại record, đừng dùng CNAME, hãy dùng A record trực tiếp.

Bước 4: Thêm MX record - định tuyến email cho tên miền

MX record chỉ định máy chủ nào sẽ nhận email gửi đến @example.com. Mỗi MX record có một priority (ưu tiên). Số càng nhỏ thì ưu tiên càng cao. Thêm vào file zone:

@    IN    MX    10    mail.example.com.
@    IN    MX    20    backup-mail.example.com.

Lưu ý dấu chấm cuối cùng: tên đầy đủ (FQDN). Record đầu tiên có priority 10 (cao nhất) trỏ đến mail.example.com, record thứ hai priority 20 dự phòng. Bạn cần thêm A record cho mail.example.com trước khi MX hoạt động:

mail IN    A    103.xxx.xxx.xxx

Kiểm tra và reload:

sudo named-checkzone example.com /etc/bind/db.example.com
sudo systemctl reload bind9

Verify:

dig @localhost example.com MX +short
# Output: 10 mail.example.com.
#         20 backup-mail.example.com.

Bước 5: Thêm TXT record - xác thực email và hơn thế nữa

TXT record thường chứa các chuỗi SPF, DKIM, DMARC để chống giả mạo email. Ví dụ thêm SPF record cho phép server của bạn gửi email:

@    IN    TXT    "v=spf1 ip4:103.xxx.xxx.xxx include:_spf.google.com ~all"

Hoặc thêm DKIM key (thường dài):

default._domainkey  IN  TXT  "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ..."

Lưu ý: TXT record không hỗ trợ ngắt dòng. Toàn bộ nội dung phải nằm trong một cặp dấu ngoặc kép. Nếu dài, bạn có thể chia thành nhiều chuỗi nối tiếp, nhưng với BIND, dùng cú pháp: "chuỗi 1" "chuỗi 2" (tự động nối). Kiểm tra cú pháp và reload:

sudo named-checkzone example.com /etc/bind/db.example.com
sudo systemctl reload bind9

Verify:

dig @localhost example.com TXT +short
# Output: "v=spf1 ip4:103.xxx.xxx.xxx include:_spf.google.com ~all"

Bảng tóm tắt các loại DNS record thông dụng

Loại recordChức năngVí dụ value
ATrỏ tên miền đến IPv4103.xxx.xxx.xxx
CNAMEBí danh cho tên miền khácexample.com.
MXMáy chủ nhận emailmail.example.com. (priority 10)
TXTVăn bản xác thực"v=spf1 include:_spf.google.com ~all"

Xử lý lỗi thường gặp khi cấu hình DNS

Lỗi: "dns_rdata_fromtext: expected at line ..."

Nguyên nhân: Sai cú pháp, thường do thiếu dấu chấm cuối FQDN hoặc thiếu dấu ngoặc trong TXT record. Kiểm tra lại file zone bằng named-checkzone sẽ chỉ ra dòng lỗi.

Lỗi: record không xuất hiện sau khi reload

Kiểm tra serial number: hãy tăng nó lên mỗi lần sửa zone (ví dụ đang 20240101 thành 20240102). Nếu serial không đổi, BIND coi zone không thay đổi và không load lại. Dùng journalctl -u bind9 -n 20 | tail để xem log lỗi.

Lỗi: MX record không hoạt động, email gửi đến bị trả lại

Đảm bảo hostname trong MX record có A record tương ứng trỏ đến IP thật. Kiểm tra bằng dig +short mail.example.com A. Nếu không có A record, MX record sẽ vô dụng.

Câu hỏi thường gặp

Tôi có cần CNAME record cho www không?

Có, hầu hết website đều tạo CNAME www.example.com trỏ đến example.com để đồng bộ. Nhưng hãy nhớ CNAME không thể đi cùng A record trên cùng tên.

Muốn trỏ website đến IP mới, tôi sửa record nào?

Sửa A record của tên miền gốc và của www (nếu có A thay vì CNAME). Sau đó đợi TTL cũ (thường 300-3600 giây) hết hiệu lực.

TXT record có ảnh hưởng đến tốc độ website không?

Không, TXT record chỉ được dùng khi có truy vấn đặc thù (SPF, DKIM). Nó không ảnh hưởng đến việc resolve A record thông thường.

Có thể quản lý DNS record qua web UI không?

Được. Nếu bạn dùng thuê VPS có control panel (DirectAdmin, Plesk), bạn có thể thêm record qua giao diện web mà không cần sửa file BIND thủ công.

Thời gian để DNS record có hiệu lực là bao lâu?

Phụ thuộc vào TTL (Time-To-Live) của record. Mặc định thường 300 giây (5 phút) đến 3600 giây (1 giờ). Sau khi đổi, DNS cache từ ISP và resolver cần thời gian để cập nhật.

Làm sao để kiểm tra record đã lan truyền toàn cầu?

Dùng các công cụ online như dnschecker.org, whatsmydns.net. Nhập tên miền và chọn loại record, tool sẽ query từ nhiều điểm trên thế giới.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.