Skip to content

DNS Encryption

BigDargon edited this page Jul 20, 2023 · 4 revisions

Bài viết dưới đây giải thích mã hóa DNS là gì, tại sao phải mã hóa DNS khi truy vấn và các vấn đề liên quan đến mã hóa DNS. Bài viết có tham khảo, sử dụng nguồn từ các bài viết trên internet.

Với trình độ tiếng Anh ít ỏi và kiến thức hạn hẹp nên bài viết sẽ không thể tránh khỏi nhiều thiếu sót. Nếu có vấn đề gì sai sót trong quá trình viết bài, vui lòng cho mình biết để chỉnh sửa. Cám ơn!

Mã hóa DNS

DNS được ví như cuốn danh bạ của Internet. Trình phân giải DNS dịch các tên miền mà chúng ta hiểu và gõ sang địa chỉ IP máy tính hiểu. Mặc định, DNS được truy vấn và phản hồi dưới dạng văn bản thô, điều này có nghĩa chúng có thể được đọc bởi bất kỳ ai trong mạng (kể cả nội bộ và internet) hay nhà mạng.

Như vậy, DNS sẽ không còn riêng tư nếu mọi người đều có thể theo dõi truy vấn và phản hồi của bạn và nguy hiểm hơn là chúng bị những kẻ tấn công cố ý thay đổi phản hồi truy vấn trước khi nhận được.

DNS qua TLS và DNS qua HTTPS là hai tiêu chuẩn được phát triển để mã hóa lưu lượng DNS nhằm ngăn bên thứ ba có thể diễn giải dữ liệu.

Các loại giao thức DNS

  • DNS-over-53 (gọi tắt là Do53) là DNS không mã hóa được truyền trên cổng 53 dưới dạng văn bản thô.
  • DNS-over-HTTPS (DoH) là DNS mã hóa được truyền trên cổng 443, với giao thức TCP. (Xem thêm RFC 8484)
  • DNS-over-HTTP/3 (DoH3) là DNS mã hóa được truyền trên cổng 443, với giao thức UDP.
  • DNS-over-TLS (DoT) là DNS mã hóa được truyền trên cổng 853, với giao thức TCP. (Xem thêm RFC 8310)
  • DNS-over-QUIC (DoQ) là DNS mã hóa được truyền trên cổng 853, với giao thức UDP.

So sánh

Do53 DoH DoH3 DoT DoQ
Cổng 53 443 443 853 853
Giao thức UDP TCP UDP TCP UDP
Tầng Ứng dụng Ứng dụng Ứng dụng Giao vận Giao vận
Mã hóa Không
Nghe lén Không Không Không Không

Hầu hết, các thiết bị/trình duyệt hiện nay đều đã hỗ trợ DNS mã hóa (native DNS) như:

  • iOS 14 trở về sau đã hỗ trợ DoH và DoT.
  • Android 9 trở lên đã hỗ trợ DoT.
  • Windows 11 đã hỗ trợ DoH.
  • Các trình duyệt Firefox/Edge/Chrome/Chromium đã hỗ trợ DoH.

Xét về tốc độ và hiệu năng, DoT và DoQ cho kết quả tốt nhất. Do DoT và DoQ trao đổi dữ liệu ở tầng giao vận (Transport layer) là tầng thứ 4 trong 7 tầng mạng, trong khi đó DoH và DoH3 trao đổi dữ liệu ở tầng ứng dụng (Application layer) nằm ở tầng thứ 7 (tầng cuối cùng).

Ở vài quốc gia hay mạng nội bộ chặn cổng 853, DoH và DoH3 cho kết quả tốt hơn. Do DoT và DoQ truyền dữ liệu trên cổng 853, nhà mạng hay IT trong mạng dễ dàng chặn chúng, trong khi DoH và DoH3 truyền dữ liệu trên cổng 443 (trùng với cổng HTTPS) nên hầu như khó chặn hơn.

Vì vậy, ưu tiên sử dụng DNS mã hóa theo thứ tự sau:

  • Luôn sử dụng DNS mã hóa DoH có sẵn trong trình duyệt trên máy tính.
  • Nếu đang sử dụng mạng không bị chặn cổng 853 và thiết bị đang sử dụng có hỗ trợ DNS mã hóa, hãy sử dụng DoT (tích hợp trên iOS, Android và Linux).
  • Nếu mạng đang sử dụng có thể chặn cổng 853, hãy sử dụng DoH (tích hợp trên iOS, Android, Windows và Linux).

FAQ

Q: Mã hóa DNS có ẩn được truy vấn và phản hồi DNS không?

A: Có. Quá trình truy vấn và phản hồi DNS sẽ không có bên thứ 3 đọc/chỉnh sửa.

Q: Vậy nhà mạng biết được tên miền ta truy vấn không?

A: Có thể hoặc không. Khi phân giải được địa chỉ IP để kết nối, nhà mạng dùng bản ghi PTR để suy ngược tên máy chủ đó nhưng hầu hết tên máy chủtên miền truy vấn không giống nhau. VD: Khi phân giải tên miền www.facebook.com thiết bị kết nối đến địa chỉ 31.13.88.35, nhà mạng sẽ truy vấn ngược từ địa chỉ IP 35.88.13.31.in-addr.arpa với kết quả edge-star-mini-shv-02-atl3.facebook.com. Như vậy, tên miền truy vấn ban đầu và tên máy chủ mà nhà mạng truy vấn được không giống nhau.

Q: Nhà mạng biết được đỉa chỉ IP mà chúng ta kết nối. Vậy nhà mạng có theo dõi được không?

A: Có. Nhà mạng hiện nay sử dụng kỹ thuật Deep packet inspection (DPI) để chặn và theo dõi người dùng. Khi thiết bị bắt đầu quá trình bắt tay SSL sẽ gửi tên miền truy cập trong header, từ đó nhà mạng vẫn thấy tên miền và theo dõi được. Tuy nhiên, hiện tại giao thức mới đang phát triển là ECH (Encrypted Client Hello) - một phiên bản mới của ESNI (Encrypted SNI) trước đây - sẽ giúp mã hóa phần header khi bắt tay, khiến nhà mạng sẽ không thấy được quá trình bắt tay, từ đó không thấy được tên miền mà ta truy cập. Xem thêm https://blog.cloudflare.com/encrypted-client-hello/

Q: Vậy tại sao chúng ta phải mã hóa DNS?

A: Ít nhất trong mạng nội bộ và rộng hơn là trong mạng internet, mã hóa DNS sẽ ngăn bên thứ 3 đọc được tất cả truy vấn DNS. Đối với hacker có thể chỉnh sửa bản ghi DNS, từ đó dẫn thiết bị truy cập đến máy chủ lạ mà chúng ta không hề hay biết.

Tham khảo

Clone this wiki locally