GeoIP·GeoSite 데이터베이스 업데이트 가이드: mihomo geodata 설정과 규칙 매칭

GeoIP와 GeoSite 데이터 파일의 출처와 형식 차이를 알아보고, mihomo의 geodata-mode와 사용자 지정 업데이트 주소·자동 업데이트 설정법, 오래된 데이터에서 나타나는 증상을 정리합니다.

GeoIP와 GeoSite: IP 데이터와 도메인 분류부터 구분하기

mihomo 규칙 설정의 GEOIP,CN,DIRECT와 GEOSITE,cn,DIRECT는 비슷해 보이지만 서로 다른 데이터를 사용합니다. GeoIP는 IP 주소 대역을 국가·지역 또는 데이터셋이 정의한 분류에 연결하고, GeoSite는 도메인을 사이트·서비스·주제별로 분류합니다. 데이터베이스는 규칙 매칭에 필요한 기준을 제공할 뿐이며, 연결을 직접 연결할지 프록시로 보낼지는 규칙 오른쪽의 정책이 결정합니다.

예를 들어 중국 본토의 웹사이트에 접속하면 도메인이 먼저 GEOSITE,cn에 매칭될 수 있습니다. 여기서 매칭되지 않으면 이후 규칙이 확인된 대상 IP를 GEOIP,CN에 매칭할 수도 있습니다. 웹사이트가 해외 CDN이나 공유 클라우드 서비스를 사용하거나 새 도메인을 쓰는 경우 두 데이터의 결과가 다를 수 있습니다. 데이터베이스가 손상된 것이 아니라 분류 기준과 실제 배포 환경이 서로 다른 것일 수 있습니다.

데이터 파일주요 용도유의 사항
geoip.datDAT 모드에서 GEOIP 규칙에 IP 분류 정보 제공포함된 분류는 배포처에 따라 다름
Country.mmdbMMDB 모드에서 IP 위치 정보 제공DAT와 형식이 다르므로 확장자만 바꿔서는 대체할 수 없음
geosite.datGEOSITE 규칙에 도메인 분류 정보 제공분류 이름과 속성은 데이터셋마다 다름

데이터 출처와 분류 기준

대표적인 데이터 출처로는 Loyalsoldier의 v2ray-rules-dat과 MetaCubeX의 meta-rules-dat이 있습니다. 두 프로젝트는 데이터를 구축하고 배포하며, 프록시 노드 제공업체가 아닙니다. 두 곳 모두 geosite.dat를 제공하더라도 분류와 추가 속성, 수록 범위가 완전히 같다고 볼 수는 없습니다. 출처를 바꾸기 전에 설정에서 사용하는 각 분류가 새 데이터셋에 포함되어 있는지 확인하세요.

GeoIP의 국가 정보는 서비스 운영 회사의 소재 국가나 접속 시 실제로 거치는 네트워크 경로와 같지 않습니다. GeoSite의 분류 태그 역시 해당 사이트의 모든 하위 도메인이 같은 방식으로 운영된다는 뜻은 아닙니다.

geodata-mode: GEOIP에서 사용할 형식 선택

geodata-mode는 mihomo 최상위 설정 항목입니다. 값을 true로 설정하면 GEOIP가 DAT 데이터를 사용하고, false로 설정하면 MMDB 데이터를 사용합니다. 이 설정은 모든 지리 기반 규칙을 켜는 스위치가 아니며 도메인 규칙을 IP 규칙으로 자동 변환하지도 않습니다. GeoSite는 별도의 도메인 데이터베이스를 계속 사용합니다.

# 최상위 설정이며 rules, dns 등의 항목과 같은 수준
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"
  mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"

이 예시에서는 자동 업데이트 간격을 24시간으로 설정하고 데이터 주소 세 개를 직접 지정합니다. 완전한 프록시 설정이 아니므로 구독의 노드나 정책 그룹을 대신할 수 없습니다. DAT 모드에서 GEOIP 문제를 점검할 때는 geoip 주소와 해당 파일을 먼저 확인하고, MMDB 모드에서는 mmdb를 확인하세요. 파일 하나가 방금 다운로드됐다는 이유만으로 현재 사용 중인 데이터까지 업데이트됐다고 판단해서는 안 됩니다.

설정 항목은 최종 적용 파일에 반영되어야 합니다

Clash Nyanpasu의 UI 설정, 구독 설정, 오버라이드 설정이 함께 커널 실행 파일을 만들 수 있습니다. 구체적인 메뉴는 클라이언트 버전에 따라 달라지므로, 최종 적용 설정에 앞서 언급한 최상위 항목이 들어 있는지를 기준으로 확인하세요. 다운로드한 구독 파일을 직접 수정하면 다음 구독 업데이트 때 변경 사항이 덮어써질 수 있습니다. 계속 사용할 사용자 지정 설정은 클라이언트가 지원하는 오버라이드나 설정 병합 기능으로 저장하세요.

  • 다른 설정 항목만 지원하는 커널이 아니라 mihomo가 현재 활성화되어 있는지 확인하세요.
  • geox-url은 YAML 최상위에 두어야 하며 dns나 profile 아래에 들여쓰기하면 안 됩니다.
  • 수정한 뒤 설정을 다시 불러오세요. 현재 버전에서 관련 설정이 다시 초기화되지 않는다면 커널을 재시작해 확인하세요.
  • 실행 로그에서 설정 파싱 오류를 확인하세요. 편집기에 '저장 완료'라고 표시되는지만 보고 적용 여부를 판단하지 마세요.

데이터베이스 업데이트: 자동 예약·수동 실행·오프라인 교체

구독 업데이트, 규칙 세트 업데이트, geodata 업데이트는 서로 다른 경로로 처리됩니다. 구독 업데이트는 보통 YAML이나 노드 정보를 다운로드하고, rule-providers는 자체 주소와 주기에 따라 업데이트됩니다. 지리 데이터베이스 자동 업데이트 설정은 geo-auto-update입니다. 구독을 한 번 새로 고쳤다고 해서 GeoIP와 GeoSite도 업데이트됐다고 볼 수 없습니다.

자동 업데이트는 설정과 네트워크를 함께 확인해야 합니다

  1. 적용 중인 설정에서 geo-auto-update: true인지 확인하고, geo-update-interval: 24의 단위가 시간인지 확인하세요.
  2. 실행 환경에서 실제 다운로드 주소에 접속할 수 있는지 확인하세요. GitHub 릴리스 파일은 다른 주소로 리디렉션될 수 있으므로 웹사이트 첫 화면이 열리는지만 확인해서는 충분하지 않습니다.
  3. 커널 로그에서 다운로드·로드·오류 메시지를 확인하고, 도메인 확인, 연결 시간 초과, HTTP 응답, 파일 파싱 중 어느 단계에서 실패했는지 기록하세요.
  4. 클라이언트에 지리 데이터베이스 업데이트 기능이 있다면 직접 실행해 확인하세요. 해당 기능이 없다면 구독 업데이트 버튼을 대체 수단으로 여기지 마세요.

데이터를 받으려면 프록시가 필요한데 프록시를 시작하려면 로컬 데이터베이스가 필요한 경우, 시작 과정에 의존 관계가 생깁니다. 이때는 먼저 사용 가능한 기존 파일을 보존해 커널이 시작될 수 있게 한 다음 다운로드 경로를 복구하세요. 데이터 디렉터리 전체를 먼저 비우면 문제가 '오래된 데이터'에서 '커널이 설정을 불러오지 못함'으로 바뀔 수 있습니다.

오프라인 교체는 파일 형식에 맞게 진행

온라인 다운로드가 계속 실패한다면 배포처에 접속할 수 있는 네트워크에서 해당 파일을 받은 다음 대상 기기로 옮길 수 있습니다. 먼저 클라이언트의 실행 정보나 로그로 커널이 실제로 사용하는 데이터 디렉터리를 확인하고, 기존 파일을 백업한 뒤 커널을 중지하세요. 원래 파일명을 유지하면서 해당 데이터 파일만 교체한 다음 다시 시작합니다. 설치 디렉터리만 보고 데이터 디렉터리를 추측하지 마세요. 포터블 모드와 일반 설치는 저장 위치가 다를 수 있습니다.

다운로드한 파일은 배포된 원본 파일이어야 합니다. 로그인 페이지나 오류 페이지, 압축 파일을 저장해 geosite.dat라는 이름을 붙여도 커널은 파일을 파싱하지 못합니다. HTTP 상태 코드와 파일 형식, 배포 안내를 함께 확인하세요. 파일 수정 시간이 최근이라는 사실만으로 파일을 사용할 수 있다고 볼 수는 없습니다.

커널이 파일을 읽는 동안 데이터베이스를 덮어쓰지 말고 MMDB 파일의 이름을 DAT로 바꾸지도 마세요. 교체 후 시작에 실패하면 백업 파일을 복원한 다음 로그를 확인해 형식이나 분류 호환성 문제를 찾으세요.

규칙 매칭: 데이터 업데이트 후에도 순서를 확인하세요

mihomo 규칙은 위에서 아래 순서로 확인하며 처음 매칭된 규칙이 트래픽 경로를 결정합니다. 데이터베이스를 업데이트해도 규칙 순서는 바뀌지 않습니다. 맨 위에 범위가 넓은 도메인 규칙이나 MATCH가 있으면 뒤에 있는 GEOIP와 GEOSITE 규칙은 실행되지 않을 수 있습니다.

# 규칙 예시: PROXY는 이미 존재하는 노드 또는 정책 그룹 이름이어야 합니다
rules:
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

위 예시는 매칭 순서만 보여 주며, 완전한 LAN 및 IPv6 분기 설정은 아닙니다. 앞의 세 규칙은 일반적인 IPv4 사설 대역을 처리하고, 국가 IP 분류보다 도메인 분류를 먼저 적용한 뒤 나머지를 프록시 정책으로 보냅니다. 기존 설정에 이미 rules가 있다면 항목을 병합하고 같은 이름의 최상위 키를 추가로 만들지 마세요. PROXY는 모든 설정에 기본으로 제공되는 정책이 아니므로 실제 정책 그룹 이름으로 바꿔야 합니다.

no-resolve는 IP 규칙의 매칭 결과에 영향을 줍니다

IP 규칙에는 no-resolve를 사용할 수 있습니다. 이 옵션은 해당 규칙에 매칭하기 위해 도메인을 별도로 조회하지 않도록 합니다. 연결 정보에 사용할 수 있는 대상 IP가 없으면 규칙이 매칭되지 않을 수 있습니다. 따라서 GEOIP,CN,DIRECT에 무심코 no-resolve를 추가하면 이전에 DNS 조회를 통해 이루어지던 트래픽 분기가 달라질 수 있습니다. DNS 설정과 연결 정보, 실제 요구 사항을 고려해 추가 여부를 결정하세요.

fake-ip를 사용하면 애플리케이션에 매핑용 주소가 전달될 수 있으므로 해당 주소만으로 실제 서버의 국가를 판단할 수 없습니다. 연결 상세 정보에서 복원된 도메인과 대상 정보, 매칭된 규칙, 최종 출구를 확인하세요. 애플리케이션이 자체 암호화 DNS를 사용하거나 커널에 IP만 전달하는 경우 GEOSITE가 매칭될 수 있는지는 도메인 정보의 확보 여부와 스니핑 관련 설정에 따라 달라집니다.

데이터가 오래됐을 때 나타나는 증상: 분류 누락과 예상 밖의 분류를 구분하세요

증상우선 확인할 항목확인 방법
새 도메인이 예상한 분류에 매칭되지 않음데이터에 아직 포함되지 않았거나 분류 기준이 다름배포 데이터의 분류 내용과 로컬 파일 업데이트 시각 확인
설정을 불러올 때 분류가 없다는 오류가 표시됨규칙 태그의 오타 또는 데이터 출처 변경데이터 출처에서 해당 분류와 속성을 제공하는지 확인
업데이트 후에도 이전 규칙에 매칭됨파일이 다시 로드되지 않았거나 앞선 규칙이 먼저 매칭됨다시 로드한 뒤 새 연결을 만들고 매칭 상세 정보 확인
파일 다운로드는 성공했지만 파싱에 실패함다운로드한 내용의 형식이 예상과 다름응답 내용과 DAT·MMDB 파일 형식 확인
특정 CDN 주소의 연결 경로가 바뀜DNS 응답 주소 또는 GeoIP 국가 정보가 달라짐변경 전후의 실제 DNS 조회 결과 비교

'국내 사이트가 프록시로 연결됐다'고 해서 GeoSite 데이터가 오래된 것은 아닙니다. 프록시 모드가 전역으로 설정됐는지, 사용자 지정 규칙이 대상 도메인에 먼저 매칭됐는지, 연결에 도메인 정보가 있는지, 정책 그룹에서 출구를 잘못 선택했는지도 확인해야 합니다. 반대로 데이터베이스의 국가 정보가 정확하더라도 특정 서비스의 계정 지역이나 저작권 지역 요구에 맞지 않을 수 있습니다.

rule-providers는 geosite.dat의 다른 이름이 아닙니다

RULE-SET은 rule-providers에 정의된 규칙 세트를 참조하며, YAML이나 텍스트 또는 지원되는 MRS 형식을 사용할 수 있습니다. 반면 GEOSITE는 지리 도메인 데이터베이스를 조회합니다. 각각 데이터 출처와 형식, 업데이트 방식이 다릅니다. 규칙 세트 URL을 geox-url.geosite에 넣거나 DAT 파일을 일반 텍스트 규칙 세트로 지정해도 형식이 자동으로 변환되지는 않습니다.

업데이트 후 확인 순서: 한 번에 변수 하나씩 변경

데이터베이스 업데이트가 제대로 적용됐는지는 결국 '같은 대상에 새로 연결했을 때 어떤 규칙에 매칭되는지'로 확인해야 합니다. 브라우저는 HTTP/2 또는 HTTP/3 연결을 재사용할 수 있으며, 이미 연결된 트래픽은 규칙 파일을 업데이트해도 자동으로 출구가 바뀌지 않습니다. 관련 연결을 닫거나 테스트 앱을 다시 시작한 뒤 새로 접속하세요.

  1. 기준 기록: 직접 연결할 도메인 하나와 프록시가 필요한 도메인 하나를 정하고, 현재 규칙 모드와 매칭 규칙, 정책 그룹, 출구를 기록합니다.
  2. 데이터만 업데이트: 결과가 달라진 원인을 구분할 수 있도록 DNS, TUN, 규칙 순서는 동시에 변경하지 않습니다.
  3. 정상 로드 확인: 로그에 다운로드 또는 파싱 오류가 있는지 확인하고, 필요하면 커널을 재시작해 설정이 정상적으로 시작되는지 확인합니다.
  4. 새 연결 생성: 같은 도메인에 다시 접속한 뒤 연결 상세 정보에서 GEOSITE, GEOIP 또는 다른 규칙 중 무엇에 매칭됐는지 확인합니다.
  5. 예외 처리: 데이터 출처의 분류가 실제 요구와 다르면 범위가 명확한 도메인 규칙을 추가해 관련 범위가 넓은 규칙보다 앞에 둡니다.

특정 도메인 하나를 임시로 직접 연결하려면 DOMAIN,example.com,DIRECT처럼 정확히 일치하는 규칙을 추가할 수 있습니다. 하위 도메인까지 포함해야 할 때만 DOMAIN-SUFFIX를 고려하세요. 단일 사이트 문제를 해결하려고 클라우드 업체의 넓은 IP 대역 전체를 직접 연결로 지정하면 공유 주소를 사용하는 다른 서비스에도 영향을 줄 수 있으므로 권장하지 않습니다.

일상적인 관리는 세 가지로 정리할 수 있습니다. 정상적으로 시작되는 데이터베이스 백업을 보관하고, 자동 업데이트가 성공하는지 확인한 뒤, 주요 사이트에 새로 연결해 결과를 검증하세요. GeoIP와 GeoSite 업데이트는 매칭 기준이 최신이고 사용 가능한지 확인하는 작업입니다. 규칙 순서와 DNS 동작, 정책 그룹의 경로 선택은 각각 따로 점검해야 합니다. 관련 설정 개념은 기술 문서에서 확인하고, 처음 설정한다면 사용 가이드부터 살펴보세요.

Clash 클라이언트 다운로드