먼저 구분하기: IP 주소의 위치, 도메인 분류, 트래픽 분기 규칙

한국 사이트가 프록시를 거치거나 특정 서비스가 예상과 다르게 분기되더라도, 원인을 곧바로 “데이터베이스가 오래돼서”라고 단정하지 마세요. mihomo의 규칙 판단에는 세 가지가 관여합니다. 연결에 도메인이나 대상 IP가 남아 있는지, 데이터베이스가 대상을 어떤 분류에 넣는지, 설정에서 어떤 규칙이 먼저 일치하는지입니다. 데이터베이스를 업데이트하면 두 번째 항목만 바뀌며, 규칙 순서나 정책 그룹 선택이 자동으로 수정되지는 않습니다.

이 문서의 설정은 mihomo를 대상으로 합니다. mihomo는 Clash Meta 이후 이어지는 커널의 이름입니다. 데스크톱 클라이언트는 설정과 커널을 관리하는 인터페이스일 뿐입니다. 이름에 Clash가 들어간다고 해서 같은 필드를 지원하는 것은 아닙니다. 적용 전에 클라이언트의 ‘정보’, 커널 정보 또는 시작 로그에서 실제로 실행 중인 커널이 mihomo인지 확인하고, 현재 설정을 백업하세요.

데이터 또는 설정대상주요 용도
GeoIPIPv4·IPv6 주소가 속한 네트워크 집합국가·지역 또는 특정 주소 집합에 따라 트래픽 분기
GeoSite도메인과 도메인 분류 항목웹사이트 유형, 서비스 또는 지역별 도메인 집합에 따라 트래픽 분기
rules위에서 아래로 적용되는 판단 조건일치한 연결을 DIRECT, REJECT 또는 정책 그룹으로 전달
rule-providers독립된 규칙 세트 파일규칙 세트별 URL과 주기에 따라 업데이트되며, geox-url로 관리되지 않음

예를 들어 GEOSITE,cn,DIRECT는 도메인 집합을 사용하고, GEOIP,CN,DIRECT는 대상 주소의 소속 집합을 사용합니다. 두 규칙은 같은 “중국 웹사이트 목록”을 참조하지 않습니다. 웹사이트가 해외 CDN을 사용하거나 여러 지역의 도메인이 같은 주소를 공유할 수 있으므로, GeoIP만으로 웹사이트의 서비스 지역을 판단할 수는 없습니다.

데이터 파일과 출처: 사용할 형식부터 정하기

GeoIP의 DAT 및 MMDB 경로

mihomo는 GeoIP를 여러 형식으로 처리할 수 있습니다. geodata-mode: true로 설정하면 GeoIP에 geoip.dat를 사용하고, 이 모드를 끄면 일반적으로 Country.mmdb를 사용합니다. GeoSite에는 geosite.dat가 사용됩니다. 따라서 MMDB 파일만 교체해도 DAT 모드에서 실제로 참조하는 GeoIP 데이터는 업데이트되지 않습니다.

geox-url의 키도 데이터 형식에 맞아야 합니다. geoip는 GeoIP DAT, geosite는 GeoSite DAT, mmdb는 해당 MMDB 데이터를 가리킵니다. 텍스트 형식의 도메인 목록 주소를 geosite에 넣거나, MMDB 파일의 이름을 geoip.dat로 바꿔 사용하는 것은 올바른 방법이 아닙니다.

자주 사용하는 데이터 출처와 선택 기준

  • Loyalsoldier/v2ray-rules-dat: GeoIP 및 GeoSite DAT 릴리스 파일을 제공합니다. 주요 지역과 도메인 분류가 필요한 설정에 적합합니다. 변수에 따른 문제를 쉽게 확인할 수 있도록 아래 예제에서는 이 출처를 사용합니다.
  • MetaCubeX/meta-rules-dat: 관련 커널 생태계에 맞는 데이터 파일을 제공합니다. 사용할 때는 저장소 안내, 릴리스 브랜치와 실제 파일 형식을 확인하고, 서로 다른 파일의 다운로드 주소를 섞지 마세요.
  • 클라이언트에 기본 포함된 데이터: 최초 실행에 편리하지만, 기본 파일의 날짜가 앱 설치 날짜와 같지는 않습니다. 이후 업데이트 방식은 클라이언트와 커널 설정에 따라 달라집니다.

출처가 달라도 같은 분류 이름에 포함된 항목은 다를 수 있습니다. 특히 private, geolocation-!cn, 속성이 붙은 도메인 분류는 선택한 데이터 출처의 안내를 확인해야 합니다. 한 GeoSite 데이터에 특정 분류가 있다고 해서 모든 릴리스 파일에 그 분류가 제공되는 것은 아닙니다.

자동 업데이트 설정: geox-url과 24시간 주기

아래 설정은 기존 설정의 최상위에 합쳐서 사용할 수 있는 예시입니다. DAT 모드와 24시간 업데이트 주기를 사용합니다. 노드, 포트, 정책 그룹은 포함하지 않은 전체 설정 파일이 아닙니다. 기존 설정에 같은 이름의 키가 있다면 해당 키를 수정하고, 파일 끝에 같은 필드를 중복해서 추가하지 마세요.

geodata-mode: true
geo-auto-update: true
geo-update-interval: 24

geox-url:
  geoip: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
  geosite: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
  • geodata-mode: true: GeoIP에 DAT 형식을 사용합니다. 모든 트래픽 분기를 한꺼번에 켜는 옵션은 아닙니다.
  • geo-auto-update: true: 커널의 Geo 데이터 자동 업데이트를 활성화합니다.
  • geo-update-interval: 24: 단위는 시간입니다. 초 단위가 아니며, 매일 자정에 고정 실행되는 것도 아닙니다.
  • geox-url: 데이터 다운로드 출처를 지정합니다. 구독 노드를 동기화하거나 rules를 수정하지는 않습니다.

이 예제에는 DAT 모드를 선택했으므로 mmdb를 설정하지 않았습니다. 기존 설정에 MMDB 출처가 있다면 그대로 둘 수 있지만, 그 업데이트 시각을 현재 GeoIP DAT가 갱신되었다는 근거로 삼지는 마세요. AS 번호 데이터베이스는 용도가 다른 데이터이므로 GEOIP와 GEOSITE를 사용하기 위해 함께 활성화할 필요가 없습니다.

클라이언트에서 어디를 수정해야 하나요?

  1. 현재 사용하는 설정을 내보내거나 복사하고, 설정 이름을 기록해 두세요.
  2. 클라이언트에서 제공하는 ‘오버라이드’, ‘설정 병합’ 또는 설정 편집 기능을 찾아 위 필드를 최종 설정에 적용하세요. 클라이언트마다 메뉴 구성이 다르므로 특정 메뉴 경로를 mihomo의 공통 설정 경로로 생각하면 안 됩니다.
  3. 설정을 다시 불러오세요. 클라이언트에서 관련 전역 매개변수를 적용하려면 커널을 재시작해야 한다고 안내하면, 커널을 재시작한 뒤 시작 로그를 확인하세요.
  4. 최종 실행 설정을 확인해 최상위 필드 세 개와 데이터 URL 두 개가 구독 내용이나 전역 설정에 의해 덮어쓰이지 않았는지 살펴보세요.

구독을 다운로드한 뒤 생성된 캐시 파일을 직접 수정하면 다음 구독 업데이트 때 덮어써지는 경우가 많습니다. 로컬 설정을 계속 유지하려면 클라이언트가 지원하는 영구 오버라이드 계층에 넣으세요. 구독 업데이트 주기, Geo 데이터 업데이트 주기, 규칙 제공자의 interval은 서로 독립된 세 가지 기능입니다.

GEOIP·GEOSITE 규칙 작성: 도메인을 먼저, IP 주소는 보완용으로

아래 예제에서는 기존 설정에 ‘노드 선택’이라는 정책 그룹이 이미 정의되어 있다고 가정합니다. 그룹 이름은 실제 설정과 정확히 일치해야 합니다. 실제 이름이 ‘프록시’라면 규칙의 대상도 해당 이름으로 바꾸세요. 예제는 로컬 네트워크, 국내 도메인, 국내 IP 주소, 최종 기본 규칙의 네 단계로 구성되며 광고 차단 등의 추가 분류는 포함하지 않습니다.

rules:
  - GEOSITE,private,DIRECT
  - GEOIP,private,DIRECT,no-resolve
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,노드 선택

다섯 가지 규칙의 적용 순서

  1. GEOSITE,private,DIRECT: 선택한 GeoSite 데이터에 정의된 사설 도메인 집합과 일치합니다. 모든 기업 내부 도메인이 포함되는 것은 아니므로, 사용자 지정 내부 도메인은 별도 규칙으로 추가해야 합니다.
  2. GEOIP,private,DIRECT,no-resolve: 이미 확인된 대상 IP를 사설 주소 집합과 비교합니다. 이 규칙만을 위해 도메인을 새로 조회하지 않도록 합니다.
  3. GEOSITE,cn,DIRECT: 도메인 분류를 우선 적용해 주소의 지역 정보만으로 도메인을 판단하는 상황을 줄입니다.
  4. GEOIP,CN,DIRECT,no-resolve: 대상 IP가 확인된 경우 중국 본토 주소 집합을 보완 규칙으로 적용합니다.
  5. MATCH,노드 선택: 앞선 규칙과 일치하지 않은 연결을 지정된 정책 그룹으로 전달합니다.

no-resolve는 “이 IP 규칙을 위해 도메인 조회를 새로 수행하지 않는다”는 뜻이지, “이 연결은 DNS를 절대 사용하지 않는다”는 뜻이 아닙니다. 연결에 실제 대상 IP가 이미 있다면 IP 규칙이 적용될 수 있습니다. 사용할 수 있는 IP가 없으면 이 규칙과 일치하지 않아 연결이 다음 규칙으로 넘어갈 수 있습니다. 이 매개변수를 유지할지는 DNS 설정, 연결 방식, 트래픽 분기 목적을 고려해 결정하세요.

mihomo는 규칙을 위에서부터 순서대로 적용합니다. 앞쪽의 포괄적인 규칙과 먼저 일치하면 뒤쪽의 세부 분류가 연결을 처리하지 않습니다. MATCH를 앞에 두면 뒤의 규칙이 가려집니다. 해외 서비스를 앞쪽의 넓은 분류 하나로 처리하면 뒤에 있는 특정 도메인 예외도 적용되지 않을 수 있습니다. 예외 규칙은 일반적으로 해당 포괄 규칙보다 앞에 배치해야 합니다.

업데이트 성공 여부 확인: 다운로드·로드·규칙 일치 구분하기

“파일 다운로드 완료”는 업데이트 과정의 한 단계가 끝났다는 의미일 뿐입니다. 제대로 확인하려면 커널이 데이터를 정상적으로 파싱했는지, 대상 연결이 실제로 예상한 규칙과 일치하는지도 확인해야 합니다. 파일 날짜나 웹사이트 접속 여부만 보지 말고 다음 세 단계를 차례로 확인하세요.

1단계: 현재 사용하는 파일 확인

클라이언트의 ‘설정 폴더 열기’ 메뉴나 커널 시작 매개변수에서 작업 디렉터리를 확인하세요. 다운로드 폴더나 앱 설치 폴더라고 단정하면 안 됩니다. DAT 모드에서는 geoip.dat와 geosite.dat를 확인하고, MMDB 모드에서는 실제로 로드되는 MMDB 파일을 살펴보세요. 운영체제에서 확장자가 숨겨질 수 있으므로 geosite.dat.dat 같은 파일명이 생기지 않도록 주의하세요.

2단계: 설정과 데이터를 정상적으로 읽는지 확인

mihomo 명령줄을 별도로 사용하는 경우, 복사한 테스트 디렉터리에서 아래 설정 검사를 실행할 수 있습니다. 예시 디렉터리 ./geo-check를 미리 만들고 테스트할 설정과 데이터 파일을 넣으세요. 테스트 명령으로 현재 실행 중인 디렉터리를 덮어쓰지 마세요.

mihomo -t -d ./geo-check -f ./geo-check/config.yaml

검사에 실패하면 먼저 처음 표시된 오류를 확인하세요. YAML 들여쓰기 오류, 존재하지 않는 정책 그룹, 누락된 GeoSite 분류, 데이터 파싱 실패는 각각 별도로 해결해야 합니다. 설정 검사에 통과해도 모든 트래픽이 예상대로 분기된다는 뜻은 아닙니다. 다음 단계에서 연결을 검증하기 위한 조건을 갖춘 것입니다.

3단계: 연결을 새로 만들고 적용된 규칙 확인

  1. 규칙 모드인지 확인하세요. 전역 모드나 직접 연결 모드에서는 확인하지 마세요.
  2. 대상 웹사이트의 기존 연결을 종료한 뒤 페이지를 다시 여세요. 필요한 경우 해당 앱도 완전히 종료했다가 다시 실행하세요.
  3. 클라이언트의 연결 패널에서 도메인, 대상 IP, 일치한 규칙, 최종 정책 경로를 확인하세요.
  4. 직접 연결되어야 하는 대상 하나와 ‘노드 선택’을 거쳐야 하는 대상 하나를 각각 테스트하고 결과를 기록하세요.

예를 들어 연결 패널에 일치 규칙이 GeoSite(cn), 정책이 DIRECT로 표시되어야 국내 도메인 규칙의 예상 결과와 일치합니다. 표시 형식은 클라이언트마다 다르므로 로그에 완전히 같은 문자열이 나와야 하는 것은 아닙니다. 기존의 장시간 연결은 데이터베이스를 업데이트해도 새 규칙에 따라 자동으로 다시 연결되지 않습니다. 확인할 때는 새 연결을 사용하세요.

업데이트 실패와 분기 오류: 증상에 따라 확인하기

증상우선 확인할 항목해결 방향
다운로드 연결 시간 초과데이터 출처 도메인에 접속할 수 있는지, DNS와 현재 네트워크 상태먼저 다운로드 연결을 복구하고, 기존에 정상 작동하는 데이터는 그대로 두세요. 성급하게 디렉터리를 비우지 마세요.
분류가 없다는 오류분류 이름의 철자, 데이터 출처, 실제로 로드한 파일출처에서 제공하는 분류를 확인하거나 해당 출처가 지원하는 규칙으로 바꾸세요.
데이터 파싱 실패 오류웹페이지를 잘못 다운로드했는지, 파일 형식이 설정과 맞는지올바른 릴리스 파일을 다시 받으세요. 저장소 웹페이지 주소를 파일 주소 대신 사용하지 마세요.
파일은 업데이트됐지만 트래픽 분기는 그대로임규칙 순서, 최종 설정, 기존 연결설정을 다시 불러온 뒤 새 연결을 만들어 실제로 일치한 규칙을 확인하세요. 출구 IP만 확인해서는 안 됩니다.
구독을 업데이트할 때마다 설정이 사라짐구독 캐시에서만 설정을 수정했는지장기간 유지할 설정을 클라이언트의 영구 오버라이드 계층으로 옮기세요.

최초 실행 때 다운로드되지 않으면 어떻게 하나요?

설정을 시작하려면 Geo 데이터가 필요한데 현재 네트워크에서 데이터 출처에 접속할 수 없다면 초기화에 필요한 파일을 구하지 못할 수 있습니다. 출처에 접속할 수 있는 네트워크에서 해당 파일을 받아 실제 커널 작업 디렉터리에 넣은 다음 다시 시작하세요. 파일을 직접 교체하기 전에 커널을 중지하고 기존 파일을 백업하세요. 파일이 정상적으로 로드된 것을 확인한 후 자동 업데이트 연결을 설정하세요.

시작 오류를 피하려고 GEOIP·GEOSITE 규칙을 모두 삭제하면서 기존 기본 처리 방식은 그대로 두고 결과를 확인하지 않는 것은 피하세요. 규칙을 삭제하면 직접 연결되던 연결이 모두 프록시 그룹으로 넘어가거나 예외 서비스가 올바르게 분기되지 않을 수 있습니다. 임시로 설정을 바꿀 때도 변경 사항을 기록하고, 원래대로 복구한 뒤 다시 확인하세요.

TUN을 켜면 별도의 데이터베이스가 필요한가요?

아니요. TUN은 트래픽을 가져오는 방식을 바꾸지만 GeoIP·GeoSite 데이터까지 다른 파일로 자동 변경하지는 않습니다. 같은 커널은 일반적으로 동일한 작업 디렉터리의 데이터를 계속 읽습니다. TUN을 켠 뒤 결과가 달라졌다면 다른 데이터베이스를 받기 전에 도메인 정보가 유지되는지, DNS 요청이 어디로 가는지, Fake-IP 매핑과 대상 연결 정보가 어떻게 처리되는지 먼저 확인하세요.

IP만 있는 연결에는 GeoSite가 일치시킬 도메인이 없습니다. 일부 프로토콜과 조건에서는 스니핑으로 도메인 정보를 보완할 수 있지만 모든 트래픽에서 작동하는 것은 아닙니다. 트래픽 처리, DNS와 규칙의 관계를 더 알아보려면 기술 참고 자료를 확인하거나, 용어집에서 Fake-IP와 TUN의 정의를 살펴보세요.

데이터 관리 순서: 출처 고정, 복구용 파일 보관, 새 연결 확인

  • 출처 고정: 미러 주소만 기억해 두지 말고 선택한 데이터 저장소, 파일 형식, 설정 필드를 기록하세요.
  • 적절한 주기 설정: 일상적으로는 24시간으로 시작해도 충분합니다. 데이터가 분 단위로 바뀌는 경우는 드물며, 컴퓨터가 절전 상태이거나 커널이 중지된 동안에는 업데이트가 계속 실행되지 않습니다.
  • 복구용 데이터 보관: 출처를 바꾸거나 파일을 직접 교체하기 전에 현재 설정과 정상적으로 작동하는 데이터를 저장해 두세요. 문제가 생기면 함께 복원할 수 있습니다.
  • 실제 결과 확인: 업데이트 후 데이터가 로드됐는지 확인하고, 새 연결로 도메인과 일치 규칙, 정책 경로를 점검하세요.

Geo 데이터 관리의 핵심은 파일 날짜를 최대한 최신으로 유지하는 것이 아니라 데이터 형식, 분류 이름, 규칙 대상이 서로 맞는지 확인하는 것입니다. 먼저 커널과 데이터 로드 방식을 확인하고, 업데이트 출처를 설정한 다음 연결 패널에서 검증하면 데이터베이스를 반복해서 교체하는 것보다 문제를 쉽게 찾을 수 있습니다.