v2rayN, v2rayNG 또는 v2flyNG에서 라우팅 규칙을 사용하면서 태그 누락, 업데이트 후 실행 실패, 분기 결과 변경을 겪는 사용자를 위한 내용입니다. 먼저 규칙과 데이터 파일을 백업한 뒤 GeoIP와 GeoSite를 업데이트하고, 시작 로그·매칭 결과·실제 연결을 단계별로 확인하세요. 문제가 생기면 기존 파일, 기존 규칙, 기존 코어 순서로 롤백할 수 있습니다.
먼저 GeoIP와 GeoSite의 매칭 대상을 구분하기
GeoIP와 GeoSite는 모두 라우팅 모듈이 읽는 분류 데이터지만, 입력 대상이 다릅니다. GeoIP는 규칙의 geoip:private 또는 geoip:cn처럼 대상 IP 주소를 기준으로 합니다. GeoSite는 geosite:cn, geosite:category-ads-all처럼 도메인을 기준으로 합니다. GeoIP만으로 도메인의 분류를 바로 판단할 수 없으며, GeoSite도 IP 주소 대역 매칭을 대신하지 않습니다.
일반적인 파일명은 geoip.dat와 geosite.dat입니다. 파일은 분류 데이터를 담는 컨테이너일 뿐이며, 실제 규칙이 참조하는 것은 내부 태그입니다. 데이터 출처, 빌드 날짜, 경량화 방식에 따라 포함된 태그가 달라질 수 있으므로 파일을 다운로드할 수 있다고 해서 현재 규칙의 모든 태그가 존재한다는 뜻은 아닙니다. 업데이트 전에는 파일 날짜만 확인하지 말고 실제로 사용하는 태그를 기록해야 합니다.
| 데이터 유형 | 매칭 대상 | 규칙 예시 | 주의할 점 |
|---|---|---|---|
| GeoSite | 요청에 포함된 도메인 | geosite:cn |
현재 geosite.dat에 태그가 존재해야 하며, 규칙 순서도 결과에 영향을 줍니다. |
| GeoIP | 대상 IPv4 또는 IPv6 주소 | geoip:private |
도메인을 먼저 IP로 해석할지는 라우팅의 도메인 해석 전략에 따라 달라집니다. |
| 명시적 도메인 | 전체 도메인, 접미사 또는 키워드 | domain:example.com |
GeoSite 태그에 의존하지 않으므로 핵심 예외 규칙을 소수만 유지할 때 적합합니다. |
| 명시적 네트워크 대역 | 지정된 CIDR 주소 대역 | 192.168.0.0/16 |
GeoIP 분류에 의존하지 않으며, 로컬 네트워크 직접 연결 규칙은 보통 앞쪽에 배치해야 합니다. |
이 흐름이 매번 전체 단계로 진행되는 것은 아닙니다. Xray 라우팅의 domainStrategy를 예로 들면, AsIs는 보통 원래 도메인 규칙을 먼저 적용하며 GeoIP 매칭을 위해 도메인을 능동적으로 해석하지 않습니다. IPIfNonMatch는 도메인 규칙이 매칭되지 않을 때 해석을 시도한 뒤 IP 규칙을 계속 적용합니다. IPOnDemand는 대상 IP가 필요한 규칙을 만났을 때 해석을 시작할 수 있습니다. 데이터베이스 업데이트 후 분기 결과가 달라졌다면 전략과 규칙 순서를 함께 확인하세요.
결론: 먼저 매칭 대상을 확인한 뒤 데이터베이스 오류를 판단하기
도메인이 geoip:cn에 매칭되지 않았다고 해서 데이터 파일이 손상된 것은 아닙니다. AsIs 전략에서는 애초에 대상 IP 분류 매칭 단계로 넘어가지 않았을 수 있습니다. 먼저 도메인 전략과 로그에 표시된 대상 주소를 확인한 다음 데이터 파일 교체 여부를 결정하세요.
업데이트 전에 롤백 가능한 세 가지 항목 저장하기
Geo 데이터를 업데이트해도 일반적으로 VMess, VLESS, TLS 또는 REALITY 노드의 매개변수는 바뀌지 않습니다. 하지만 라우팅 태그의 사용 가능 여부와 분류 범위는 달라질 수 있습니다. 안전하게 작업하려면 바로 덮어쓰지 말고 현재 규칙, 현재 데이터 파일, 클라이언트가 호출하는 코어 정보를 먼저 저장하세요. 그래야 문제가 규칙·데이터·코어 변경 중 어디에서 발생했는지 판단할 수 있습니다.
v2rayN에서는 먼저 「설정」→「라우팅 설정」을 열어 현재 활성화된 라우팅 규칙 집합, 규칙 순서, 기본 아웃바운드를 기록합니다. 그런 다음 메인 화면에서 현재 코어 유형을 확인하세요. Xray를 사용한다면 압축 해제형 데이터 파일은 해당 코어 리소스 디렉터리에 있는 경우가 많습니다. v2rayN 7.x 빌드마다 디렉터리 구성이 다를 수 있으므로 시작 로그에 표시된 리소스 경로 또는 클라이언트가 실제로 선택한 코어 디렉터리를 기준으로 해야 합니다. 파일명이 비슷하다는 이유로 다른 코어의 리소스를 덮어쓰지 마세요.
- 라우팅 설정 내보내기 또는 복사: 활성화된 규칙 순서를 보관하세요. 특히 로컬 네트워크 직접 연결, 차단, 지정 도메인, 최종 기본 규칙을 빠뜨리지 않아야 합니다.
- 기존 데이터 파일 복사: 현재
geoip.dat와geosite.dat를 날짜가 포함된 로컬 백업 디렉터리에 복사해 새 파일과 같은 경로에 섞이지 않도록 하세요. - 코어 및 클라이언트 상태 기록: 현재 사용하는 Xray 또는 v2fly 코어, 업데이트 전 정상 실행 여부, 테스트 노드 연결 가능 여부를 기록합니다.
- 사용자 지정 태그 목록화: 라우팅 설정에서
geoip:와geosite:를 검색하고, 자주 쓰이지 않는 태그를 별도로 정리합니다. - 한 번에 하나의 리소스만 업데이트: 코어, 구독, DNS, Geo 데이터를 동시에 바꾸지 마세요. 그래야 로그에 오류가 나타났을 때 원인을 추적하기 쉽습니다.
데스크톱에서는 코어를 종료한 뒤 파일을 복사해 읽기 또는 교체 중인 파일을 건드리지 않도록 하세요. Android의 v2rayNG와 v2flyNG는 보통 앱이 리소스 디렉터리를 관리하므로 시스템 샌드박스에서 파일을 찾을 필요가 없습니다. 앱에 제공되는 Geo 리소스 업데이트 또는 가져오기 기능을 우선 사용하고, 작업 전에 사용자 지정 설정을 내보내세요. v2rayNG는 Xray 코어를, v2flyNG는 v2fly 코어를 사용합니다. 두 앱 모두 기본 geoip.dat 및 geosite.dat 규칙을 비슷한 방향으로 지원하지만, 모든 확장 태그와 설정 필드가 완전히 같다고 단정할 수는 없습니다.
업데이트 기능은 리소스만 교체할 뿐, 규칙 호환성까지 보장하지 않습니다
v2rayN에서 「업데이트 확인」→「Geo files」를 통해 다운로드한 뒤에도 코어를 재시작하고 로그를 확인해야 합니다. 진행 완료 표시는 업데이트 작업이 끝났다는 뜻일 뿐, 태그 로드와 트래픽 분기 매칭이 정상이라는 증거는 아닙니다.
규칙 태그, 순서 및 코어 호환성 확인하기
Geo 데이터에서 가장 흔한 호환성 문제는 파일을 전혀 읽지 못하는 것이 아니라 새 데이터에 특정 사용자 지정 태그가 없는 경우입니다. geoip:private 같은 기본 태그는 비교적 흔하지만, 지역·서비스 분류·확장 속성 태그는 데이터셋에 따라 달라집니다. 오래된 설정이나 다른 데이터 출처에서 가져온 규칙이라면 업데이트 전에 새 파일이 동일한 태그를 제공하는지 반드시 확인하세요.
규칙 순서도 중요합니다. 라우팅은 보통 순서대로 매칭 항목을 찾기 때문에 앞의 넓은 규칙이 뒤의 정밀한 규칙을 가릴 수 있습니다. 예를 들어 범위가 매우 넓은 GeoSite 분류를 먼저 배치하고 특정 도메인 직접 연결 규칙을 뒤에 두면 후자의 규칙이 실행되지 않을 수 있습니다. 핵심 도메인은 명시적인 예외 규칙을 넓은 분류보다 앞에 배치하고, 최종 기본 아웃바운드도 유지하세요.
도메인 분류 규칙
- 입력
- 요청 도메인
- 태그
- geosite:cn
- 아웃바운드
- direct
- 전제 조건
- 태그가 존재하고 도메인이 확인되어야 함
먼저 도메인 기준으로 분류한 뒤, 매칭되지 않은 요청을 후속 규칙에 넘길 때 적합합니다.
주소 분류 규칙
- 입력
- 대상 IP
- 태그
- geoip:private
- 아웃바운드
- direct
- 전략
- domainStrategy와 함께 적용
로컬 네트워크 주소는 우선 직접 연결해야 관리 페이지나 로컬 서비스가 프록시로 나가지 않습니다.
다음은 구조를 이해하기 위한 간단한 라우팅 예시입니다. 실제로 v2rayN에 가져올 때는 아웃바운드 태그가 현재 설정의 태그와 일치해야 합니다. 클라이언트가 다른 이름을 생성한다면 기존 클라이언트 값을 사용하고 예시를 그대로 복사하지 마세요.
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["domain:intranet.example"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
}
]
}
}
여기서 domain:intranet.example은 명시적 도메인 규칙으로, GeoSite 데이터에 의존하지 않습니다. 핵심 내부 서비스의 보호 규칙으로 적합합니다. 새 GeoSite 파일에 특정 업무 분류가 없다면 먼저 중요한 도메인 몇 개를 명시적 규칙으로 바꿔 기본 기능을 복구하세요. 그 후 호환 데이터셋을 찾을지 분류 설계를 조정할지 결정하면 됩니다. 태그 하나가 없다고 해서 모든 분기 규칙을 한 번에 삭제하지 마세요.
- 태그는 존재하지만 매칭되지 않음: 도메인이 이미 IP로 변환되었는지, 더 앞선 규칙이 처리했는지, 스니핑 설정이 대상 도메인을 제공할 수 있는지 확인하세요.
- 태그가 존재하지 않음: 코어 시작 시 보통 분류 목록 누락 오류가 바로 표시됩니다. 기존 파일을 복원하거나 새 데이터에 실제로 포함된 태그로 규칙을 바꿔야 합니다.
- GeoIP가 적용되지 않음: 대상이 여전히 도메인 형태로 라우팅에 들어오는지,
domainStrategy가 IP 매칭을 계속 진행하도록 허용하는지 확인하세요. - 모든 트래픽이 같은 아웃바운드로 나감: 기본 규칙, 최종 기본 규칙, 아웃바운드 태그를 확인하세요. 문제의 원인이 Geo 파일이 아닐 수도 있습니다.
시작 로그에서 파일과 태그 로드 여부 확인하기
업데이트 성공 여부를 판단하는 첫 단계는 기존 코어를 완전히 중지한 뒤 다시 시작하는 것입니다. 설정 창만 닫아서는 안 됩니다. 코어는 보통 시작할 때 또는 해당 태그를 처음 해석할 때 Geo 데이터를 읽습니다. 기존 프로세스가 계속 실행 중이면 디스크의 파일을 교체했더라도 현재 연결은 이전 리소스를 계속 사용할 수 있습니다.
v2rayN에서는 먼저 서비스를 중지한 뒤 선택한 설정을 다시 시작하고 로그 창에서 처음 30초를 확인하세요. 테스트 환경에서 로컬 SOCKS 포트 127.0.0.1:10808을 사용한다면 먼저 인바운드 리스닝이 성공했는지 확인한 다음 Geo 관련 오류를 살펴보세요. 포트 충돌로 코어가 시작되지 않았다면 이후 분기 테스트는 참고할 수 없습니다. 10808은 이 글의 테스트 값이며, 실제 포트는 「설정」→「매개변수 설정」의 로컬 리스닝 설정을 기준으로 하세요.
| 로그 또는 현상 | 가능한 원인 | 다음 단계 |
|---|---|---|
| geoip.dat 또는 geosite.dat를 찾을 수 없음 | 파일이 현재 코어가 읽는 리소스 디렉터리에 없거나, 업데이트가 다른 코어 디렉터리에 기록되었습니다. | 시작 로그에서 리소스 경로를 확인하고 기존 파일을 현재 코어가 실제로 읽는 위치에 복원하세요. |
| list not found 또는 태그 누락 | 규칙이 새 데이터에 포함되지 않은 분류 태그를 참조하고 있습니다. | 기존 데이터를 복원하거나 새 파일에 존재하는 태그로 규칙을 바꾼 뒤 다시 시작하세요. |
| 코어는 시작되지만 분기가 반대로 적용됨 | 규칙 순서, 도메인 전략 또는 분류 내용이 변경되었습니다. | 라우팅 로그를 활성화하고 고정된 테스트 도메인으로 실제 매칭된 아웃바운드를 비교하세요. |
| 로컬 포트가 리스닝하지 않음 | 설정 또는 리소스를 읽는 중 코어가 종료되었거나 포트가 사용 중일 수 있습니다. | 첫 번째 오류부터 처리하고 브라우저 접속 결과로 Geo 데이터 상태를 역추론하지 마세요. |
코어 버전에 따라 오류 문구는 조금 다를 수 있지만 판단 순서는 같습니다. 먼저 로그의 첫 번째 치명적 오류를 찾고, 해당 오류가 파일 경로·태그 이름·설정 필드 중 무엇을 가리키는지 확인하세요. 이후 발생하는 연결 실패는 코어가 정상적으로 시작되지 않은 연쇄 결과일 수 있습니다. geoip, geosite, routing, failed 및 구체적인 태그 이름을 중심으로 검색하면 됩니다.
업데이트가 끝났는데 왜 로그에는 이전 규칙 결과가 계속 표시되나요?
먼저 클라이언트에서 코어를 중지하고 작업 관리자에서 기존 프로세스가 종료되었는지 확인한 다음 설정을 다시 시작하세요. 파일만 교체하고 코어를 재시작하지 않으면 현재 프로세스가 이미 로드한 이전 데이터를 계속 사용할 수 있습니다.
특정 GeoSite 태그를 찾을 수 없다는 메시지가 나오면 어떻게 하나요?
「설정」→「라우팅 설정」을 열고 로그에 표시된 geosite: 태그를 찾으세요. 먼저 기존 파일을 복원해 설정이 시작되는지 확인한 뒤 새 데이터가 같은 이름의 태그를 제공하는지 확인합니다. 없다면 파일을 반복해서 덮어쓰지 말고 규칙을 조정해야 합니다.
코어는 시작되지만 지정한 도메인이 여전히 잘못된 아웃바운드로 나가요.
해당 도메인을 임시로 명시적 domain: 규칙으로 작성해 넓은 분류보다 앞에 배치하세요. 명시적 규칙이 매칭된다면 연결 경로는 정상인 것이므로 GeoSite 분류 내용과 규칙 순서를 계속 확인하면 됩니다.
v2rayNG 업데이트 후 구독을 다시 가져와야 하나요?
대부분은 필요하지 않습니다. Geo 리소스와 VMess·VLESS 노드 구독은 서로 다른 내용을 담당합니다. 먼저 현재 설정을 재시작하고 실행 로그를 확인하세요. 구독 자체의 노드 매개변수가 변경된 경우에만 구독을 업데이트하면 됩니다.
웹페이지가 열리는지만 테스트해도 분기가 올바른지 확인할 수 있나요?
확인할 수 없습니다. 웹페이지에 접속된다는 것은 사용 가능한 아웃바운드가 있다는 뜻일 뿐입니다. 직접 연결 대상, 프록시 대상, 로컬 네트워크 대상을 각각 테스트하고 라우팅 로그에서 세 요청이 실제로 사용한 아웃바운드 태그를 확인해야 합니다.
업데이트 오류가 발생하면 파일·규칙·코어 순서로 단계별 롤백하기
롤백의 목표는 문제가 발생한 상태에서 계속 수정하는 것이 아니라 업데이트 전의 정상 상태를 최대한 빨리 복구하는 것입니다. 먼저 코어를 중지하고 새 geoip.dat와 geosite.dat를 리소스 디렉터리 밖으로 옮긴 다음 백업 파일을 되돌려 놓으세요. 다시 시작한 뒤 기존 규칙이 정상으로 돌아오면 문제 범위가 새 데이터 또는 태그 호환성으로 좁혀집니다.
기존 데이터를 복원한 뒤에도 문제가 계속되면 업데이트 전에 내보낸 라우팅 설정을 복원하고 규칙 순서, domainStrategy, 아웃바운드 태그를 특히 확인하세요. 데이터와 규칙을 모두 복원했는데도 코어가 시작되지 않는다면 업데이트 중 Xray 또는 v2fly 코어도 함께 바뀌었는지 확인합니다. 클라이언트 버전, 코어 버전, 데이터 파일은 각각 기록해 세 변수를 하나의 업데이트로 묶지 않도록 하세요.
- 1단계: 데이터 파일 복원. 파일 누락, 태그 부재, 업데이트 후 분류 결과의 갑작스러운 변경에 적용합니다.
- 2단계: 라우팅 규칙 복원. 태그 또는 규칙 순서를 수정한 뒤 전체 직접 연결, 전체 프록시, 로컬 네트워크 연결 불가가 발생한 경우에 적용합니다.
- 3단계: 기존 코어 선택 복원. 업데이트 중 코어도 교체했고 로그에 설정 필드 호환성 오류가 나타난 경우에 적용합니다.
- 4단계: 최소 규칙으로 되돌리기. 로컬 네트워크 직접 연결과 최종 프록시 아웃바운드만 남겨 기본 연결을 확인한 뒤 Geo 규칙을 하나씩 다시 추가합니다.
연결이 복구되면 일정한 유지 관리 절차를 정해 두세요. 업데이트 전에 두 데이터 파일과 라우팅 설정을 저장하고, 업데이트 후 로컬 포트·첫 번째 로그 오류·고정 테스트 대상 세 개를 확인합니다. 문제가 없음을 확인한 뒤 임시 백업을 삭제하세요. 날짜가 바뀌었다는 이유만으로 Geo 데이터를 자주 교체할 필요는 없습니다. 새로운 주소 대역이나 도메인 분류에 규칙이 실제로 의존할 때 업데이트 효과가 분명합니다.
최종 판단: 시작·연결·정확한 매칭을 모두 충족해야 합니다
코어가 정상적으로 시작되었다는 것은 리소스를 읽을 수 있다는 뜻일 뿐이고, 웹페이지가 열린다는 것은 특정 아웃바운드가 사용 가능하다는 뜻일 뿐입니다. 유지 관리가 완료되려면 로그에 Geo 로드 오류가 없고, 고정 테스트 요청이 연결되며, 직접 연결 대상과 프록시 대상이 예상한 아웃바운드로 매칭되어야 합니다.