Bật VPN lên thì trang web phải thấy địa chỉ của máy chủ VPN thay vì địa chỉ của bạn. Phần lớn thời gian đúng là như vậy. Nhưng vẫn nên kiểm tra, vì trình duyệt có một tính năng cần để ý riêng là WebRTC: nó có thể làm lộ địa chỉ mạng theo những cách bạn không ngờ tới.

Bài này giải thích địa chỉ IP là gì, nó nói gì về bạn, rò rỉ WebRTC xảy ra thế nào, và cách tự kiểm tra thiết lập của mình từng bước một.

Địa chỉ IP tiết lộ những gì

Địa chỉ IP là dãy số định danh kết nối của bạn trên Internet. Bạn sẽ gặp hai loại:

  • Địa chỉ IP công khai. Đây là địa chỉ mà phần còn lại của Internet nhìn thấy. Ở nhà, địa chỉ này thường thuộc về router và do nhà cung cấp Internet cấp. Khi dùng dữ liệu di động, nó thuộc về mạng của nhà mạng.
  • Địa chỉ IP cục bộ (riêng). Đây là địa chỉ thiết bị dùng bên trong mạng ở nhà hoặc cơ quan, chẳng hạn địa chỉ bắt đầu bằng 192.168 hoặc 10. Từ Internet không thể kết nối tới địa chỉ này, nhưng nó vẫn có thể giúp nhận dạng (fingerprint) một thiết bị.

IP công khai không cho trang web biết tên hay địa chỉ nhà bạn, nhưng thường chỉ ra nhà mạng và vị trí gần đúng, nhiều khi tới thành phố hoặc khu vực. Trang web có thể dùng nó để ước đoán bạn ở đâu, và khi kết hợp với cookie cùng các tín hiệu khác, nó trở thành một phần trong hồ sơ về bạn.

Bước 1: Kiểm tra IP công khai

Mở công cụ IP của tôi là gì. Công cụ hiện địa chỉ IP công khai mà trình duyệt của bạn đang dùng để kết nối, kèm vị trí gần đúng và đơn vị sở hữu mạng gắn với địa chỉ đó. Công cụ cũng hiện một trạng thái đơn giản:

  • Đã bảo vệ nghĩa là lưu lượng của bạn đang đến từ một máy chủ VPNRice.
  • IP đang lộ nghĩa là trang web đang thấy một địa chỉ không phải máy chủ VPNRice, thường là kết nối thật của bạn.

Hãy làm hai lần: một lần tắt VPN và một lần bật VPN. Ghi lại hoặc nhớ địa chỉ lần đầu. Khi bật VPN, địa chỉ và vị trí phải đổi thành của máy chủ VPN.

Nếu muốn xem chi tiết về một địa chỉ khác, chẳng hạn một địa chỉ bạn thấy trong tệp nhật ký, hãy dùng công cụ Tra cứu địa chỉ IP. Công cụ hiện quốc gia, khu vực và mạng được đăng ký cho địa chỉ đó. Dữ liệu vị trí lấy từ DB-IP và về bản chất chỉ là gần đúng.

Bước 2: Hiểu về WebRTC

WebRTC là công nghệ trình duyệt đứng sau các cuộc gọi video, trò chuyện bằng giọng nói và một số kiểu chia sẻ tệp diễn ra ngay trong trang web. Để kết nối hai người hiệu quả, WebRTC tìm đường mạng ngắn nhất giữa họ. Quy trình nó dùng gọi là ICE, định nghĩa trong RFC 8445.

ICE thu thập các "ứng viên" (candidate), tức những địa chỉ có thể dùng để kết nối tới thiết bị của bạn. Tài liệu của MDN về giao diện RTCIceCandidate liệt kê các loại chính:

  • Ứng viên host là các địa chỉ của chính thiết bị trên những giao diện mạng của nó.
  • Ứng viên server reflexive là địa chỉ công khai của bạn mà một máy chủ STUN nhìn thấy. STUN, mô tả trong RFC 8489, là một giao thức đơn giản cho thiết bị biết địa chỉ của nó trông thế nào khi nhìn từ bên ngoài.
  • Ứng viên relay là địa chỉ trên một máy chủ chuyển tiếp, dùng để chuyển lưu lượng khi không có đường kết nối trực tiếp.

Một trang web có thể yêu cầu trình duyệt thu thập các ứng viên này, và JavaScript trên trang đó đọc được chúng. Đó là gốc rễ của vấn đề: nếu trình duyệt đưa vào một địa chỉ không đi qua VPN, trang web có thể biết được địa chỉ đó.

Rò rỉ WebRTC trông như thế nào

Rò rỉ xảy ra khi một ứng viên WebRTC hiện ra địa chỉ mà bạn tưởng đã được che. Các trường hợp thường gặp:

  • IP công khai thật của bạn xuất hiện như một ứng viên trong khi VPN đang bật. Điều này có thể xảy ra nếu trình duyệt gửi yêu cầu STUN theo một đường mạng nằm ngoài đường hầm, hoặc nếu lưu lượng IPv6 không được bao phủ trong khi IPv4 thì có.
  • Địa chỉ IP cục bộ của bạn bị lộ. Trường hợp này ít nghiêm trọng hơn nhưng vẫn cung cấp thêm thông tin để nhận dạng thiết bị.

IETF đã quy định trình duyệt nên hoạt động thế nào. RFC 8828 định nghĩa bốn chế độ xử lý địa chỉ IP trong WebRTC, từ liệt kê mọi địa chỉ (Chế độ 1) đến buộc mọi lưu lượng đi qua proxy (Chế độ 4). Văn bản nêu rằng không được dùng Chế độ 1 khi chưa có sự đồng ý của người dùng, và khi chưa có sự đồng ý, trình duyệt nên dùng Chế độ 2, chỉ để lộ các địa chỉ thuộc tuyến mặc định. Nhiều trình duyệt hiện đại còn thay địa chỉ cục bộ bằng tên ngẫu nhiên kết thúc bằng ".local", nên trang web chỉ thấy một tên thay thế chứ không thấy địa chỉ riêng.

Trên thực tế, điều này có nghĩa là một VPN cho toàn hệ thống hoạt động đúng thường ngăn được rò rỉ, vì tuyến mặc định đi qua đường hầm. Sự cố thường đến từ các thiết lập chia đường hầm (split tunneling), proxy chỉ dành cho trình duyệt, hoặc IPv6 không được xử lý.

Bước 3: Chạy bài kiểm tra rò rỉ WebRTC

Mở công cụ Kiểm tra rò rỉ WebRTC. Bài kiểm tra chạy trong trình duyệt, yêu cầu trình duyệt thu thập ứng viên ICE trong vài giây và hiện cho bạn mọi địa chỉ tìm thấy. Sau đó nó so các địa chỉ này với địa chỉ công khai mà kết nối của bạn đang dùng. Bài kiểm tra không liên hệ máy chủ STUN nào của bên thứ ba, nên chỉ hiện ứng viên host (thường được ẩn dưới dạng tên .local). Nghĩa là nó phát hiện được việc lộ địa chỉ cục bộ, nhưng không phát hiện được IP công khai bị lộ qua yêu cầu STUN.

Chạy khi đang bật VPN và đọc kết quả như sau:

  1. Chỉ có địa chỉ của máy chủ VPN, hoặc hoàn toàn không có địa chỉ công khai nào. Không rò rỉ.
  2. Có một tên ".local". Đó là trình duyệt đang che địa chỉ cục bộ của bạn. Không phải rò rỉ.
  3. Có một địa chỉ công khai không phải máy chủ VPN. Hãy coi đây là bị lộ.
  4. Có một địa chỉ riêng kiểu 192.168.x.x. Lộ ở mức nhẹ. Hãy cân nhắc các cài đặt trình duyệt bên dưới.

Cách khắc phục rò rỉ

Hãy thử lần lượt các bước sau, kiểm tra lại sau mỗi bước:

  • Dùng app VPN cho toàn hệ thống thay vì proxy chỉ dành cho trình duyệt. Tiện ích trình duyệt hoạt động như proxy sẽ gửi yêu cầu web qua một máy chủ khác, nhưng lưu lượng WebRTC không phải lúc nào cũng tuân theo cài đặt proxy. App VPN đầy đủ đưa tuyến mặc định đi qua đường hầm. Các app VPNRice trên Android, iPhone, iPad và Windows hoạt động theo cách này; tiện ích cho Chrome và Firefox là proxy trình duyệt, đưa lưu lượng của trình duyệt qua máy chủ VPNRice (bản thân tiện ích không thêm lớp mã hoá; các trang bạn mở qua HTTPS vẫn được mã hoá đầu cuối).
  • Kết nối lại VPN và tải lại trang. Ứng viên được thu thập khi trang yêu cầu, nên một trang tải trước khi VPN kết nối có thể hiện kết quả cũ.
  • Kiểm tra IPv6. Nếu mạng của bạn có IPv6 và địa chỉ bị lộ là IPv6, hãy chắc chắn VPN bao phủ cả IPv6, hoặc thử trên một mạng không có IPv6 để xác nhận nguyên nhân.
  • Bật kill switch. Kill switch (tính năng tự ngắt Internet khi VPN rớt) chặn lưu lượng rời khỏi thiết bị khi không có đường hầm. Trên Android, kill switch của VPNRice dựa vào cài đặt VPN luôn bật của Android cùng tuỳ chọn chặn kết nối không qua VPN.
  • Hạn chế WebRTC trong trình duyệt. Một số trình duyệt có cài đặt hoặc chính sách giới hạn những giao diện mạng WebRTC được phép dùng. Người dùng Firefox có thể đổi các tuỳ chọn WebRTC trong about:config. Tắt hẳn WebRTC sẽ làm hỏng tính năng gọi video trong trình duyệt, nên chỉ coi đó là phương án cuối cùng.

Danh sách kiểm tra nhanh

  • Kiểm tra IP khi tắt VPN, rồi khi bật. Địa chỉ phải thay đổi.
  • Tìm trạng thái Đã bảo vệ trên trang IP của tôi là gì.
  • Chạy Kiểm tra rò rỉ WebRTC khi đang bật VPN.
  • Làm lại sau khi cập nhật trình duyệt hoặc khi đổi mạng.
  • Dùng công cụ Tra cứu địa chỉ IP khi muốn tìm hiểu một địa chỉ lạ.

Các bài kiểm tra này mất chưa đến một phút và cho bạn thấy những điều chính mà kết nối của bạn đang tiết lộ. Các công cụ của VPNRice chạy trong trình duyệt của bạn hoặc trên dịch vụ của chính VPNRice, không có trình theo dõi hay cookie của bên thứ ba.

Nếu bạn muốn một VPN bảo vệ cả thiết bị chứ không chỉ trình duyệt, hãy tải VPNRice rồi chạy lại các bài kiểm tra khi đã bật nó.