Bật VPN rồi, website vẫn đoán ra bạn là ai: 5 tín hiệu mình gặp nhiều nhất
Công khai: mình là Yang, tác giả của trang được nhắc tới ở cuối bài (who.1ms.dog, mã nguồn MIT tại github.com/yt1988/who-are-you). Mình có dùng AI để hỗ trợ dịch và chỉnh câu chữ tiếng Việt; nội dung kỹ thuật và phần trả lời bình luận là của mình. Nếu câu nào đọc chưa tự nhiên, mong mọi người góp ý.
Nhiều người nghĩ "bị nhận ra" là do cookie hoặc đăng nhập. Thực tế, một trang web bạn mở lần đầu, chưa đăng nhập, chưa bấm cho phép quyền gì, đã đọc được khá nhiều thứ. Và khi các thông tin đó mâu thuẫn với nhau (ví dụ IP ở Singapore nhưng đồng hồ máy ở Asia/Ho_Chi_Minh), chính sự mâu thuẫn đó lại là một tín hiệu.
Dưới đây là 5 thứ mình gặp nhiều nhất khi làm một trang tổng hợp các tín hiệu này.
1. DNS resolver thật sự đã tra tên miền cho bạn
Trình duyệt đi qua VPN, nhưng DNS của hệ điều hành có thể vẫn đi thẳng ra nhà mạng. Website chỉ cần bắt bạn phân giải một subdomain ngẫu nhiên do họ quản lý, rồi xem resolver nào gửi truy vấn tới. Nếu IP thoát ở nước ngoài mà resolver lại là DNS của nhà mạng trong nước, đó là rò rỉ DNS — rất dễ phát hiện.
Cách xử lý thường gặp: để client VPN quản lý DNS; với Clash/Mihomo thì bật fake-ip hoặc chế độ TUN để DNS cũng đi qua tunnel.
2. WebRTC
WebRTC hỏi STUN server địa chỉ public của bạn qua UDP. Nếu UDP không đi qua proxy (rất hay gặp khi dùng extension proxy trên trình duyệt), trang web sẽ thấy một IPv4/IPv6 public khác hẳn IP của request HTTP.
Cách xử lý: dùng tunnel toàn hệ thống thay vì proxy trong trình duyệt, hoặc giới hạn cách WebRTC chọn IP trong cài đặt trình duyệt.
3. Múi giờ và ngôn ngữ so với IP
Intl.DateTimeFormat().resolvedOptions().timeZone và navigator.languages lấy từ máy của bạn, không phải từ mạng. "IP ở Tokyo, múi giờ Asia/Ho_Chi_Minh, ngôn ngữ vi-VN" là dấu hiệu kinh điển của proxy/VPN. Nói đúng ra thì không có gì bị "rò rỉ", nhưng một website muốn gắn nhãn bạn không cần rò rỉ, chỉ cần một điểm mâu thuẫn.
4. Canvas, WebGL và font chữ
Vẽ cùng một đoạn chữ lên canvas sẽ ra pixel hơi khác nhau tuỳ GPU, driver, bộ font. WebGL trả về tên renderer. Đo độ rộng chữ với một danh sách font sẽ biết máy bạn cài font nào, kể cả khi quyền truy cập font cục bộ bị chặn. Những thứ này không đổi khi bạn đổi IP, nên đây là phần "đi theo" bạn qua mọi server VPN và cả cửa sổ ẩn danh.
5. Độ trễ khứ hồi (RTT)
Nếu RTT mà trình duyệt đo được dài hơn hẳn RTT mà CDN đo trên chính kết nối TCP của nó, rất có thể có thêm một chặng ở giữa — tức là proxy. IP dân cư (residential) cũng không che được điều này.
Trang mình làm
Who Are You chạy các kiểm tra trên (tổng cộng 127 thông số, không cần xin quyền gì), viết kết quả thành một đoạn văn "website nghĩ bạn là ai", rồi đối chiếu chúng với nhau giống cách một website làm: múi giờ vs IP, ngôn ngữ vs IP, quốc gia của DNS resolver, địa chỉ WebRTC, IP datacenter, User-Agent vs Client Hints và WebGL, môi trường bị sửa đổi, fingerprint có ổn định không. Mỗi mục không đạt đều kèm cách khắc phục cho hệ điều hành bạn đang dùng. Miễn phí, không cần tài khoản, toàn bộ mã nguồn mở. Trang chưa có bản tiếng Việt, hiện dùng tiếng Anh.
Những giới hạn mình biết, để mọi người khỏi mất công tìm:
- Điểm số nghĩa là "bạn trông có nhất quán không", không phải "bạn có an toàn không". Tor + VPN có thể bị điểm thấp dù không rò rỉ gì.
- Luật "ngôn ngữ vs quốc gia" có báo sai: một người ở Kyrgyzstan dùng máy tiếng Nga bị đánh dấu là "ngụy trang kém". Mình đang sửa để các ngôn ngữ phổ biến được coi là bình thường ở nhiều nước hơn.
- "Duy nhất" là duy nhất trong số người đã ghé trang này, không phải toàn Internet.
- Cần JavaScript và trang chạy sau Cloudflare.
- Có thể tắt đếm ẩn danh ngay trên trang; nếu bật Global Privacy Control thì không đếm gì cả.
Nếu trang đoán sai setup của bạn, cứ bình luận ở đây hoặc mở issue trên GitHub. Mình cũng tò mò với các nhà mạng Việt Nam (Viettel, VNPT, FPT) thì kết quả DNS/IPv6 trông thế nào.
All rights reserved