Bạn vừa đổi hosting hoặc trỏ tên miền sang máy chủ mới, nhưng trình duyệt vẫn hiện đúng trang cũ. Lời khuyên đầu tiên hay nghe được là “thử flush DNS đi”, và nhiều người làm theo như một nghi thức mà không rõ vì sao lúc thì hết lỗi ngay, lúc lại vô dụng. […]
Bạn vừa đổi hosting hoặc trỏ tên miền sang máy chủ mới, nhưng trình duyệt vẫn hiện đúng trang cũ. Lời khuyên đầu tiên hay nghe được là “thử flush DNS đi”, và nhiều người làm theo như một nghi thức mà không rõ vì sao lúc thì hết lỗi ngay, lúc lại vô dụng.
Flush DNS chỉ xóa cache ở đúng một tầng trong tổng cộng năm tầng lưu bản ghi DNS, từ trình duyệt, hệ điều hành, router, đến máy chủ phân giải của nhà mạng. Gõ đúng lệnh mà vẫn thấy trang cũ thường không phải do bạn sai thao tác. Nguyên nhân là bản ghi cũ đang kẹt ở một tầng khác ngoài tầm bạn vừa xóa.
Bài này giúp bạn nắm được ba điều:
DNS (Domain Name System) là hệ thống dịch tên miền, ví dụ tenten.vn, thành địa chỉ IP mà máy tính dùng để kết nối tới đúng máy chủ. Việc tra cứu này tốn thời gian, nên mỗi thiết bị lưu tạm kết quả vào DNS cache (bộ nhớ đệm lưu bản ghi DNS gần nhất). Nhờ vậy, lần truy cập sau bạn chỉ cần đọc từ bộ nhớ đệm thay vì hỏi lại máy chủ DNS, nên trang tải nhanh hơn.
Không chỉ máy tính giữ cache. Bốn nơi sau đều lưu bản ghi DNS riêng, độc lập với nhau:
Đây là điểm quyết định toàn bộ phần sau của bài: khi bạn xóa cache ở một chỗ, các chỗ khác không tự động được xóa theo.
Mỗi bản ghi DNS còn có TTL (Time To Live, thời gian sống): hết TTL, cache tự hết hạn và thiết bị bắt buộc phải hỏi lại. TTL phổ biến từ vài phút đến vài giờ tùy nhà cung cấp DNS cấu hình. Chi tiết này quay lại quan trọng khi bạn vừa đổi hosting hay tên miền.
Flush DNS là thao tác xóa sạch các bản ghi DNS đang lưu tạm trên một thiết bị, buộc thiết bị đó hỏi lại máy chủ DNS để lấy thông tin mới nhất ở lần truy cập kế tiếp. Chỉ vậy thôi.
Flush DNS không làm được ba điều mà nhiều lời khuyên truyền miệng vẫn gán cho nó:
Flush DNS chỉ xóa một cuốn sổ tay tạm thời. Nó không chạm vào bất cứ thứ gì ở tầng mạng hay tầng máy chủ.
Hình dung giống việc xóa danh bạ cũ trong điện thoại: lần sau gọi lại, máy phải hỏi lại số mới thay vì tự động quay số cũ đã đổi chủ. Xóa danh bạ không làm điện thoại chạy nhanh hơn, nó chỉ đảm bảo bạn không gọi nhầm người.
Vì flush chỉ xóa cache, nó chỉ giúp khi vấn đề thật sự nằm ở cache, không phải ở nơi khác trong chuỗi phân giải tên miền. Bạn nên flush khi rơi vào một trong các tình huống sau:
Nhưng có bốn tình huống flush hoàn toàn vô ích, và biết trước giúp bạn khỏi loay hoay sai hướng. Một trong số đó liên quan đến propagation, tức thời gian để bản ghi DNS mới lan ra toàn bộ hệ thống máy chủ DNS trên thế giới:
|
Triệu chứng |
Flush DNS có giúp? |
Việc bạn nên làm |
|
Server thật sự sập hoặc tên miền hết hạn |
Không |
Bạn kiểm tra trạng thái hosting/tên miền, không phải cache |
|
Đặt sai máy chủ DNS trong cấu hình mạng |
Không |
Bạn đổi sang DNS công cộng (1.1.1.1, 8.8.8.8) trong cài đặt mạng |
|
Trình duyệt hiện giao diện cũ (ảnh, CSS) chứ không phải lỗi truy cập |
Một phần |
Bạn nhấn Ctrl+F5 hoặc xóa cache trình duyệt, không phải cache DNS |
|
Vừa đổi hosting/DNS nhưng propagation toàn cầu chưa xong |
Không |
Bạn chờ hết TTL, xem chi tiết ở phần propagation bên dưới |
Bảng trên là bộ lọc quan trọng nhất trước khi bạn mở terminal. Flush DNS là bước rẻ, an toàn và đáng thử đầu tiên khi bạn nghi ngờ cache. Nhưng biết trước nó không sửa được gì ngoài cache giúp bạn tránh lãng phí thời gian gõ đi gõ lại một lệnh vô hại nhưng vô dụng.

Nếu lỗi của bạn thuộc nhóm “nên flush” ở trên, đây là lệnh chính theo từng hệ điều hành. Mỗi phần dưới đây độc lập, bạn chỉ cần đọc đúng phần của thiết bị mình đang dùng.

Bạn mở Command Prompt (gõ cmd ở ô tìm kiếm menu Start), nên chọn Run as administrator để tránh lỗi quyền truy cập. Sau đó gõ lệnh:
ipconfig /flushdns
Flush thành công sẽ báo dòng “Successfully flushed the DNS Resolver Cache.” Ngoài lệnh chính, bạn có thể cần thêm vài lệnh liên quan sau:
ipconfig /displaydns: bạn dùng lệnh này để xem cache hiện tại trước khi xóa.ipconfig /registerdns: bạn chạy lệnh này để đăng ký lại bản ghi DNS của máy.Clear-DnsClientCache: đây là lệnh tương đương nếu bạn quen dùng PowerShell thay vì Command Prompt.Các bản Windows cũ hơn như XP và 7 dùng chung cú pháp ipconfig /flushdns, nên bạn không cần cài thêm công cụ ngoài nào khác.
Bạn mở Terminal qua Spotlight (gõ Terminal), sau đó chạy lệnh chuẩn cho các bản macOS hiện đại, từ Big Sur trở về sau:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Hệ thống sẽ hỏi mật khẩu máy, và việc không có thông báo xác nhận sau khi chạy là bình thường, không phải dấu hiệu lỗi. Các phiên bản macOS cũ hơn như Yosemite dùng lệnh khác (discoveryutil), nhưng nếu máy bạn đang chạy bản hiện đại thì không cần bận tâm tới cú pháp cũ này.
Linux không cache DNS mặc định ở tầng hệ thống, trừ khi bạn đang chạy một dịch vụ cache cụ thể. Vì vậy lệnh flush phụ thuộc vào dịch vụ đang chạy trên máy, không có một lệnh chung cho mọi bản phân phối:
sudo resolvectl flush-caches (bản cũ hơn dùng sudo systemd-resolve --flush-caches), rồi kiểm tra bằng resolvectl statistics.sudo systemctl restart nscd.sudo systemctl restart dnsmasq.sudo rndc flush.Nếu không chắc dịch vụ nào đang chạy, bạn kiểm tra bằng systemctl status systemd-resolved trước khi chọn lệnh, thay vì thử lần lượt từng lệnh trên.
Flush xong ở hệ điều hành mà trình duyệt vẫn báo lỗi là tình huống rất phổ biến, và nguyên nhân đơn giản: trình duyệt giữ một cache DNS riêng, hoàn toàn tách khỏi cache của hệ điều hành. Xóa cache OS không đụng gì tới cache này.

Bạn gõ chrome://net-internals/#dns vào thanh địa chỉ Chrome, sau đó nhấn nút Clear host cache. Nếu vẫn giữ kết nối tới IP cũ, bạn xóa thêm tại chrome://net-internals/#sockets bằng nút Flush socket pools.
Edge dùng đúng địa chỉ tương đương edge://net-internals/#dns. Cốc Cốc cũng chạy trên nhân Chromium nên thường hỗ trợ trang nội bộ tương tự qua coccoc://net-internals/#dns. Nếu địa chỉ này không hoạt động trên bản Cốc Cốc bạn đang dùng, bạn có thể xóa toàn bộ dữ liệu duyệt web qua Ctrl+Shift+Del thay thế. Sau khi xóa xong, bạn nên đóng và mở lại trình duyệt. Bạn không thấy thông báo xác nhận sau khi nhấn nút cũng là bình thường.
Bạn gõ about:networking#dns vào thanh địa chỉ, sau đó nhấn Clear DNS Cache. Nếu bạn đã bật DNS-over-HTTPS (viết tắt DoH, một cách mã hóa truy vấn DNS để tránh bị nhà mạng dò xem), Firefox sẽ phân giải tên miền qua một máy chủ riêng biệt. Bản ghi phân giải theo cách này vẫn hiển thị trong cùng bảng cache tại about:networking#dns, có đánh dấu riêng để bạn biết bản ghi nào tra qua DoH. Vì vậy, nút Clear DNS Cache vẫn xóa được cả hai loại bản ghi.
Một lưu ý quan trọng: nếu bạn chỉ thấy giao diện cũ (ảnh, CSS lỗi thời) chứ không phải lỗi truy cập hẳn, đó là cache trang web, không phải cache DNS. Bạn xử lý bằng Ctrl+F5 theo hướng dẫn ở phần “khi nào flush vô ích” bên trên, vì flush DNS ở đây không giải quyết được gì.
DNS cache không chỉ tồn tại trên máy tính. Điện thoại và router ở nhà bạn cũng giữ cache riêng, và đây là phần gần như không hướng dẫn nào khác đề cập đầy đủ.

Điện thoại không có nút “flush DNS” trực tiếp như máy tính, nhưng có vài cách hiệu quả tương đương:
Router phục vụ mọi thiết bị trong nhà, nên nó cũng giữ một cache DNS dùng chung. Khởi động lại router (tắt khoảng 30 giây rồi bật lại) sẽ xóa cache này.
Đây là bước hay bị bỏ quên nhất trong toàn bộ quy trình flush: bạn có thể flush sạch cả máy tính lẫn điện thoại, nhưng nếu router vẫn giữ bản ghi cũ, mọi thiết bị trong nhà tiếp tục thấy lỗi. Phần tiếp theo giải thích vì sao điều này xảy ra một cách có hệ thống.
Nếu bạn đã flush đúng lệnh mà trang vẫn hiện bản cũ, nguyên nhân gần như chắc chắn là một tầng cache khác ngoài tầm bạn vừa xóa đang giữ bản ghi cũ. DNS được cache ở nhiều tầng độc lập, và flush máy chỉ chạm được một, hai tầng gần nhất.

Mô hình đầy đủ có năm tầng, tính từ gần bạn ra xa. Ở tầng 4, resolver của ISP chính là máy chủ phân giải DNS phía nhà mạng, nơi tra cứu hộ bạn mỗi khi thiết bị hỏi một tên miền:
|
Tầng |
Ai kiểm soát |
Cách xóa |
Tự flush được không |
|
1. Trình duyệt |
Bạn |
Xóa qua net-internals/về networking (xem phần trình duyệt) |
Có |
|
2. Hệ điều hành |
Bạn |
ipconfig/dscacheutil/resolvectl (xem phần máy tính) |
Có |
|
3. Router/modem |
Bạn (chủ mạng nhà) |
Khởi động lại router |
Có |
|
4. Resolver của ISP |
Nhà mạng |
Không có lệnh phía người dùng |
Không |
|
5. TTL bản ghi gốc |
Nhà cung cấp DNS của tên miền |
Đợi hết TTL hoặc hạ TTL trước khi đổi |
Không (chỉ chuẩn bị trước được) |
Ba tầng đầu nằm trong tay bạn, đó là lý do các phần trên của bài hướng dẫn đủ cả ba. Nhưng tầng 4 và tầng 5 thì không.
Máy chủ DNS của nhà mạng cache theo đúng TTL của bản ghi, và bạn không có quyền can thiệp vào cache đó. Tương tự, dù bạn xóa sạch tầng 1-3, mọi resolver trên thế giới vẫn tôn trọng TTL gốc do nhà cung cấp DNS của tên miền thiết lập.
Đây chính là lý do “flush mãi không ăn thua”: bạn xóa sạch tầng 1 và 2, nhưng tầng 3 (router) hoặc tầng 4 (resolver ISP) vẫn trả về bản ghi cũ vì TTL của chúng chưa hết hạn.
Thứ tự xử lý đúng khi rơi vào tình huống này gồm ba bước. Bạn flush trình duyệt và hệ điều hành trước, khởi động lại router kế tiếp, rồi đổi tạm sang DNS công cộng như 1.1.1.1 hoặc 8.8.8.8 để bỏ qua hẳn resolver của ISP.
Nếu làm hết ba bước mà vẫn thấy bản cũ, vấn đề nằm ở TTL và propagation, không còn là chuyện cache nữa. Phần cuối bài sẽ nói rõ cách xử lý.
Câu hỏi đúng không phải “flush lại lần nữa có ăn thua không”, mà là “tầng nào đang giữ bản ghi cũ”. Trả lời đúng câu hỏi thứ hai tiết kiệm cho bạn rất nhiều lần gõ lệnh vô ích ở tầng đã sạch từ trước.
Sau khi flush, bạn có bốn cách để xác nhận cache đã sạch và biết chính xác vấn đề còn nằm ở đâu:
ipconfig /displaydns: trên Windows, bạn chạy lệnh này trước khi flush để xem danh sách bản ghi đang lưu, rồi chạy lại sau khi flush. Danh sách rỗng nghĩa là tầng hệ điều hành đã sạch.nslookup hoặc dig: bạn chạy nslookup tenten.vn trên Windows hoặc macOS, hoặc dig tenten.vn trên macOS/Linux, rồi so sánh IP trả về với IP bạn mong đợi. Nếu hai IP không khớp, cache tầng 2 của bạn đã sạch nhưng vấn đề nằm ở tầng khác.Bốn cách trên giúp bạn phân biệt rạch ròi hai tình huống dễ nhầm: “flush chưa ăn” và “vấn đề vốn không nằm ở cache”.
Tình huống hay gặp nhất khi tìm hiểu flush DNS là vừa trỏ tên miền về hosting mới, hoặc đổi nhà cung cấp hosting, mà trang “vẫn thấy bản cũ”. Đây không phải bạn làm sai điều gì.
Bản ghi mới cần thời gian propagation để lan ra toàn bộ resolver trên thế giới, và thời gian này bị giới hạn bởi TTL của bản ghi cũ. Với thay đổi bản ghi A hoặc CNAME đơn giản, phần lớn trường hợp thực tế cho thấy propagation hoàn tất trong vài giờ, thường trong khoảng 1-4 giờ nếu TTL cũ không đặt quá cao.

Nếu bạn đổi hẳn nameserver (máy chủ quản lý toàn bộ bản ghi DNS gốc của tên miền), thời gian propagation thường dài hơn đáng kể. Quá trình này có thể mất khoảng 24 giờ, và trong một số trường hợp lên tới 48 giờ, vì bản ghi NS thường được cache với TTL rất cao ở các resolver gốc (thường từ 2 ngày trở lên). Flush máy chỉ xóa cache của riêng bạn, tức tầng 1-2 trong mô hình trên, nên không có khả năng ép resolver của người khác trên thế giới cập nhật sớm hơn.
Quy trình đúng khi chuyển host hoặc đổi DNS gồm ba bước, làm theo đúng thứ tự:
Quản lý tên miền và trỏ bản ghi DNS thường nằm trong cùng một trang quản trị của nhà cung cấp. Với các dịch vụ tên miền và Managed DNS (dịch vụ quản lý bản ghi DNS tập trung) như của TENTEN, thao tác hạ TTL và sửa bản ghi A/CNAME nằm cùng một chỗ. Nhờ vậy, bạn chuẩn bị TTL thấp trước khi chuyển dễ dàng hơn, thay vì phải làm việc với hai nhà cung cấp tách biệt.
Flush DNS là thao tác xóa một tầng cache để buộc thiết bị lấy bản ghi mới. Nó rẻ, an toàn, và đáng thử đầu tiên khi nghi ngờ cache, nhưng nó không sửa được mọi lỗi liên quan tới DNS.
Bài viết này để lại ba điều dễ nhầm nhất, đáng nhớ nhất:
Nếu bạn đang chuẩn bị đổi hosting hay trỏ tên miền sang máy chủ mới, hãy hạ TTL trước khi chuyển và quản lý bản ghi DNS ở một nơi duy nhất để dễ theo dõi propagation. Ai đang cần một dịch vụ tên miền kết hợp Managed DNS tập trung có thể tìm hiểu thêm về TENTEN.