VPN이 실제 적용됐는지 확인하는 3단계: IP·DNS·앱별 점검
연결됐다고 제대로 가는 건 아닙니다. IP 확인, DNS 확인, 앱별 확인까지 3단계로 점검하고 '연결은 됐는데 실제로는 터널을 타지 않는' 흔한 경우도 정리했습니다.
클라이언트 상태 표시는 켜져 있는데 웹페이지는 여전히 예전 그대로인 경우—'VPN이 정말 적용된 걸까'라는 질문이 가장 많이 나오는 지점입니다. 답은 연결 상태를 한 번 더 보는 것이 아니라 세 가지 층위를 순서대로 확인하는 것입니다. 출구 주소가 실제로 바뀌었는지, 도메인 조회가 터널을 따라가는지, 지금 쓰는 앱이 프록시에 포함됐는지. 세 단계를 모두 통과해야 제대로 된 것이고, 첫 단계만 보고 끝내면 뒤의 두 층에서 새는 부분을 놓치게 됩니다.
왜 '연결됨'이 적용을 뜻하지 않는가
상태 표시가 알려주는 것은 한 가지뿐입니다. 로컬에서 노드까지의 터널이 만들어졌다는 사실입니다. 트래픽이 실제로 넘겨졌는지, 넘겨진 뒤 어떤 규칙을 탔는지, 도메인 조회가 함께 따라갔는지는 알려주지 않습니다. 이 세 가지는 각각 클라이언트의 트래픽 처리 모드, 분할 라우팅 규칙, DNS 설정이 결정하며, 어느 한 곳이 어긋나면 '연결됨으로 표시되지만 실제로는 가지 않는' 상태가 됩니다.
트래픽을 넘기는 방식은 보통 세 가지입니다. 시스템 프록시는 시스템 프록시 설정을 읽는 프로그램에만 적용되며, 브라우저는 대개 읽지만 데스크톱 클라이언트는 읽지 않는 경우가 많습니다. TUN 가상 네트워크 인터페이스는 네트워크 계층에서 IP 트래픽을 넘겨받아 적용 범위가 가장 넓습니다. 앱별 프록시는 목록에 있는 앱만 터널로 보내고, 목록 밖 앱은 그대로 직접 연결합니다. '적용됐는지'를 판단하는 방법은 지금 어느 방식을 쓰고 있는지에 따라 달라집니다.
프로토콜은 또 다른 층입니다. Shadowsocks, VMess, VLESS, Trojan은 트래픽을 캡슐화해 노드로 보내고, Hysteria2와 TUIC는 QUIC 기반으로 UDP로 전송해 네트워크가 불안정한 환경에서 더 안정적입니다. 프로토콜이 정하는 것은 '어떻게 보내는가'이며 '어떤 트래픽을 보내는가'가 아닙니다. 그래서 프로토콜을 바꿔도 분할 라우팅 오판은 해결되지 않고 링크 품질만 개선됩니다.
구독 링크는 노드 목록을 담는 통로일 뿐입니다. 클라이언트가 구독을 가져오면 링크 안의 노드 목록으로 설정을 만듭니다. 구독이 만료되거나 링크가 더 이상 유효하지 않으면 노드 목록은 갱신되지 않지만, 이미 저장된 노드는 핸드셰이크에 성공할 수 있습니다. 이런 경우에도 상태 표시는 켜지지만 실제 트래픽은 전달되지 않습니다.
1단계: 출구 IP와 위치 확인
먼저 기준값을 기록합니다. 연결하기 전에 브라우저에서 아무 주소 조회 페이지를 열거나 터미널에서 명령을 한 줄 실행해, 현재 출구 주소와 위치를 적어 둡니다.
# 연결 전: 출구 주소와 위치 기록
curl -s https://ipinfo.io/json
# 연결 후: ip와 country 두 항목이 모두 바뀌어야 함
curl -s https://ipinfo.io/json
노드에 연결한 뒤에는 시크릿 창을 새로 열어 다시 조회합니다. 시크릿 창을 쓰는 이유는 캐시와 브라우저 확장 프로그램의 간섭을 배제하기 위해서입니다. 일부 프록시 확장은 요청을 자체적으로 가로채서 결과가 클라이언트와 무관한 것처럼 보이게 만들 수 있습니다.
판단 기준은 두 가지뿐입니다. 주소가 바뀌었는지, 그리고 위치가 선택한 노드의 지역과 일치하는지. 두 가지를 동시에 만족해야 트래픽이 실제로 해외 출구로 나갔다고 볼 수 있습니다.
구분해서 봐야 하는 경우가 몇 가지 있습니다. 공개 IP 위치 데이터베이스는 서로 차이가 있어, 애니캐스트 주소나 국가 간 브로드캐스트 주소는 인접 지역으로 표시될 수 있는데 이는 이상이 아닙니다. 스트리밍 플랫폼은 자체 판정 데이터베이스를 쓰기 때문에 공개 DB와 일치하지 않으며, '주소 위치는 맞는데 플랫폼은 여전히 국내 기준으로 보여주는' 결과가 나올 수 있습니다. 반대로 주소가 바뀌지 않았다고 해서 반드시 고장은 아닙니다. 분할 라우팅 모드에서 국내 사이트 접속은 원래 로컬 출구로 나가는 것이므로, 테스트해야 하는 것은 해외 사이트에 보낸 그 요청입니다.
분할 라우팅 모드에서 국내 사이트가 로컬 주소로 표시되는 것은 설계된 동작입니다. 출구 주소를 확인할 때는 반드시 프록시를 타는 것이 확실한 해외 사이트를 쓰거나, 잠시 전역 모드로 바꿔 다시 측정해 비교하세요.
2단계: 도메인 조회가 국내로 새지 않는지 확인
DNS 유출이란 트래픽은 터널로 들어갔는데 도메인 조회 요청은 따라 들어가지 않고 국내 통신사로 전송되는 상황을 말합니다. 결과는 두 가지입니다. 접속 목록이 국내 리졸버에 노출되고, 조회 결과가 국내 위치 기준으로 반환되어 '출구 주소는 해외인데 받아오는 내용은 국내용'이 됩니다.
확인 방법은 복잡하지 않습니다. DNS 유출 테스트 페이지를 열면 실제로 응답한 리졸버와 그 위치를 보여줍니다. 정상이라면 응답 서버가 출구 지역에 있거나 서비스에서 내려준 DNS입니다. 비정상이라면 응답 서버가 국내 통신사입니다. 이때도 시크릿 창을 사용해 브라우저에 캐시된 조회 결과가 판단을 흐리지 않게 하세요.
분할 라우팅 모드에는 예외가 하나 있습니다. 국내 도메인이 로컬 DNS로 조회되는 것은 설계된 동작이며 유출이 아닙니다. 봐야 할 것은 해외 도메인 부분의 응답 서버입니다.
브라우저에 내장된 보안 DNS(DoH)는 시스템과 클라이언트의 DNS 설정을 우회해 제3자 리졸버에 직접 질의합니다. 'IP는 맞는데 내용은 여전히 국내용'인 흔한 원인입니다. 테스트 전에 브라우저 설정에서 '보안 DNS 사용' 상태를 확인하고, 끈 상태로 다시 측정해 비교하세요.
IPv6는 같은 문제의 다른 얼굴입니다. 터널이 IPv4만 넘겨받으면 IPv6를 지원하는 사이트는 로컬 IPv6 출구로 나가고, 테스트 페이지는 국내 주소를 반환합니다. 처리 방법은 두 가지입니다. 시스템에서 IPv6를 끄거나, 클라이언트가 IPv6 트래픽까지 넘겨받게 하는 것입니다.
3단계: 앱별 설정과 분할 라우팅 규칙 확인
세 번째 층은 클라이언트 메인 화면에 없기 때문에 가장 자주 건너뜁니다. 앱별 프록시는 '목록에 있는 앱만 프록시'하는 방식입니다. 목록 밖 앱은 터널이 만들어져 있어도 트래픽이 그대로 직접 연결됩니다. 확인 방법은 클라이언트의 앱별 목록을 열어 사용할 앱이 들어 있는지 하나씩 보고, 목록을 고친 뒤 대상 앱을 재시작하는 것입니다. 대부분의 프로그램은 시작할 때 프록시 설정을 한 번만 읽습니다.
플랫폼별 차이
데스크톱에서는 시스템 프록시와 TUN 두 가지 모드를 주로 씁니다. TUN은 모든 프로그램을 커버하고, 시스템 프록시는 시스템 설정을 읽는 프로그램만 커버합니다. Android 클라이언트는 앱별 프록시를 일반적으로 제공합니다. iOS는 시스템 제약 때문에 보통 터널 전체를 통과하는 방식으로 동작하며 같은 수준의 앱별 스위치가 없습니다. Linux에서는 명령줄과 시스템 프록시를 쓰는 경우가 많아 http_proxy, https_proxy 환경 변수를 직접 설정하거나 TUN 모드로 바꿔야 합니다. 같은 구독이 플랫폼마다 다르게 동작한다면 대개 이 층이 원인입니다
분할 라우팅 규칙이 판단에 미치는 영향
규칙은 보통 도메인 접미사, GeoIP 지역, 프로세스 이름으로 매칭되며, 직접 연결로 잡힌 도메인은 터널로 들어가지 않습니다. 판단 방법은 간단합니다. 클라이언트를 잠시 전역 모드로 바꾸고 같은 사이트에 다시 접속해 보세요. 전역에서는 되고 분할로 돌리면 안 된다면 문제는 노드가 아니라 규칙에 있습니다. 회선 유형(IEPL 전용선, 중계, 직접 연결)은 링크 안정성과 경유 경로에 영향을 줄 뿐 '어떤 트래픽이 프록시되는가'를 바꾸지 않으므로, 점검할 때 둘을 섞지 마세요.
| 계층 | 확인 방법 | 정상 동작 | 이상 신호 |
|---|---|---|---|
| 출구 주소 | 연결 전후로 주소와 위치를 각각 확인 | 주소가 바뀌고 위치가 노드 지역과 일치 | 주소가 그대로이거나 위치가 노드와 불일치 |
| 도메인 조회 | DNS 유출 테스트 페이지 | 응답 서버가 출구 지역이거나 서비스에서 내려준 DNS | 응답 서버가 국내 통신사 |
| 분할 라우팅 규칙 | 전역 모드로 바꿔 같은 사이트 비교 | 전역과 분할 결과가 동일 | 전역 모드에서만 정상 |
| 앱별 설정 | 클라이언트의 앱별 목록을 하나씩 확인 | 대상 앱이 프록시 목록에 포함 | 앱이 목록에 없어 실제로는 직접 연결 |
| IPv6 | IPv6 지원 테스트 페이지 | IPv4 출구와 일치하거나 응답 없음 | 로컬 IPv6 주소 반환 |
상태는 정상인데 터널을 타지 않는 일곱 가지 경우
아래 경우들은 상태 표시가 모두 정상이지만 실제로는 의도대로 동작하지 않습니다. 증상별로 대조해 점검하는 편이 반복 재연결보다 효과적입니다.
| 증상 | 흔한 원인 | 해결 |
|---|---|---|
| 연결됨 상태인데 브라우저가 여전히 로컬 주소를 표시 | 클라이언트가 시스템 프록시 모드인데 해당 프로그램이 시스템 프록시를 읽지 않음, 또는 도메인이 직접 연결 규칙에 걸림 | TUN 모드로 바꾸거나 도메인을 프록시 규칙에 추가한 뒤 다시 측정 |
| 출구 주소는 맞는데 일부 사이트가 여전히 국내 기준으로 표시 | 브라우저 보안 DNS가 클라이언트를 우회 | 브라우저 보안 DNS를 끄고 다시 측정 |
| 특정 앱만 터널을 타지 않음 | 해당 앱이 앱별 목록에 없음 | 체크한 뒤 앱을 재시작하고 다시 시도 |
| 테스트 페이지가 로컬 IPv6 주소를 반환 | 터널이 IPv4만 넘겨받음 | 시스템 IPv6를 끄거나 클라이언트가 IPv6를 넘겨받게 설정 |
| 노드를 바꿔도 안 되다가 잠시 뒤 정상 | DNS 캐시와 연결 재사용 | 시크릿 창을 쓰거나 캐시를 지우고 다시 측정 |
| 해외 사이트가 전부 열리지 않음 | 구독 만료, 트래픽 소진 또는 노드 장애 | 구독 상태를 확인하고 노드나 회선 유형을 바꿔 재측정 |
| 연결 시 인증서 또는 시간 오류가 표시됨 | 시스템 시간 오차가 커서 핸드셰이크 단계에서 실패 | 시스템 시간을 동기화한 뒤 다시 연결 |
한 번에 끝내는 자가 점검 목록
위 세 층을 하나의 체크리스트로 합쳤습니다. 노드를 바꿀 때, 기기를 바꿀 때, 네트워크를 바꿀 때마다 한 번씩 돌리면 보통 2~3분이면 끝납니다.
- ✅ 연결 전에 이 기기의 출구 주소와 위치를 한 번 기록해 기준선으로 삼습니다.
- ✅ 연결 후 시크릿 창으로 출구 주소를 다시 확인해 캐시와 확장 프로그램 간섭을 배제합니다.
- ✅ DNS 유출 테스트로 응답 서버가 국내 통신사가 아닌지 확인합니다.
- ✅ 지금이 전역 모드인지 분할 모드인지, 대상 도메인이 어느 규칙을 타는지 파악합니다.
- ✅ 앱별 목록에서 사용할 앱을 하나씩 확인하고, 목록을 고친 뒤 앱을 재시작합니다.
- ✅ 브라우저 내장 보안 DNS를 끄거나 하나로 통일해 클라이언트 우회를 막습니다.
- ✅ 구독 유효 기간과 남은 트래픽을 확인해 노드 목록이 최신인지 봅니다.
- ✅ 시스템 시간을 동기화해 핸드셰이크 단계에서 실패하지 않게 합니다.
- ❌ 클라이언트 상태 표시만 보고 적용됐다고 판단합니다.
- ❌ 같은 탭에서 새로고침만 반복하며 결과를 판단합니다.
- ❌ 지연이나 대역폭 수치로 출구가 맞는지 판단합니다. 둘은 다른 문제입니다.
세 단계를 습관으로
세 단계의 순서는 바꿀 수 없습니다. 먼저 출구 주소가 바뀌었는지 확인하고, 다음으로 조회가 따라가는지, 마지막으로 지금 쓰는 앱이 프록시 범위에 있는지 확인합니다. 순서를 바꾸면 오판이 생깁니다. 첫 단계만 보고 다 정상이라고 여기면 뒤 두 층의 어긋남이 일상 사용까지 따라와 '어떤 때는 열리고 어떤 때는 안 열리는' 증상으로 나타납니다.
정리: 출구 주소, 도메인 조회, 앱별 설정과 분할 라우팅까지 세 층을 모두 통과해야 실제로 적용된 것입니다. 어느 한 층이 이상하면 전역 모드로 한 번 대조 테스트를 해보면 문제가 규칙인지, DNS인지, 앱 자체인지 바로 좁힐 수 있습니다. 노드 사이를 계속 갈아타는 것보다 빠릅니다.
본 서비스는 현재 90+ 국가 / 160+ 회선을 제공하며, 클라이언트는 Windows, macOS, iOS, Android, Linux를 지원합니다. 기기 수 제한이 없고 로그를 기록하지 않으며 7일 무조건 환불이 가능합니다. 가입에는 사용자 이름과 비밀번호만 필요하고 이메일 주소는 필요하지 않습니다. 노드를 바꾼 뒤에는 위 세 단계로 다시 측정해 보세요. 감으로 판단하는 것보다 시간이 덜 듭니다.