WebRTC Leak: How to Detect and Fix It When Using Proxies
WebRTC (Web Real-Time Communication) is a browser technology that enables peer-to-peer audio, video, and data sharing directly between browsers. While it powers legitimate features like video calls and file transfers, WebRTC has a well-known side effect: it can reveal your real IP address even when you are using a proxy or VPN.
This leak occurs because WebRTC uses STUN (Session Traversal Utilities for NAT) servers to discover your device’s public and local IP addresses. These STUN requests bypass proxy settings entirely, sending your real IP address directly to the STUN server and making it available to any website that requests it via JavaScript.
Why WebRTC Leaks Matter for Proxy Users
If you are using proxies for data collection, account management, or competitive research, a WebRTC leak completely undermines your anonymity:
- Target websites detect your real IP alongside your proxy IP, revealing that you are using a proxy
- Account management platforms can link multiple accounts to your real IP despite using different proxies for each account
- Anti-bot systems use WebRTC as one of several fingerprinting vectors to identify and block automated traffic
- Your geographic location is exposed through your real IP even if your proxy exit node is in a different country
The severity is amplified because many proxy users are unaware of WebRTC leaks. Everything appears to work correctly through the proxy while the real IP is silently exposed in the background.
How to Detect WebRTC Leaks
Method 1: Browser-Based Leak Test
The quickest way to check for WebRTC leaks:
- Configure your proxy in your browser
- Visit a WebRTC leak test page such as browserleaks.com/webrtc
- The page will display all IP addresses discovered via WebRTC
- If your real IP address (not the proxy IP) appears, you have a WebRTC leak
The test will show several types of IP addresses:
- Public IP (via STUN): Your real public IP address discovered through STUN servers
- Local IP: Your private network IP (192.168.x.x, 10.x.x.x, etc.)
- IPv6 address: If your connection supports IPv6, this address may also leak
Method 2: JavaScript Console Test
You can test for WebRTC leaks directly in the browser console:
// Create a peer connection to trigger STUN discovery
const pc = new RTCPeerConnection({
iceServers: [{ urls: "stun:stun.l.google.com:19302" }]
});
pc.createDataChannel("");
pc.createOffer().then(offer => pc.setLocalDescription(offer));
pc.onicecandidate = (event) => {
if (event.candidate) {
console.log("Candidate:", event.candidate.candidate);
// Look for your real IP in the candidate string
}
};Run this in the developer console while connected to your proxy. If the output contains your real public IP address, WebRTC is leaking.
Method 3: Automated Testing
For automated proxy testing workflows, use a headless browser to check for WebRTC leaks programmatically:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
# Disable WebRTC for the test (to compare behavior)
options.add_argument("--disable-webrtc")
# Add proxy
options.add_argument("--proxy-server=http://proxy:8080")
driver = webdriver.Chrome(options=options)
driver.get("https://browserleaks.com/webrtc")How to Fix WebRTC Leaks
Chrome
Chrome does not provide a built-in setting to disable WebRTC, but you can use extensions or launch flags:
Using a browser extension: Install “WebRTC Leak Prevent” or “WebRTC Control” from the Chrome Web Store. Configure it to disable non-proxied UDP connections.
Using a Chrome launch flag:
# Limit WebRTC to the proxy interface only
chrome --force-webrtc-ip-handling-policy=disable_non_proxied_udpChrome Enterprise Policy: For managed deployments, set the WebRtcIPHandling policy:
{
"WebRtcIPHandlingPolicy": "disable_non_proxied_udp"
}This policy forces WebRTC to use only the proxy interface, preventing it from discovering your real IP through STUN.
Firefox
Firefox allows you to disable WebRTC entirely through its configuration:
- Navigate to
about:config - Search for
media.peerconnection.enabled - Set it to
false
This completely disables WebRTC, which also disables browser-based video calling and similar features. If you need WebRTC for specific sites, consider using a separate browser profile.
Additional Firefox settings for leak prevention:
media.peerconnection.turn.disable = true
media.peerconnection.use_document_iceservers = false
media.peerconnection.video.enabled = false
media.peerconnection.identity.timeout = 1Safari
Safari restricts WebRTC by default to some extent, but for additional protection:
- Open Safari > Preferences > Advanced
- Check “Show Develop menu in menu bar”
- In the Develop menu, navigate to WebRTC and disable ICE candidate restrictions as needed
Safari’s implementation is more restrictive than Chrome’s by default, but it can still leak local IP addresses.
Edge
Microsoft Edge shares Chrome’s Chromium base and has the same WebRTC behavior. Use the same extension-based approach or launch flags:
- Install a WebRTC leak prevention extension
- Or launch Edge with
--force-webrtc-ip-handling-policy=disable_non_proxied_udp
Anti-Detect Browsers
If you use anti-detect browsers such as Multilogin, GoLogin, or AdsPower, they typically include built-in WebRTC leak prevention:
- Multilogin: WebRTC can be set to “Disabled,” “Altered” (spoofs your IP), or “Real”
- GoLogin: WebRTC settings allow you to substitute the proxy IP as the WebRTC IP
- AdsPower: Offers WebRTC masking that replaces your real IP with the proxy IP
These browsers are purpose-built for proxy-based workflows and handle WebRTC leaks as part of their fingerprint management.
WebRTC Leaks and Mobile Proxies
Mobile proxies provide IP addresses from real mobile carriers, which gives them a high trust score on target websites. A WebRTC leak while using a mobile proxy is particularly damaging because:
- The target website sees your mobile proxy IP via HTTP headers, suggesting a legitimate mobile user
- Simultaneously, WebRTC reveals your real IP, which is likely a residential or data center IP
- This mismatch immediately flags the session as proxy-assisted, negating the advantage of using mobile proxies
Always disable or control WebRTC when using mobile proxies to maintain the authenticity of the mobile IP fingerprint.
Testing After Applying Fixes
After disabling or restricting WebRTC, verify the fix:
- Clear your browser cache and restart the browser
- Connect through your proxy
- Run the WebRTC leak test again
- Verify that only the proxy IP (or no IP at all) appears in the results
- Confirm that the local IP (192.168.x.x) is also not exposed if local IP hiding is important to your use case
For a complete proxy verification process that includes WebRTC testing, consult the proxy testing checklist.
WebRTC in Headless Browsers and Automation
If you are running web scraping or automation with headless browsers, WebRTC behavior differs:
Puppeteer (Chrome headless):
const browser = await puppeteer.launch({
args: [
'--proxy-server=http://proxy:8080',
'--force-webrtc-ip-handling-policy=disable_non_proxied_udp',
'--disable-webrtc-hw-encoding',
'--disable-webrtc-hw-decoding'
]
});Playwright:
const browser = await chromium.launch({
proxy: { server: 'http://proxy:8080' },
args: ['--force-webrtc-ip-handling-policy=disable_non_proxied_udp']
});Selenium:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--force-webrtc-ip-handling-policy=disable_non_proxied_udp')
options.add_argument('--proxy-server=http://proxy:8080')Common Mistakes
- Forgetting to test after browser updates: Browser updates can reset WebRTC settings or disable extensions that were preventing leaks
- Only checking public IP: WebRTC can also leak your local/private IP, which can be used for fingerprinting even if the public IP does not leak
- Assuming HTTP proxies prevent WebRTC leaks: HTTP proxies only handle HTTP/HTTPS traffic. WebRTC uses UDP, which bypasses HTTP proxies entirely. For more details on these protocol differences, see the proxy glossary
- Relying solely on extensions: Extensions can be disabled, updated, or bypassed. Combine extension-based protection with browser launch flags for defense in depth
Conclusion
WebRTC leaks represent one of the most common ways proxy anonymity is compromised. The leak is silent, invisible to the user, and detectable by any website that runs a simple JavaScript snippet. Fixing it requires disabling or restricting WebRTC at the browser level, and the specific method depends on your browser choice. Always test for WebRTC leaks as a standard part of your proxy configuration workflow, and retest after every browser update to ensure your protection remains intact.
- Common cURL and Python Requests Proxy Errors (With Code Fixes)
- How to Debug Proxy Issues Using Charles, Fiddler, and mitmproxy
- Anti-Bot Detection Glossary: 50+ Terms Defined
- Anti-Bot Terminology Glossary: Complete A-Z Reference 2026
- Backconnect Proxies Deep Dive: Architecture and Real-World Performance
- Best Proxies in Southeast Asia: Singapore, Thailand, Indonesia, Philippines
- Common cURL and Python Requests Proxy Errors (With Code Fixes)
- How to Debug Proxy Issues Using Charles, Fiddler, and mitmproxy
- 403 Forbidden Error: What It Means & How to Fix It
- 407 Proxy Authentication Required: Fix Guide
- Anti-Bot Detection Glossary: 50+ Terms Defined
- Anti-Bot Terminology Glossary: Complete A-Z Reference 2026
Related Reading
- Common cURL and Python Requests Proxy Errors (With Code Fixes)
- How to Debug Proxy Issues Using Charles, Fiddler, and mitmproxy
- 403 Forbidden Error: What It Means & How to Fix It
- 407 Proxy Authentication Required: Fix Guide
- Anti-Bot Detection Glossary: 50+ Terms Defined
- Anti-Bot Terminology Glossary: Complete A-Z Reference 2026