v2rayN 또는 v2rayNG를 정상적으로 사용할 수 있지만 중국 본토 사이트가 프록시로 우회되거나 도메인 분기가 작동하지 않고 규칙 태그를 인식하지 못하는 사용자를 위한 글입니다. 두 Geo 데이터의 매칭 방식, 데스크톱과 Android에서의 업데이트 절차, 버전 확인 방법, 규칙 검증 명령과 문제 해결 방법을 다룹니다. 작업을 마치면 노드를 계속 바꾸지 않고 문제가 데이터 파일, 규칙 순서 또는 DNS 확인 중 어디에서 발생했는지 판단할 수 있습니다.
GeoIP와 GeoSite는 각각 어떤 문제를 해결하나요?
V2Ray과 Xray의 라우팅 모듈은 먼저 연결 대상이 무엇인지 확인한 뒤 직접 연결, 프록시 또는 차단 아웃바운드 중 하나를 선택합니다. 대상이 IP 주소라면 GeoIP 데이터 집합으로 해당 네트워크 범위를 판단하고, 도메인이 유지된다면 GeoSite 데이터 집합으로 사이트 분류를 확인할 수 있습니다. 두 파일은 클라이언트 프로그램 자체가 아니며 VMess, VLESS 등의 프로토콜 매개변수도 바꾸지 않습니다. 라우팅 매칭에 필요한 데이터만 제공합니다.
geoip.dat에는 지역이나 용도별로 정리된 IP 대역이 저장됩니다. 흔히 사용하는 규칙은 geoip:cn과 geoip:private입니다. 전자는 일반적으로 중국 본토 IP를 매칭하고, 후자는 LAN 및 루프백 주소 같은 예약 대역을 매칭합니다. 데이터베이스가 오래되면 새로 할당된 주소 대역이 기존 집합에 매칭되지 않아 마지막 기본 규칙으로 넘어갈 수 있습니다.
geosite.dat에는 카테고리별 도메인 집합이 저장됩니다. 대표적인 태그로 geosite:cn, geosite:geolocation-!cn 및 일부 데이터 제공처의 분류 태그가 있습니다. 매칭 대상은 웹페이지 콘텐츠가 아니라 도메인입니다. 사이트가 도메인을 변경하거나 정적 리소스 도메인을 추가하고 서비스 진입점을 조정하면 오래된 데이터는 주 도메인만 매칭하고 이미지, API 또는 로그인 도메인을 놓칠 수 있습니다.
| 데이터 파일 | 주요 매칭 대상 | 대표 규칙 | 일반적인 용도 |
|---|---|---|---|
geoip.dat |
IPv4, IPv6 대역 | geoip:private |
LAN 주소 직접 연결 |
geoip.dat |
지역별 IP 집합 | geoip:cn |
중국 본토 주소 직접 연결 |
geosite.dat |
도메인 및 도메인 접미사 | geosite:cn |
중국 본토 도메인 직접 연결 |
geosite.dat |
중국 본토 외 도메인 집합 | geosite:geolocation-!cn |
프록시 아웃바운드로 전달 |
업데이트 전에 버전, 경로와 현재 규칙을 기록하세요
연결에 문제가 생겼다고 해서 모든 파일을 바로 덮어쓰지 마세요. 먼저 클라이언트 버전, 코어 종류, 현재 아웃바운드 태그와 사용자 지정 라우팅 규칙을 기록해야 업데이트 후 변화의 원인을 판단할 수 있습니다. 이 글의 경로는 v2rayN 7.x, v2rayNG 1.10.x 및 Xray 코어를 기준으로 하며, 마이너 버전에 따라 메뉴 문구는 달라질 수 있지만 확인 순서는 같습니다.
데스크톱에서는 현재 실제로 사용 중인 코어 디렉터리도 확인해야 합니다. v2rayN은 “설정” → “매개변수 설정” → “코어 설정”에서 선택된 코어를 확인할 수 있습니다. 설치 방식에 따라 Geo 파일은 프로그램 데이터 디렉터리 또는 해당 코어 디렉터리에 있을 수 있습니다. 검색 결과에 나온 같은 이름의 첫 파일을 덮어쓰지 말고, 실행 로그에서 코어 시작 경로를 먼저 확인하세요.
- 현재 사용자 지정 라우팅 설정을 내보내거나 복사하고, 특히
domain,ip,inboundTag및outboundTag를 보존하세요. - 로그에 현재 코어 버전과 설정 파일 위치를 기록해 v2fly와 Xray의 실행 디렉터리를 혼동하지 않도록 합니다.
- 시스템 시간과 시간대가 올바른지 확인하세요. 시간이 크게 어긋나면 업데이트 요청과 TLS 연결에 영향을 줄 수 있으므로 Geo 데이터 문제로 오인해서는 안 됩니다.
- 현재 정상적으로 작동하는
geoip.dat와geosite.dat의 사본을 보관하세요. 되돌릴 때는 두 파일을 함께 복원해야 합니다.
데스크톱 확인 항목
- 클라이언트
- v2rayN 7.x
- 메뉴
- 설정 → 매개변수 설정
- 코어
- Xray 또는 v2fly
- 로그
- 코어 시작 경로 확인
실제 코어 디렉터리를 먼저 확인한 뒤 내장 Geo 파일 업데이트를 실행하세요.
Android 확인 항목
- 클라이언트
- v2rayNG 1.10.x
- 커널
- Xray
- 진입 경로
- 설정 → Geo 리소스 파일
- 작업
- 다운로드 후 서비스 재시작
앱 내 업데이트 경로를 사용하고 파일 관리자로 내부 데이터를 덮어쓰지 마세요.
v2rayN에서 Geo 데이터 파일 업데이트하기
v2rayN의 내장 업데이트 경로는 현재 버전에 맞는 데이터를 다운로드해 코어가 읽는 파일을 교체합니다. 수동으로 디렉터리를 찾는 것보다 이 경로를 우선 사용하는 편이 안전합니다. 시작하기 전에 현재 프록시 서비스를 중지해 코어 프로세스가 기존 파일을 사용하지 않도록 하세요. TUN 모드를 사용 중이라면 TUN도 먼저 끈 뒤 업데이트해야 합니다.
- v2rayN 메인 창을 열고 상태 표시줄에서 현재 코어가 완전히 중지되었는지 확인하세요.
- “업데이트 확인” 메뉴로 들어가 “Geo 파일 업데이트” 또는 이와 비슷한 Geo 데이터 업데이트 항목을 선택하세요. 일부 7.x 버전에서는 이 항목이 업데이트 하위 메뉴에 있습니다.
- 화면에 다운로드와 교체가 완료되었다는 표시가 나올 때까지 기다리세요. 진행이 끝나기 전에 클라이언트를 종료하지 마세요.
- “설정” → “매개변수 설정” → “코어 설정”을 열고, 현재 선택된 코어가 방금 업데이트한 대상과 일치하는지 다시 확인하세요.
- 기존 노드를 시작한 뒤 로그 창을 열어
geoip.dat를 찾을 수 없음,geosite.dat를 찾을 수 없음 또는 규칙 태그가 존재하지 않음과 같은 오류가 없는지 확인하세요. - 시스템 프록시 또는 TUN 모드를 다시 활성화한 뒤 중국 본토 도메인 하나와 프록시가 필요한 도메인 하나로 아웃바운드 결과를 각각 확인하세요.
내장 업데이트에서 파일 사용 중이라는 메시지가 나오면 먼저 v2rayN을 종료하고 작업 관리자에서 해당 코어 프로세스가 끝났는지 확인한 뒤 클라이언트를 다시 열어 한 번 실행하세요. 쓰기 실패가 표시되면 프로그램 디렉터리에 현재 계정의 쓰기 권한이 있는지 확인해야 합니다. 디렉터리 권한 문제를 숨기기 위해 관리자 모드로 장기간 실행하지 말고, 프로그램 데이터를 계정이 쓸 수 있는 위치에 두는 편이 안전합니다.
수동 교체는 신뢰할 수 있는 데이터 파일을 확보했고 현재 코어가 읽는 위치를 정확히 알고 있을 때만 사용하세요. 작업할 때는 반드시 코어를 중지하고 기존 두 파일의 이름을 바꿔 보관한 다음 새 geoip.dat와 geosite.dat를 같은 데이터 디렉터리에 함께 넣어야 합니다. 한 파일만 교체하면 태그 적용 범위가 달라질 수 있어 문제 해결 시 변수가 늘어납니다.
v2rayNG에서 Geo 리소스 확인 및 업데이트
v2rayNG는 Xray 코어로 라우팅을 처리하며 Geo 파일은 앱이 관리합니다. Android에서는 일반적으로 앱 내부 데이터 디렉터리를 일반 파일 디렉터리처럼 공개하지 않으므로 v2rayNG 설정 화면에서 업데이트해야 합니다. 데스크톱 파일을 다운로드 폴더에 복사해 클라이언트가 자동으로 인식하기를 기다리는 방식은 사용하지 마세요.
작업 전에 메인 화면의 중지 버튼을 누르고 상태 표시줄에서 프록시 서비스가 종료되었는지 확인하세요. “LAN 우회” 또는 사용자 지정 라우팅을 활성화했다면 현재 옵션도 기록해야 합니다. 리소스를 업데이트해도 규칙 순서가 자동으로 수정되지는 않습니다.
- v2rayNG를 열고 현재 연결을 중지하세요.
- 오른쪽 상단 메뉴에서 “설정” → “Geo 리소스 파일”을 차례로 여세요. 마이너 버전에 따라 “Geo 파일” 또는 “Geo 데이터 업데이트”로 표시될 수 있습니다.
- GeoIP와 GeoSite 업데이트를 각각 실행하고 두 항목이 모두 완료될 때까지 기다리세요. 네트워크가 느리다면 앱을 전면에 유지해 시스템이 작업을 중단하지 않도록 합니다.
- 설정 페이지로 돌아가 “라우팅 설정”에서 미리 정의된 규칙과 사용자 지정 규칙이 계속 활성화되어 있는지 확인하세요.
- 메인 화면으로 돌아가 노드를 다시 시작한 뒤 실행 로그를 확인하고 리소스 로드 및 라우팅 초기화 오류가 없는지 확인하세요.
- 비행기 모드를 한 번 켰다가 네트워크를 복구한 후 도메인과 IP를 테스트해 기존 연결 및 DNS 캐시의 영향을 배제하세요.
| 업데이트 후 증상 | 우선 확인할 위치 | 처리 방법 |
|---|---|---|
| 서비스를 시작할 수 없음 | 실행 로그의 첫 번째 오류 | 파일 다운로드가 완료되었는지 확인하고 두 업데이트를 다시 실행 |
| 중국 본토 도메인이 계속 프록시로 연결됨 | 라우팅 규칙 순서 | 명확한 직접 연결 규칙을 최종 프록시 규칙보다 앞에 배치 |
| 도메인 규칙이 매칭되지 않음 | DNS 및 domainStrategy | 라우팅 단계에서 도메인이 계속 유지되는지 확인 |
| 일부 앱에 변화가 없음 | 앱 연결 캐시 | 대상 앱 프로세스를 종료한 후 연결을 다시 시작 |
규칙 순서가 업데이트 후 실제 동작을 결정합니다
Geo 데이터는 매칭 가능한 집합만 제공하며, 최종 아웃바운드는 라우팅 규칙이 위에서 아래로 결정합니다. 더 구체적인 LAN, 지정 도메인 및 지정 IP 규칙은 앞에 두고 범위가 넓은 지역 집합은 뒤에 배치한 다음, 마지막에 프록시 또는 직접 연결 기본 규칙을 설정하세요. 첫 번째 규칙이 이미 모든 0.0.0.0/0을 매칭한다면 뒤의 GeoIP 규칙은 처리 기회를 얻지 못합니다.
아래 예시는 흔히 사용하는 순서를 보여 줍니다. 사설 주소는 먼저 직접 연결하고, 중국 본토 도메인과 IP도 직접 연결하며, 중국 본토 외 도메인은 프록시로 보냅니다. 설정의 direct와 proxy는 실제 아웃바운드 태그와 일치해야 합니다. 클라이언트가 생성한 설정을 확인하지 않고 태그 이름만 그대로 복사해서는 안 됩니다.
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:geolocation-!cn"],
"outboundTag": "proxy"
}
]
}
}
IPIfNonMatch는 도메인 규칙이 매칭되지 않았을 때 IP를 다시 확인하고 IP 규칙을 시도한다는 뜻입니다. GeoSite와 GeoIP를 함께 사용하는 설정에 적합하지만 확인 과정이 한 번 더 필요합니다. AsIs로 설정하면 코어가 IP 라우팅을 위해 도메인을主动적으로 확인하지 않으므로, geoip:cn에 의존하는 규칙이 도메인 형태로 남아 있는 대상을 처리하지 못할 수 있습니다.
- 프린터, 라우터 관리 화면 및 로컬 서비스가 프록시 아웃바운드로 들어가지 않도록 LAN 규칙을 지역 규칙보다 앞에 배치하세요.
- 특수 처리가 필요한 일부 사이트를 쉽게 덮어쓸 수 있도록 정확한 도메인 규칙을 광범위한 GeoSite 태그보다 앞에 배치하세요.
- 차단 규칙에는 현재 데이터 파일에 실제로 포함된 태그만 사용하세요. 로그에 태그가 존재하지 않는다고 표시되면 데이터 출처와 태그 이름을 확인해야 합니다.
- 최종 기본 규칙은 방향이 명확한 하나만 남겨 여러 조건 없는 규칙이 서로 가리지 않도록 하세요.
새 데이터가 코어에 로드되었는지 확인하는 방법
“업데이트 성공” 메시지만으로는 라우팅이 새 데이터를 사용한다고 증명할 수 없습니다. 파일 로드, 규칙 매칭, 실제 아웃바운드의 세 단계로 확인해야 합니다. 첫 단계에서는 시작 로그를 보고, 두 번째 단계에서는 규칙 순서를 확인하며, 세 번째 단계에서는 대상 연결이 직접 연결인지 프록시인지 비교합니다. 세 단계를 분리해야 DNS 캐시, 노드 지연 또는 브라우저 연결 재사용을 Geo 파일 오류로 오인하지 않습니다.
- 코어를 재시작한 직후 로그를 확인하고
geoip,geosite,failed,routing등의 키워드를 검색하세요. - 라우팅 규칙에서 직접 연결로 명확히 지정한 중국 본토 도메인에 접속하고 로그의 대상 도메인, 대상 IP 및 아웃바운드 태그를 기록하세요.
- 그 다음
geosite:geolocation-!cn으로 처리되는 도메인에 접속해 로그에 프록시 아웃바운드가 표시되는지 확인하세요. - 알려진 IP에 직접 연결해 GeoIP 규칙이 매칭에 참여하는지 확인하세요. 이 단계는 도메인 테스트와 분리해서 실행해야 합니다.
- 로컬 HTTP 또는 SOCKS 진입점을 사용한다면 앱 연결 포트가 클라이언트에 표시된 값과 일치하는지 확인하세요. 예를 들어 일반적인 조합에서는
10808을 사용합니다. 새 설정을 테스트하면서 이전 포트를 사용하지 마세요.
| 로그 정보 | 의미 | 다음 단계 |
|---|---|---|
| 리소스 파일을 열 수 없음 | 경로, 권한 또는 파일 상태에 이상이 있음 | 코어를 중지한 후 다시 업데이트하고 실제 코어 디렉터리를 확인 |
| 규칙 태그가 존재하지 않음 | 현재 Geo 데이터에 해당 태그가 없음 | 현재 태그로 변경하거나 매칭되는 데이터 집합으로 업데이트 |
| 모든 요청이 최종 규칙에 매칭됨 | 앞선 조건이 매칭되지 않음 | 도메인이 이미 확인되었는지와 규칙 순서를 확인 |
| 아웃바운드는 올바르지만 접속에 실패함 | 문제가 Geo 분기 계층에 있지 않음 | 노드, DNS, 전송 매개변수 및 대상 서비스 상태를 계속 확인 |
업데이트 주기와 자주 묻는 질문
Geo 데이터에는 모든 사용자에게 적용되는 고정 업데이트 주기가 없습니다. 일반적인 사용 환경에서는 한 달에 한 번 확인하면 됩니다. 사용자 지정 라우팅을 자주 조정하거나 새 도메인을 인식해야 하거나 일부 주소가 갑자기 잘못된 아웃바운드로 연결되면 즉시 확인하세요. 클라이언트가 코어를 업그레이드한 뒤에도 Geo 파일이 정상적으로 로드되는지 확인해야 하지만, 문제가 없다면 매일 반복해서 업데이트할 필요는 없습니다.
업데이트는 라우팅 유지 관리의 일부이지 연결 장애를 해결하는 만능 방법이 아닙니다. 노드를 사용할 수 없거나 VMess 또는 VLESS 매개변수가 잘못되었거나 시스템 프록시가 켜져 있지 않거나 포트가 사용 중인 문제는 Geo 파일을 교체해도 자동으로 해결되지 않습니다. 먼저 로그를 바탕으로 장애가 라우팅 계층에 있는지 확인한 뒤 데이터를 업데이트하세요.
업데이트 후 중국 본토 웹사이트가 오히려 프록시로 연결되나요?
먼저 geosite:cn과 geoip:cn이 최종 프록시 규칙보다 앞에 있는지 확인한 다음, domainStrategy가 도메인을 IP 매칭에서 제외하는 AsIs로 설정되어 있지 않은지 확인하세요. 수정한 뒤 코어를 약 2초간 중지했다가 다시 시작하세요.
geoip.dat만 업데이트해도 되나요?
기술적으로는 하나만 교체할 수 있지만 문제 해결 중에는 권장하지 않습니다. GeoIP와 GeoSite는 보통 하나의 라우팅 체계에서 함께 사용되므로 두 파일을 동시에 업데이트해야 태그 적용 범위와 생성 시점의 불일치로 인한 판단 오류를 줄일 수 있습니다.
v2rayNG 업데이트에서 계속 시간 초과가 발생하나요?
먼저 정상적으로 작동하는 노드에 연결한 다음 “설정” → “Geo 리소스 파일”에서 업데이트를 다시 실행하세요. 배터리 절전 제한을 끄고 앱을 전면에 유지하는 것도 좋습니다. 일반 웹페이지에도 접속할 수 없다면 먼저 노드 또는 DNS 문제를 해결해야 합니다.
파일을 업데이트했는데 기존 연결이 바뀌지 않는 이유는 무엇인가요?
코어와 대상 앱 모두 기존 연결을 유지할 수 있습니다. 프록시 서비스를 중지하고 대상 앱을 종료한 뒤 2~5초 기다렸다가 코어와 앱을 다시 시작하세요. 브라우저로 테스트할 때는 연결 재사용의 영향을 줄이도록 별도의 창을 새로 열어 보세요.
사용자 지정 태그를 찾을 수 없다고 표시되면 어떻게 하나요?
Geo 데이터 집합마다 포함된 태그가 완전히 같지는 않습니다. 먼저 코어 로그에서 정확한 태그 이름을 확인하고 규칙의 오타 여부를 점검하세요. 태그의 존재를 확인할 수 없다면 cn, private처럼 현재 파일에서 인식되는 것으로 검증된 집합을 사용하세요.