DNS leak là gì và cách khắc phục khi dùng proxy
Cập nhật:
DNS leak (rò rỉ DNS) là khi máy bạn tự hỏi máy chủ DNS của nhà mạng để đổi tên miền thành địa chỉ IP, trong khi lưu lượng web lại đi qua proxy. Kết quả là website và các bên trung gian có thể thấy một yêu cầu DNS từ mạng Việt Nam đi kèm một kết nối từ IP Mỹ, một sự mâu thuẫn dễ nhận ra. Với proxy HTTP cấu hình đúng trong trình duyệt, việc phân giải tên miền thường do phía proxy đảm nhận nên ít khi rò rỉ; rò rỉ hay xảy ra ở ứng dụng không dùng proxy, công cụ tự phân giải trước khi kết nối, hoặc cấu hình hệ thống không đầy đủ. Bài này giải thích cơ chế, cách kiểm tra và cách khắc phục cho từng trường hợp.
DNS là gì và vì sao có thể rò rỉ
Mỗi khi bạn mở một trang web, máy cần biết tên miền đó tương ứng với IP nào. Việc tra cứu này gọi là phân giải DNS, do một máy chủ DNS (resolver) thực hiện, thường là resolver của nhà mạng hoặc một dịch vụ DNS công cộng bạn đã cài.
Resolver nhìn thấy bạn đang tìm tên miền nào, và máy chủ DNS của website nhìn thấy resolver nào đang hỏi. Nếu bạn dùng proxy để kết nối từ một quốc gia khác nhưng DNS vẫn đi qua nhà mạng ở nhà, hai mảnh thông tin này không khớp nhau. Đó là DNS leak.
Proxy HTTP xử lý DNS thế nào
Khi trình duyệt dùng proxy HTTP/HTTPS, nó gửi cho proxy tên miền đầy đủ, ví dụ lệnh CONNECT example.com:443. Máy chủ proxy tự phân giải tên miền rồi mở kết nối. Vì vậy, với các yêu cầu đi qua proxy, máy bạn không cần hỏi DNS nhà mạng.
Điều này khác với VPN, nơi toàn bộ lưu lượng của máy được đưa qua đường hầm và DNS phải được cấu hình riêng; khác biệt giữa hai công nghệ có trong bài proxy và VPN. Nó cũng khác với một số kiểu kết nối khác, nơi công cụ có thể chọn tự phân giải tên miền trên máy rồi chỉ gửi IP cho proxy.
| Tình huống | Ai phân giải DNS | Nguy cơ rò rỉ |
|---|---|---|
| Trình duyệt cấu hình proxy HTTP đúng | Máy chủ proxy | Thấp |
| Ứng dụng bỏ qua proxy hệ thống | DNS nhà mạng của bạn | Cao, vì cả lưu lượng cũng không qua proxy |
| Script tự tra IP rồi mới kết nối qua proxy | DNS nhà mạng của bạn | Trung bình |
| Proxifier với tuỳ chọn phân giải qua proxy | Máy chủ proxy | Thấp |
| VPN cấu hình thiếu DNS | DNS nhà mạng của bạn | Cao |
Cách kiểm tra DNS leak
- Bước 1, xác nhận IP: mở trang kiểm tra IP của tôi trong đúng trình duyệt hoặc profile, chắc rằng IP hiển thị là IP proxy.
- Bước 2, chạy test DNS: mở một trang kiểm tra DNS leak như dnsleaktest.com hoặc mục DNS của browserleaks.com, chọn kiểm tra mở rộng.
- Bước 3, đọc danh sách resolver: trang sẽ liệt kê các máy chủ DNS đã hỏi thay bạn, kèm tên tổ chức và quốc gia.
- Bước 4, so sánh: nếu thấy resolver của nhà mạng ở nhà bạn, đó là rò rỉ. Nếu chỉ thấy resolver gắn với phía proxy hoặc một dịch vụ DNS công cộng lớn, thường là không rò rỉ.
- Bước 5, kiểm tra cả ứng dụng: với app không phải trình duyệt, kiểm tra xem app có thực sự dùng proxy không trước khi bàn đến DNS. Bài proxy chạy trên trình duyệt nhưng không chạy trên app giải thích nguyên nhân.
Đọc kết quả đúng: resolver khác nước chưa chắc là rò rỉ
Nhiều người hoảng khi thấy proxy Nhật nhưng resolver lại ở Singapore hoặc của một dịch vụ DNS công cộng. Thực ra máy chủ proxy cũng phải dùng một resolver nào đó, và resolver ấy có thể đặt ở nước khác hoặc là dịch vụ anycast toàn cầu. Đó là đặc điểm của hạ tầng proxy, không phải dữ liệu từ máy bạn bị lộ.
Dấu hiệu rò rỉ thật là sự xuất hiện của resolver nhà mạng bạn đang dùng ở nhà hoặc văn phòng. Nếu thấy, nghĩa là ít nhất một phần truy vấn đang đi thẳng từ máy bạn ra, không qua proxy.
Cách khắc phục DNS leak
- Cấu hình proxy ngay trong trình duyệt hoặc profile antidetect, thay vì dựa vào proxy hệ thống. Hướng dẫn cho từng công cụ nằm trong mục cài đặt proxy, ví dụ Chrome hoặc Firefox.
- Với ứng dụng không hỗ trợ proxy, dùng Proxifier và bật tuỳ chọn phân giải tên miền qua proxy trong phần Name Resolution.
- Trong code, truyền tên miền cho proxy thay vì tự tra IP trước. Ví dụ
curl -x http://user:pass@ip:port https://example.comđể proxy phân giải; tránh gọi hàm tra DNS rồi kết nối tới IP. - Tắt tiện ích, phần mềm tự đổi DNS mà bạn không cần, vì chúng có thể gửi truy vấn ngoài đường proxy.
- Kiểm tra lại sau mỗi thay đổi bằng trang test DNS và công cụ test WebRTC leak, vì WebRTC là nguồn lộ IP phổ biến hơn DNS.
DNS leak có quan trọng với bạn không
Với việc xem kết quả tìm kiếm theo quốc gia hay cào dữ liệu công khai, DNS leak hiếm khi làm sai kết quả, vì website chủ yếu nhìn IP kết nối. Với tài khoản cần đăng nhập lâu dài, nên loại bỏ mọi mâu thuẫn có thể kiểm soát, DNS là một trong số đó. Danh sách đầy đủ các tín hiệu nằm trong bài website phát hiện proxy như thế nào.
Cũng cần nhớ rằng proxy không mã hoá thêm lưu lượng và không thay thế công cụ bảo mật. Proxy giúp kết nối từ đúng quốc gia bằng một IP cố định; mọi thứ còn lại vẫn cần cấu hình đúng.
Câu hỏi thường gặp
Dùng proxy HTTP có bị DNS leak không?
Khi trình duyệt cấu hình proxy HTTP đúng, máy chủ proxy phân giải tên miền nên rò rỉ ít xảy ra. Rò rỉ thường đến từ ứng dụng không dùng proxy hoặc script tự phân giải trước.
Test DNS hiện resolver ở nước khác với proxy, có sao không?
Thường là không. Đó là resolver mà máy chủ proxy sử dụng. Chỉ đáng lo khi thấy resolver của nhà mạng bạn đang dùng.
DNS leak và WebRTC leak khác nhau thế nào?
DNS leak lộ việc bạn tra tên miền qua DNS nhà mạng. WebRTC leak lộ trực tiếp địa chỉ IP thật qua kết nối UDP của trình duyệt. WebRTC leak thường nghiêm trọng hơn.
Đổi DNS sang dịch vụ công cộng có hết rò rỉ không?
Không hẳn. Nếu truy vấn vẫn đi từ máy bạn, resolver công cộng vẫn thấy IP thật của bạn. Cách đúng là để phía proxy phân giải tên miền.
Proxy có mã hoá DNS không?
Proxy không mã hoá thêm lưu lượng. Nội dung HTTPS vẫn được mã hoá bởi chính website, còn việc phân giải tên miền diễn ra ở phía máy chủ proxy.
Proxy riêng, IP cố định theo quốc gia
HTTP/HTTPS, xác thực user và mật khẩu, định dạng ip:port:user:pass. IPv4 riêng ở 7 nước, ISP tĩnh ở Việt Nam và Mỹ.
Xem bảng giá