WebRTC 유출 테스트: VPN이 실제 IP 주소를 유출하고 있나요?
이 WebRTC 유출 테스트는 추적 스크립트가 활용하는 동일한 P2P 연결 방식을 실행하여 수집된 주소 중 VPN이 감추어야 할 원래의 네트워크 정보가 포함되어 있는지 진단합니다. 카메라나 마이크 권한 요청 없이 빈 데이터 채널로 RTCPeerConnection 을 열고, 두 곳의 공개 STUN 서버에 외부 접속 주소를 질의한 후 일반 HTTPS 요청이 도달하는 IP와 실시간으로 대조합니다.
검사 결과에 표시된 ICE 후보 주소 확인법
WebRTC는 상대방 기기가 사용자와 직접 연결될 수 있는 모든 유효 네트워크 경로를 파악하기 위해 ICE 후보(ICE candidates) 목록을 수집합니다. 본 페이지는 감지된 원본 목록을 유형 및 전송 프로토콜과 함께 표기하며 5초 후 수집을 종료합니다.
그 위쪽에는 HTTP 통신을 통해 확인된 일반 IPv4 및 IPv6 주소가 나열됩니다 — 이는 내 IP 주소 확인 페이지와 일치하는 기본값입니다. 이 값들이 비교 기준점이 되며 판정은 양측의 일치 여부로 결정됩니다.
host, srflx 및 relay — 각 레이블의 의미
- 로컬(host) — 내 네트워크 카드 자체의 주소:
192.168.1.14같은 사설 LAN IP 또는 난독화된.local이름. - 공용(STUN 경유) —
srflx후보로, STUN 서버가 패킷 수신 시 확인한 외부 공용 주소입니다. VPN 사용 시 가장 중요한 지표입니다. - 릴레이(TURN) — 중계 서버를 경유한 트래픽입니다. 본 도구는 STUN 전용이므로 relay 항목은 거의 나타나지 않습니다.
판정 결과별 의미
- 유출 감지됨 — STUN 공용 후보가 HTTP IP와 일치하지 않습니다. VPN 사용 중이라면 WebRTC 패킷이 암호화 터널을 우회한 것입니다.
- 유출 없음 — 양쪽 주소가 완벽하게 일치합니다.
- 로컬 IP 노출됨 — 난독화된 mDNS 호스트명 대신 내부 사설망 LAN 주소가 그대로 노출되었습니다.
- 보호됨 — 로컬 주소가 무작위
.local호스트명 뒤로 안전하게 숨겨졌습니다. - 공용 IP 없음 / WebRTC 차단됨 — STUN 서버에 연결할 수 없거나 브라우저에서 WebRTC가 비활성화되었습니다.
VPN 사용 중에도 WebRTC가 실제 IP를 유출하는 이유
WebRTC는 브라우저 간 영상 통화, 음성 채팅 및 파일 P2P 전송을 위해 탄생했습니다. 서로 다른 공유기 뒤에 있는 두 기기를 연결하려면 NAT 트래버설 기술이 필요하며, 외부에서 보았을 때 이 연결이 어떤 공용 IP에서 출발했는지를 STUN 서버가 확인해 줍니다. 웹사이트는 JavaScript를 통해 이 절차를 백그라운드에서 실행할 수 있습니다.
원래 IP를 숨기고자 할 때 이것이 치명적인 취약점이 됩니다. VPN은 일반 HTTP 웹 트래픽을 터널로 우회시키지만, WebRTC는 자체 UDP 패킷을 STUN 서버로 직접 발송하며 분할 터널링 환경에서는 통신사 기본 경로를 타게 됩니다. 브라우저 확장 프로그램형 VPN이 대표적입니다. 이들은 웹 요청만 프록시할 뿐 운영체제의 UDP 스택을 터널링하지 못하므로, HTTP 기반 VPN 검사 결과와 상충될 수 있습니다.
임의의 .local 호스트명은 유출이 아닙니다
호스트 후보 항목에 192.168.1.14 대신 7b3f9c21-4d0a-48e7.local 같은 문자열이 표시된다면 보안 기능이 정상 작동하는 것입니다. 이는 mDNS 난독화 기술로, 브라우저가 로컬 네트워크 카드용 임시 멀티캐스트 DNS 이름을 생성하여 실제 사설 IP 대신 제공합니다. Chrome, Edge, Brave, Firefox, Safari 모두 기본 적용되어 있습니다. 주의할 점은 이것이 내부망 사설 IP만 보호할 뿐 VPN 공용 IP 유출을 막아주지는 못하며, 카메라나 마이크 권한을 승인한 사이트는 실제 로컬 IP를 열람할 수 있다는 것입니다.
Chrome 및 Edge에서 WebRTC 유출을 차단하는 방법
두 브라우저 모두 일반 설정 메뉴에 단순 끄기 스위치가 없으며, chrome://flags 나 edge://flags 의 비활성화 플래그도 삭제되었습니다. 실무적으로 적용 가능한 세 가지 해결책은 다음과 같습니다:
- 브라우저 확장 대신 시스템 전체를 지원하는 풀터널 VPN 클라이언트를 사용하십시오. 모든 UDP 패킷이 암호화 터널을 통과하면 STUN 역시 VPN IP만 확인하게 됩니다.
- 확장 프로그램을 통해 IP 처리 정책을 강제하십시오. WebRTC Leak Prevent 같은 도구로
chrome.privacy.network.webRTCIPHandlingPolicy값을default_public_interface_only나disable_non_proxied_udp로 설정하면 로컬 노출을 원천 차단합니다. - 운영체제 정책(GPO/레지스트리)을 적용하십시오. Windows의
SOFTWARE\Policies\Microsoft\Edge경로에서WebRtcLocalhostIpHandling(Chrome은WebRtcIPHandling) 값을AllowPublicInterfaceOnly나DisableNonProxiedUdp로 지정합니다. 브라우저 재시작 후edge://policy에서 적용 여부를 확인하십시오.
Firefox에서 WebRTC를 완전히 비활성화하는 방법
Firefox는 메이저 데스크톱 브라우저 중 유일하게 완전한 끄기 스위치를 제공합니다. 주소창에 about:config 를 입력하고 경고를 수락한 뒤, media.peerconnection.enabled 항목을 검색하여 더블클릭으로 false 로 변경합니다. 브라우저 재시작 없이 즉시 전역 비활성화되며 본 테스트는 차단 상태로 표시됩니다.
단, 이는 웹 기반 Google Meet, Teams, Discord, Zoom 등의 연결을 중단시키는 강력한 조치입니다. 화상 회의를 유지하면서 안전을 도모하려면 위 설정을 true로 유지하고 media.peerconnection.ice.default_address_only 항목을 true 로 변경하십시오. Firefox가 기본 경로(VPN 터널) 주소만 외부에 노출합니다.
Brave 브라우저에서 WebRTC 유출을 방지하는 설정
Brave는 Chrome이 숨겨둔 제어 권한을 사용자가 직접 설정할 수 있도록 제공합니다. brave://settings/privacy 로 이동하여 WebRTC IP handling policy 를 찾으십시오. VPN 사용 시 적합한 옵션은 다음과 같습니다:
- Default — 모든 어댑터를 검색하여 내부 사설 IP가 노출될 수 있습니다.
- Default Public and Private Interfaces — 기본 경로를 사용하지만 내부 사설 IP는 여전히 노출됩니다.
- Default Public Interface Only — 기본 경로만 사용하고 로컬 주소를 숨깁니다. 통화 기능이 정상 유지되므로 일상 용도로 가장 적합합니다.
- Disable Non-Proxied UDP — 프록시가 UDP를 지원하지 않으면 TCP를 강제합니다. 가장 엄격한 수준(Tor 창의 기본값)이지만 P2P 연결이 원활하지 않을 수 있습니다.
Safari, iPhone 및 Android 환경의 주의점
모바일 및 WebKit 환경에서는 데스크톱 기준의 일반적인 가이드가 적용되지 않습니다.
macOS Safari
최신 Safari에는 영구적인 전역 끄기 스위치가 없습니다. 개발자용 메뉴의 설정도 브라우저를 닫으면 초기화됩니다. Safari는 카메라 허용 전까지 로컬 IP를 mDNS로 보호하므로, Safari > 설정 > 웹 사이트 에서 권한을 제한하고 시스템 전체 VPN을 사용하는 것이 가장 현실적인 대안입니다.
iPhone 및 iPad (iOS/iPadOS)
iOS의 모든 브라우저는 의무적으로 WebKit 엔진을 사용합니다. iPhone용 Chrome이나 Firefox에는 about:config 나 확장 기능이 지원되지 않으며 콘텐츠 차단기도 WebRTC를 필터링하지 못합니다. 유출을 막으려면 설정 > VPN 에서 모든 UDP 패킷을 터널링하는 시스템 VPN을 활성화하고 Safari에서 다시 확인하십시오.
Android 환경
안드로이드용 Chrome은 플래그나 확장 기능을 지원하지 않습니다. 안드로이드용 Brave는 동일한 IP 처리 정책 메뉴를 제공합니다. Firefox 모바일은 Beta 및 Nightly 버전에서만 about:config 에 접근할 수 있습니다. 시스템 단위 대책으로는 안드로이드 설정에서 상시 가동 VPN 과 VPN 미사용 연결 차단 을 활성화하는 것입니다.
본 유출 테스트가 감지하지 못하는 범위
이 페이지는 브라우저 내부 스크립트가 정상적인 API 호출을 통해 수집할 수 있는 정보만 분석합니다. 운영체제 레벨의 잘못된 라우팅이나 VPN이 처리하지 않는 IPv6 트래픽 등 브라우저 하위 계층의 누수는 진단하지 못하며, DNS 질의 유출 역시 별도입니다. 방화벽이 STUN을 차단하면 „공용 IP 없음“으로 표시되지만 이는 응답이 없음을 의미할 뿐 안전을 보장하지 않습니다. 또한 IP는 식별 요소 중 하나일 뿐이며, 내 브라우저 정보 확인 에서 열람 가능한 화면 해상도, 글꼴 및 헤더 지문은 깨끗한 VPN IP 뒤에서도 사용자를 특정할 수 있습니다.
자주 묻는 질문 (FAQ)
VPN에 연결되어 있어도 WebRTC로 인해 실제 IP가 유출될 수 있나요?
네, 실제로 빈번하게 발생합니다. WebRTC는 STUN 서버로 자체 UDP 패킷을 직발송합니다. 분할 터널링이나 단순 브라우저 확장형 VPN을 사용할 경우 이 UDP 패킷이 터널을 타지 않고 일반 통신사 회선으로 나가버립니다. STUN 서버는 실제 통신사 IP를 기록하고 웹페이지는 JS로 이를 읽어냅니다. 시스템 전체 풀터널 VPN이 이를 완벽히 차단합니다.
Edge 브라우저에서 WebRTC를 완전히 끄는 방법이 있나요?
일반 메뉴 설정으로는 불가능합니다. Edge에는 토글 스위치가 없으며 이전 about:flags 플래그도 삭제되었습니다. Windows 환경이라면 레지스트리 SOFTWARE\Policies\Microsoft\Edge 경로에서 WebRtcLocalhostIpHandling 정책을 AllowPublicInterfaceOnly 나 DisableNonProxiedUdp 로 지정하여 해결할 수 있습니다. 브라우저 재시작 후 edge://policy 에서 확인하십시오.
Firefox에서 WebRTC와 PeerConnection을 끄는 경로는 어디인가요?
주소창에 about:config 를 입력하고 media.peerconnection.enabled 항목을 더블클릭하여 false 로 변경합니다. 재시작 없이 즉시 WebRTC가 비활성화되지만 웹 화상 통화가 작동하지 않게 됩니다. 음성/화상 통화를 유지하려면 위 항목을 true로 두고 media.peerconnection.ice.default_address_only 를 true 로 설정하십시오.
Safari에서 WebRTC를 영구적으로 비활성화할 수 있나요?
최신 Safari에서는 영구적인 비활성화가 불가능합니다. 과거 실험적 기능 메뉴는 제거되었으며 개발자용 설정도 세션 종료 시 리셋됩니다. Safari는 기본적으로 내부 IP를 mDNS로 보호하므로, 'Safari > 설정 > 웹 사이트'에서 사이트 권한을 철저히 제한하고 시스템 전체 VPN을 적용하는 것이 최선입니다.
Brave에서 WebRTC 유출을 막는 가장 좋은 설정은 무엇인가요?
brave://settings/privacy 에서 VPN이나 프록시를 켤 때 WebRTC IP handling policy 를 "Disable Non-Proxied UDP" 로 설정하십시오. WebRTC가 프록시를 통한 TCP 통신만 사용하여 STUN이 실제 IP를 알 수 없게 됩니다. 통화 기능 유지가 필요하다면 "Default Public Interface Only" 가 최적의 절충안입니다.
어떤 WebRTC IP 처리 정책을 선택해야 하나요?
대부분의 사용자에게는 "Default Public Interface Only" 가 권장됩니다. 로컬 네트워크 카드를 숨기면서 UDP를 유지하여 화상 회의를 정상적으로 지원합니다. 프록시나 VPN 뒤에서 극한의 익명성이 필요한 경우에만 "Disable Non-Proxied UDP" 를 선택하십시오. 기본값 설정들은 내부 사설망 주소를 지속적으로 노출합니다.
사설 IP 주소가 WebRTC를 통해 외부에 노출되는 이유는 무엇인가요?
최신 브라우저에서는 더 이상 원시 IP가 그대로 노출되지 않습니다. Chrome, Edge, Brave, Firefox, Safari는 내부 사설 IP를 .local 로 끝나는 일회용 임의 mDNS 이름으로 대체합니다. 웹페이지는 192.168.1.14 대신 이 난독화된 이름을 받게 됩니다. 원시 IP가 노출된다면 mDNS 보호 기능이 꺼져 있는 상태입니다.