Ngay cả khi bật VPN, cơ chế ICE/STUN của WebRTC vẫn có thể làm lộ IP công khai thật của bạn. Rò rỉ diễn ra thế nào, cách kiểm tra và cách khắc phục.
Rò rỉ WebRTC xảy ra khi tính năng giao tiếp thời gian thực của trình duyệt để lộ địa chỉ IP thật của bạn — bao gồm cả IP công khai thật — ngay cả khi VPN đang hoạt động. Để ngăn chặn, bạn cần tắt WebRTC, giới hạn nó chỉ dùng giao diện mạng của VPN, hoặc dùng một VPN có chức năng chặn rò rỉ WebRTC rõ ràng. Dưới đây chúng tôi giải thích chính xác cách rò rỉ diễn ra, cách kiểm tra và cách khắc phục an toàn nhất mà không làm hỏng cuộc gọi video.
WebRTC là gì và tại sao trình duyệt tích hợp nó
WebRTC (Web Real-Time Communication) là một công nghệ trình duyệt cho phép các trang web trao đổi âm thanh, video và dữ liệu tùy ý trực tiếp giữa hai thiết bị — ngang hàng (peer-to-peer) — mà không cần plugin. Nó cung cấp khả năng hội nghị truyền hình ngay trong trình duyệt, gọi thoại, chia sẻ màn hình và truyền tệp trên các trang như Google Meet, Discord cùng vô số widget hỗ trợ trò chuyện.
Vì WebRTC kết nối hai đầu trực tiếp thay vì định tuyến mọi thứ qua một máy chủ trung tâm, mỗi đầu cần biết cách tiếp cận đầu kia trên mạng. Chính quá trình khám phá đó là gốc rễ của rò rỉ. WebRTC không phải phần mềm độc hại và cũng không phải lỗi — nó đang làm đúng những gì được thiết kế. Vấn đề là chính cơ chế tìm đường mạng tốt nhất cho cuộc gọi video của bạn cũng có thể trao địa chỉ IP thật của bạn cho bất kỳ script nào trên trang.
Quy trình ICE: STUN, TURN và thu thập ứng viên
Để thiết lập kết nối trực tiếp, WebRTC sử dụng một khung làm việc tên là ICE (Interactive Connectivity Establishment), được chuẩn hóa trong RFC 8445. ICE thu thập mọi cách khả thi mà hai đầu có thể tiếp cận nhau và xếp hạng chúng theo công thức ưu tiên mà RFC này định nghĩa — ứng viên host được thử trước, sau đó đến server-reflexive, rồi mới đến relay — nên trình duyệt luôn thử con đường trực tiếp nhất (và cũng dễ lộ thông tin nhất) trước khi lùi về dùng relay. Mỗi cách như vậy được gọi là một ứng viên (candidate).
Có ba loại ứng viên chính:
- Ứng viên host — các địa chỉ mạng nội bộ của thiết bị bạn (ví dụ IP LAN
192.168.x.xhoặc10.x.x.x, và đôi khi cả địa chỉ IPv6). - Ứng viên server-reflexive — IP công khai của bạn nhìn từ bên ngoài, được phát hiện bằng cách hỏi một máy chủ STUN. Máy chủ STUN (Session Traversal Utilities for NAT) đơn giản trả lời: "đây là IP và cổng công khai mà tôi thấy bạn đang kết nối tới." Đây chính là ứng viên có thể làm lộ IP thật của bạn.
- Ứng viên relay — một phương án dự phòng định tuyến phương tiện qua máy chủ TURN khi không thể kết nối trực tiếp. Máy chủ TURN chuyển tiếp lưu lượng nên không tiết lộ IP mới, nhưng tiêu tốn băng thông và chỉ được dùng như giải pháp cuối cùng.
Mối nguy là ICE thu thập ứng viên một cách chủ động và âm thầm. Một trang web có thể tạo kết nối, chẳng bao giờ thực sự gọi ai, mà vẫn đọc được các ứng viên trình duyệt đã thu thập — bao gồm cả IP công khai do STUN phát hiện.
Tại sao VPN không phải lúc nào cũng cứu được bạn
Đây là phần khiến hầu hết người dùng VPN bất ngờ. Khi bạn kết nối VPN, lưu lượng web thông thường được định tuyến qua giao diện của VPN, nên whatismyip hiển thị địa chỉ của VPN. Nhưng yêu cầu STUN của WebRTC là một luồng UDP riêng biệt. Tùy thuộc vào quy tắc định tuyến của hệ điều hành, cài đặt chia đường hầm (split-tunnel) của VPN và hành vi gắn giao diện của trình duyệt, yêu cầu STUN đó có thể đi qua giao diện mạng thật của bạn thay vì qua đường hầm. Khi đó máy chủ STUN báo cáo IP công khai thật của bạn, và trang web đọc được nó — hoàn toàn vượt qua VPN.
Nói cách khác, VPN bảo vệ lưu lượng HTTP của bạn trong khi WebRTC âm thầm làm rò rỉ chính IP mà bạn đang cố che giấu. Nếu muốn xác nhận liệu VPN có thực sự che địa chỉ của bạn hay không, hãy chạy công cụ kiểm tra VPN/proxy và thông tin IP của BrowserInsight để xem thế giới bên ngoài thực sự quan sát được gì.
Che giấu mDNS .local và giới hạn của nó
Các trình duyệt Chromium hiện đại (Chrome, Edge) và Firefox đã bổ sung một biện pháp giảm thiểu cho việc lộ IP nội bộ: thay vì để lộ ứng viên host thô 192.168.x.x, chúng thay bằng một tên máy chủ mDNS ngẫu nhiên trông giống a1b2c3d4-....local. Địa chỉ .local này vô nghĩa với một script từ xa, nên cấu trúc mạng LAN của bạn vẫn riêng tư trong khi kết nối vẫn hoạt động trên mạng nội bộ.
Tiêu chuẩn chi phối lĩnh vực này là RFC 8828 ("WebRTC IP Address Handling Requirements"). Bản thân nó không bắt buộc dùng mẹo .local, mà định nghĩa bốn chế độ xử lý IP cùng mức thông tin mạng mà mỗi chế độ được phép tiết lộ: chế độ 1 liệt kê mọi địa chỉ, chế độ 2 dùng tuyến mặc định cùng các địa chỉ nội bộ đi kèm, chế độ 3 chỉ dùng tuyến mặc định, còn chế độ 4 buộc lưu lượng đi qua proxy. Tên mDNS ngẫu nhiên là cách hiện thực mà các trình duyệt cùng chọn để đáp ứng đầu nghiêm ngặt của thang đo đó cho ứng viên host: trình duyệt công bố một cái tên ngẫu nhiên trên mạng nội bộ và đưa ra ngoài chính cái tên đó thay vì địa chỉ, nên bản thân IP LAN không bao giờ rời khỏi máy bạn.
Đây là một cải tiến thực sự, nhưng nó có hai giới hạn quan trọng:
- Nó chỉ che ứng viên host (nội bộ). Ứng viên server-reflexive về bản chất chính là một địa chỉ công khai — đó là nơi mà máy chủ STUN ngoài internet thấy gói tin của bạn gửi đến, nên chẳng có cái tên nội bộ nào để thay thế nó cả. IP công khai thật của bạn không được mDNS che giấu, và đó mới là rò rỉ quan trọng nhất đối với người dùng VPN.
- Nó phụ thuộc vào sự hỗ trợ của trình duyệt và nền tảng. Các trình duyệt cũ, một số webview nhúng và một số cấu hình nhất định vẫn có thể để lộ IP nội bộ thô.
Vậy nên mDNS giảm khả năng bị lấy dấu vân tay qua địa chỉ LAN của bạn, nhưng không phải là biện pháp chống rò rỉ IP công khai.
Điều thực sự giúp ích cho người dùng VPN trong RFC 8828 là chế độ 3. "Chỉ dùng tuyến mặc định" nghĩa là WebRTC chỉ được phép dùng đúng giao diện mà hệ điều hành vẫn dùng cho lưu lượng thông thường — và khi VPN đang bật, giao diện đó chính là đường hầm. Khi ấy yêu cầu STUN đi ra qua đường hầm, và ứng viên server-reflexive báo về địa chỉ của VPN chứ không phải của bạn. Đó cũng chính là điều mà các tùy chọn trình duyệt ở phần sau thực hiện bên dưới.
Rò rỉ trông như thế nào trong mã
Bạn không cần công cụ đặc biệt để kích hoạt việc thu thập ứng viên. Bất kỳ trang nào cũng có thể làm điều đó bằng giao diện chuẩn RTCPeerConnection, được định nghĩa trong đặc tả W3C WebRTC, chỉ với vài dòng JavaScript. Đoạn mã dưới đây tạo một kết nối ngang hàng, trỏ nó tới một máy chủ STUN công khai và in ra mọi ứng viên mà trình duyệt phát hiện:
// Hiển thị các ứng viên IP mà WebRTC thu thập
const pc = new RTCPeerConnection({
iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
});
// Buộc trình duyệt bắt đầu thu thập các ứng viên ICE
pc.createDataChannel('leak-test');
pc.onicecandidate = (event) => {
if (!event.candidate) return; // đã thu thập xong
const candidate = event.candidate.candidate;
// Chuỗi ứng viên ICE chứa IP ở trường thứ 5
const ipMatch = candidate.match(
/([0-9]{1,3}(\.[0-9]{1,3}){3})|([a-f0-9]{1,4}(:[a-f0-9]{0,4}){2,7})/i
);
if (ipMatch) {
console.log('Candidate type:', event.candidate.type);
console.log('Exposed address:', ipMatch[0]);
}
};
pc.createOffer().then((offer) => pc.setLocalDescription(offer));
Nếu event.candidate.type là srflx (server-reflexive) và địa chỉ được in ra là IP công khai thật của bạn thay vì của VPN, thì bạn đang bị rò rỉ WebRTC.
Cách kiểm tra rò rỉ WebRTC
Việc kiểm tra mất khoảng một phút:
- Kết nối VPN và xác nhận nó đang hoạt động.
- Ghi lại IP công khai mà VPN tuyên bố cấp cho bạn — trang thông tin IP của BrowserInsight sẽ hiển thị nó.
- Chạy kiểm tra VPN/proxy của BrowserInsight. Công cụ này thực hiện đúng quá trình thu thập ứng viên ở trên ngay trong trình duyệt của bạn và hiển thị IP công khai từ WebRTC bên cạnh IP mà các yêu cầu HTTP của bạn thực sự đi ra, đánh dấu chỗ lệch nhau là một rò rỉ WebRTC. (Nếu muốn xem kết quả thô, hãy dán đoạn mã ở trên vào console của trình duyệt.)
- So sánh các địa chỉ mà WebRTC tiết lộ với IP của VPN.
Nếu WebRTC hiển thị một IP trùng với VPN của bạn, bạn được bảo vệ. Nếu nó hiển thị một IP công khai khác — địa chỉ nhà hoặc của nhà mạng (ISP) — thì đó là rò rỉ. Một IP bị rò rỉ chỉ đáng lo với một bên theo dõi nếu nó thực sự xác định chính xác vị trí của bạn, và định vị địa lý qua IP kém chính xác hơn nhiều người vẫn tưởng — dù thường vẫn đủ chính xác để tiết lộ thành phố và nhà mạng của bạn. Để kiểm tra chéo những gì kết nối của bạn để lộ ngoài WebRTC, điều này kết hợp tốt với một bài kiểm tra rò rỉ DNS, vì rò rỉ DNS và WebRTC thường có chung nguyên nhân gốc: lưu lượng thoát ra khỏi đường hầm.
Biện pháp giảm thiểu cho từng trình duyệt
Không có một công tắc duy nhất nào sửa được WebRTC ở mọi nơi, vì mỗi trình duyệt xử lý nó theo cách khác nhau. Bảng dưới đây tóm tắt các lựa chọn thực tế.
| Trình duyệt / Nền tảng | Cách giảm thiểu | Đánh đổi |
|---|---|---|
| Chrome / Edge (máy tính) | Không có mục cài đặt sẵn; chính sách xử lý IP chỉ chỉnh được qua tiện ích mở rộng. Tiện ích WebRTC Network Limiter của chính Google đặt nó về phương án "chỉ dùng giao diện công khai mặc định" — tức chế độ 3 của RFC 8828 — nên ứng viên chỉ được thu thập trên đường hầm | Tiện ích có thể làm hỏng một số ứng dụng video |
| Firefox | Mở about:config, đặt media.peerconnection.enabled thành false để tắt hoàn toàn WebRTC | Làm hỏng hoàn toàn cuộc gọi video/thoại qua WebRTC |
| Safari (macOS/iOS) | Bản ổn định không có công tắc tắt dành cho người dùng. Trên iOS đây thậm chí không phải chuyện chọn trình duyệt: mọi trình duyệt iOS đều chạy trên WebKit nên đổi trình duyệt cũng vô ích — hãy dùng VPN cấp hệ thống có chặn rò rỉ WebRTC | Khả năng kiểm soát hạn chế |
| Brave | Cài đặt tích hợp: đổi chính sách xử lý IP của WebRTC thành "Disable non-proxied UDP" trong cài đặt quyền riêng tư — mức nghiêm ngặt nhất, tương ứng chế độ 4 của RFC 8828 | Có thể ảnh hưởng đến các ứng dụng ngang hàng |
| Di động (Android/iOS) | Dùng trình duyệt có điều khiển WebRTC (Brave, Firefox) hoặc một ứng dụng VPN chặn WebRTC ở tầng mạng | VPN ở tầng ứng dụng là giải pháp di động đáng tin cậy nhất |
Giải pháp gọn gàng nhất cho hầu hết người dùng VPN hoàn toàn không phải là một cờ trình duyệt — đó là chọn một VPN mà ứng dụng máy tính và di động của nó công bố rõ ràng có bảo vệ chống rò rỉ WebRTC và thực thi nó ở tầng mạng của hệ điều hành, để yêu cầu STUN không bao giờ thoát ra khỏi đường hầm được.
Tắt WebRTC so với giới hạn nó
Tắt hoàn toàn WebRTC (theo cách media.peerconnection.enabled của Firefox) đảm bảo không rò rỉ, nhưng nó làm hỏng mọi cuộc gọi video, trò chuyện thoại và chia sẻ màn hình trong trình duyệt. Với hầu hết mọi người, điều đó quá cực đoan.
Cân bằng tốt hơn là giới hạn WebRTC để nó chỉ dùng giao diện của VPN — đây chính xác là điều mà một tiện ích chống rò rỉ hoặc một VPN nhận biết WebRTC thực hiện. Bạn vẫn giữ được cuộc gọi video hoạt động trong khi bịt được rò rỉ IP công khai. Hãy để dành việc tắt hoàn toàn cho một hồ sơ trình duyệt được tăng cường bảo mật chuyên dụng mà bạn không bao giờ gọi điện trên đó.
Câu hỏi thường gặp
Dùng VPN có tự động ngăn rò rỉ WebRTC không?
Không phải lúc nào cũng vậy. VPN định tuyến lưu lượng web thông thường của bạn, nhưng yêu cầu STUN của WebRTC có thể đi theo một đường riêng qua giao diện mạng thật của bạn tùy vào định tuyến và cài đặt chia đường hầm. Nhiều VPN chất lượng có bổ sung bảo vệ chống rò rỉ WebRTC rõ ràng, nhưng bạn nên kiểm tra thay vì cho rằng mặc nhiên có.
Tắt WebRTC có làm hỏng website không?
Nó làm hỏng các tính năng sử dụng WebRTC — hội nghị truyền hình trên trình duyệt, gọi thoại, chia sẻ màn hình và một số truyền tệp ngang hàng. Việc duyệt web thông thường, xem phát trực tuyến và hầu hết các trang đều không bị ảnh hưởng. Nếu bạn phụ thuộc vào cuộc gọi video, hãy giới hạn WebRTC thay vì tắt nó.
Che giấu mDNS .local có giúp tôi an toàn không?
Nó ẩn IP LAN nội bộ của bạn, vốn tốt cho việc giảm khả năng bị lấy dấu vân tay, nhưng không ẩn IP công khai mà STUN phát hiện. Rò rỉ IP công khai — loại quan trọng đối với người dùng VPN — không bị mDNS ảnh hưởng.
Làm sao biết VPN của tôi có thực sự ẩn IP không?
Hãy so sánh IP mà VPN tuyên bố với những gì các dịch vụ thực sự nhìn thấy. Công cụ kiểm tra VPN/proxy và thông tin IP của BrowserInsight hiển thị địa chỉ và chi tiết mạng mà thế giới bên ngoài quan sát được, giúp dễ dàng phát hiện một rò rỉ ẩn.
Kết luận
WebRTC là một công nghệ hữu ích mà các trình duyệt tích hợp mặc định một cách đúng đắn, nhưng quá trình thu thập ứng viên của nó có thể để lộ IP công khai thật của bạn ngay cả khi đứng sau VPN. Cách khắc phục không phải là sợ WebRTC — mà là hiểu cơ chế ICE/STUN, kiểm tra chính cấu hình của bạn và áp dụng mức giảm thiểu phù hợp: giới hạn WebRTC trong đường hầm để dùng hằng ngày, hoặc tắt hoàn toàn trong một hồ sơ được tăng cường bảo mật. Hãy kiểm tra trước, rồi chọn sự đánh đổi phù hợp với cách bạn dùng web.
Đọc thêm:


