고급 설정 예상 읽기 시간 12분

Clash GeoIP·GeoSite 데이터베이스 업데이트 방법 | MMDB·DAT 파일 출처와 규칙 설정

GeoIP.mmdb와 GeoSite.dat의 역할, 자동 업데이트 URL 설정 및 수동 교체 방법, GEOIP·GEOSITE 규칙 작성과 문제 해결을 알아봅니다.

먼저 커널과 데이터베이스 형식 확인하기

GeoIP는 대상 IP의 위치 정보를 기준으로 분류하고, GeoSite는 도메인 목록을 기준으로 분류합니다. 둘 다 노드 구독이 아니며 프록시 서버를 제공하지도 않습니다. 데이터베이스를 업데이트하면 관련 규칙의 매칭 기준만 바뀝니다. 노드가 추가되거나 정책 그룹의 출구 선택이 변경되지는 않습니다.

이 문서의 자동 업데이트 설정은 Clash Meta에서 이어진 mihomo 커널을 기준으로 합니다. 구버전 Clash 커널이나 클라이언트에 내장된 커널은 지원 필드와 데이터 디렉터리가 다를 수 있습니다. 먼저 클라이언트의 ‘정보’ 또는 커널 정보 화면에서 커널 이름과 버전을 확인하세요. 독립 실행 환경에서는 mihomo -v를 실행하면 됩니다. 클라이언트 이름만 보고 GEOSITE 지원 여부를 판단하지 마세요.

데이터 파일 저장된 데이터 관련 설정 및 규칙
country.mmdb MMDB 형식의 IP 위치 데이터 geodata-mode: false일 때 GEOIP에서 사용
geoip.dat GeoData 형식의 IP 분류 목록 geodata-mode: true일 때 GEOIP에서 사용
geosite.dat 태그별로 구성된 도메인 목록 GEOSITE에서 사용하며 위 모드 전환 설정과는 무관

자료를 검색하다 보면 GeoIP.mmdb, Country.mmdb, GeoSite.dat 같은 이름을 자주 접합니다. 프로젝트 파일명이나 과거 명칭, 개념을 가리키는 표현일 수 있으므로 실제 로드 경로를 이름만으로 판단해서는 안 됩니다. mihomo에서 일반적으로 사용하는 데이터 파일명은 표에 적힌 소문자 이름입니다. Linux 파일 시스템은 보통 대소문자를 구분합니다. 확장자가 같아도 파일 내용이 호환되는 것은 아닙니다. MMDB와 DAT는 이름을 바꿔 서로 대체할 수 없습니다.

파일 출처: 형식과 태그도 함께 확인

MetaCubeX/meta-rules-dat 프로젝트에서 제공하는 빌드 결과물을 참고할 수 있습니다. 이 프로젝트는 관련 커널에서 사용할 수 있는 GeoIP, GeoSite 등의 데이터를 제공합니다. 출처를 선택할 때는 다운로드 URL뿐 아니라 데이터 설명도 확인하세요. IP 위치 데이터의 출처, 도메인 목록 생성 방식, 포함된 태그와 업데이트 주기를 살펴보는 것이 좋습니다.

  • MMDB: 커널에서 읽을 수 있는 국가·지역 위치 데이터베이스인지 확인하세요. 도시 데이터베이스나 ASN 데이터베이스를 같은 용도의 대체 파일로 사용하면 안 됩니다.
  • GeoIP DAT: 필요한 국가·지역 코드와 규칙에서 참조하는 추가 분류가 실제로 포함되어 있는지 확인하세요.
  • GeoSite DAT: cn처럼 규칙에서 사용하는 태그가 포함되어 있는지 확인하세요. 경량 버전은 일부 서비스 분류를 제외했을 수 있습니다.
  • 업데이트 URL: 저장소 메인 페이지나 브라우저에서 보는 파일 미리보기 페이지가 아닌, 실제 바이너리 파일의 배포 URL을 선택하세요.

이 문서의 예시는 해당 프로젝트의 latest 배포 리소스를 사용합니다. 이런 URL은 계속 갱신되는 콘텐츠를 가리키며, 특정 버전의 스냅샷을 고정하지 않습니다. 특정 시점의 라우팅 결과를 재현해야 한다면 당시 데이터 파일을 보관하고 다운로드 날짜, 출처 URL, 커널 버전을 기록하세요. 출처마다 같은 IP나 도메인을 다르게 분류할 수 있으므로 파일 업데이트 날짜만으로 분류가 정확하다고 판단할 수는 없습니다.

mihomo 자동 업데이트 설정

아래 필드는 YAML 최상위에 두며 dns, rules와 같은 들여쓰기 단계에 배치합니다. 예시는 MMDB 모드를 선택하고 업데이트 간격을 24시간으로 설정합니다. geo-update-interval의 단위는 초가 아니라 시간입니다. 이후 모드를 전환할 수 있도록 리소스 URL 세 가지를 함께 표시했지만, 실제로 로드되는 데이터는 커널, 규칙 참조 및 로드 방식에 따라 달라집니다.

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

geox-url:
  geoip: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat"
  geosite: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
  mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb"

기존 설정에 병합하고 중복으로 추가하지 않기

현재 설정에 geox-url이 이미 있는지 먼저 검색하세요. 같은 단계에서 동일한 키를 중복 정의하지 마세요. 중복 키를 처리하는 방식은 파서에 따라 다를 수 있습니다. 구독으로 설정 파일을 생성한다면 클라이언트가 지원하는 영구 오버라이드 또는 병합 기능을 사용하세요. 임시 생성 파일을 직접 수정하면 다음 구독 갱신 때 변경 사항이 덮어써질 수 있습니다.

geodata-mode: true로 변경하면 GEOIP는 geoip.dat를 사용합니다. country.mmdb만 교체해도 현재 모드에서 사용하는 IP 데이터는 업데이트되지 않습니다. GeoSite는 계속 geosite.dat를 사용하므로, 이를 위해 GEOIP 모드를 전환할 필요는 없습니다.

최초 다운로드 시 필요한 사항

자동 업데이트를 사용하려면 커널이 리소스 URL에 접속할 수 있어야 합니다. DNS 조회 실패, TLS 핸드셰이크 실패, 네트워크 시간 초과로 업데이트가 중단될 수 있습니다. 아직 로드되지 않은 지리 규칙을 통해 다운로드해야 한다면 시작 단계에서 의존성 문제가 발생할 수도 있습니다. 이때는 사용 가능한 파일을 먼저 수동으로 넣고 업데이트 요청의 연결 경로를 점검하세요. 반복해서 재시작하는 것보다 문제 원인을 파악하기 쉽습니다.

클라이언트의 ‘지리 데이터베이스 업데이트’ 기능은 노드 구독 새로고침과 별개의 작업입니다. 메뉴 이름은 클라이언트 버전에 따라 다를 수 있으므로, 작업 후에는 커널 로그에서 다운로드와 로드 결과를 확인하세요. 설정에 true가 적혀 있다고 해서 방금 업데이트가 완료된 것은 아닙니다.

수동 교체: 데이터 디렉터리를 찾고 커널 중지하기

데이터 디렉터리는 설치 디렉터리나 구독 YAML 파일이 있는 디렉터리와 다를 수 있습니다. GUI 클라이언트는 서비스 모드에서 사용할 데이터 파일을 별도로 관리하기도 합니다. 클라이언트의 설정 디렉터리 바로가기, 실행 로그 또는 커널 시작 인자를 통해 경로를 확인하세요. 디스크 전체에서 같은 이름의 파일을 찾아 무작정 덮어쓰지 마세요.

독립 실행형 mihomo를 예로 들겠습니다. -d를 명시하면 데이터 디렉터리를 고정해 작업 디렉터리를 달리해 실행했을 때 다른 파일을 잘못 읽는 일을 방지할 수 있습니다. 아래 명령은 프로젝트 작업 디렉터리에서 실행하며, 유효한 mihomo-data/config.yaml 파일과 시스템에 설치된 curl이 필요합니다.

mkdir -p ./mihomo-data

curl -fL --output ./mihomo-data/country.mmdb.new \
  https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb

curl -fL --output ./mihomo-data/geosite.dat.new \
  https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat

-f는 HTTP 오류 상태가 발생하면 명령을 실패 처리하고, -L은 배포 리소스의 리디렉션을 따라갑니다. 두 명령이 모두 성공한 다음 파일 크기가 0바이트가 아닌지, 게이트웨이가 반환한 HTML 페이지가 아닌지 확인하세요. 다운로드 성공은 요청이 완료되었다는 뜻일 뿐입니다. 최종적으로는 커널이 파일을 읽을 수 있는지 확인해야 합니다.

  1. 해당 데이터 디렉터리를 사용하는 커널을 중지하세요. GUI 클라이언트에서는 클라이언트가 관리하는 커널이나 서비스를 중지해야 합니다. 포트를 선점하려고 별도의 프로세스를 추가로 실행하지 마세요.
  2. 기존 country.mmdb와 geosite.dat를 별도의 백업 디렉터리에 복사하고, 현재 설정도 함께 보관하세요.
  3. 다운로드가 끝난 .new 파일의 이름을 정식 파일명으로 변경하세요. DAT 모드에서는 geoip.dat를 다운로드하고 백업한 뒤 교체해야 합니다.
  4. 같은 데이터 디렉터리를 지정해 설정을 테스트한 뒤 재시작하고, 로그와 실제 연결에서 규칙이 적용되는지 확인하세요.
mv ./mihomo-data/country.mmdb.new ./mihomo-data/country.mmdb
mv ./mihomo-data/geosite.dat.new ./mihomo-data/geosite.dat

mihomo -t -d ./mihomo-data -f ./mihomo-data/config.yaml
mihomo -d ./mihomo-data -f ./mihomo-data/config.yaml

이름 변경 명령은 같은 이름의 파일을 덮어쓰므로 반드시 먼저 백업해야 합니다. 설정 테스트는 시작 전 검사일 뿐 모든 접속 경로를 완전히 검증하지는 않습니다. 실패하면 먼저 구체적인 오류를 확인하고 이전 데이터로 복구하세요. 여러 출처의 파일을 연달아 바꾸면 형식 문제와 네트워크 문제가 뒤섞일 수 있습니다.

GEOIP·GEOSITE 규칙과 적용 순서

Clash 규칙은 일반적으로 위에서 아래 순서로 매칭되며, 처음 일치한 규칙의 정책이 적용됩니다. 아래는 전체 설정이 아닌 규칙 예시입니다. 프록시 선택은 기존 proxy-groups에 있는 정책 그룹 이름과 정확히 일치해야 합니다. 기존 출구 이름으로 바꿔 사용할 수도 있습니다.

rules:
  - DOMAIN-SUFFIX,internal.test,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,프록시 선택

도메인 분류와 IP 분류는 다릅니다

GEOSITE,cn,DIRECT는 데이터베이스의 cn 도메인 목록을 사용합니다. ‘.cn으로 끝나는 모든 도메인’을 뜻하는 문법이 아닙니다. 반면 GEOIP,CN,DIRECT는 대상 IP의 위치 정보를 조회합니다. 도메인이 CDN을 통해 여러 지역의 IP로 연결될 수 있으므로 두 규칙의 결과가 다를 수 있습니다.

도메인 규칙을 IP 규칙보다 앞에 두면 도메인 목록을 먼저 기준으로 판단해 DNS 조회 결과의 위치 정보에 덜 의존할 수 있습니다. 단, GeoSite가 작동하려면 연결 정보에서 사용할 수 있는 도메인이 확인되어야 합니다. 앱이 IP에 직접 연결하고 도메인을 복원할 다른 방법도 없다면 GeoSite가 원래 서비스 이름을 자동으로 알아낼 수는 없습니다.

no-resolve의 실제 의미

no-resolve는 해당 IP 규칙과 매칭하기 위해 도메인을 새로 조회하지 말라는 뜻입니다. 연결에 사용할 수 있는 대상 IP가 이미 있다면 여전히 매칭을 시도할 수 있습니다. DNS 전체를 비활성화하거나 ‘DNS 요청을 직접 연결로 보내는’ 스위치는 아닙니다.

따라서 도메인이 GeoSite에 매칭되지 않고, 뒤이은 GEOIP 규칙에 no-resolve가 지정되어 있으며 사용 가능한 대상 IP도 없다면 MATCH까지 이어질 수 있습니다. 이는 규칙 설계에 따른 결과이지 데이터베이스 손상의 증거가 아닙니다. MATCH는 마지막에 배치해야 합니다. 지리 규칙보다 위에 두면 뒤쪽 규칙은 적용되지 않습니다.

업데이트 후 적용되지 않을 때: 오류별 점검

증상 우선 확인할 항목 해결 방향
GEOSITE 규칙을 인식하지 못함 실행 중인 커널과 규칙 지원 여부 클라이언트가 여전히 구형 커널을 사용 중인지 확인하세요. 데이터 파일만 바꾸면 해결되지 않습니다.
도메인 목록이 없다는 메시지가 표시됨 현재 geosite.dat에 해당 태그가 포함되어 있는지 데이터 출처의 태그 설명을 확인하고 규칙을 수정하거나 해당 목록이 포함된 데이터를 선택하세요.
데이터베이스 읽기 실패 파일 형식, 크기, 권한 및 대소문자 다운로드된 HTML을 제외하고 읽을 수 있는 백업 파일을 복원한 다음 다시 다운로드하세요.
업데이트는 성공했지만 매칭 결과가 바뀌지 않음 데이터 디렉터리, 모드, 규칙 순서 및 기존 연결 재사용 여부 새 파일이 실제로 로드됐는지 확인하고 새 연결을 만들어 매칭 결과를 확인하세요.
예약 업데이트가 계속 시간 초과됨 리소스 도메인 조회와 다운로드 요청 경로 먼저 파일을 수동으로 넣어 서비스를 복구한 뒤 업데이트 연결 경로를 점검하세요.

웹페이지가 열리는지만 보지 말고 연결 기록으로 확인

테스트할 때 규칙 모드를 사용하고, 실제로 확인이 필요한 도메인 하나를 선택하세요. 연결 패널에서 대상 도메인, 대상 IP, 적용된 규칙과 최종 정책을 기록합니다. 전역 모드는 여기서 다루는 규칙 순서를 검증하기에 적합하지 않습니다. 웹페이지가 열린다는 것은 한 가지 연결 경로가 작동한다는 뜻일 뿐, GeoSite나 GeoIP 규칙이 적용됐다는 의미는 아닙니다.

데이터베이스를 업데이트해도 기존 연결이 모두 다시 라우팅되는 것은 아닙니다. 테스트 중인 페이지나 앱의 기존 연결을 종료하고 새 요청을 보내세요. 필요하면 클라이언트의 연결 관리 기능으로 해당 연결을 끊을 수 있습니다. 결과가 계속 예상과 다르면 먼저 정확한 DOMAIN 규칙으로 정책 이름과 규칙 로드를 확인한 다음 분류 목록 자체를 점검하세요.

업데이트 및 롤백 점검 목록

  • 커널 버전, 현재 geodata-mode, 데이터 디렉터리 및 파일 출처 URL을 기록하세요.
  • GeoSite 태그가 있는지 확인하고 GEOIP가 현재 MMDB와 DAT 중 어느 파일을 읽는지 확인하세요.
  • 기존 파일과 설정을 백업하고 다운로드 임시 파일과 정식 파일을 분리하세요.
  • 설정을 테스트하고 다시 불러온 뒤 새 연결에서 실제로 적용된 규칙을 확인하세요.
  • 문제가 발생하면 설정과 해당 데이터 파일을 함께 복원하세요. 새 규칙이 이전 데이터베이스에 없는 태그를 참조하지 않도록 주의하세요.
  • 예약 업데이트를 다시 활성화한 뒤 다음 업데이트 로그를 확인하고, 영구 오버라이드가 구독 갱신으로 덮어써지지 않았는지 점검하세요.

GeoIP와 GeoSite 업데이트의 핵심은 ‘규칙이 참조하는 분류’, ‘커널에서 선택한 형식’, ‘실제로 로드된 파일’을 일치시키는 것입니다. 먼저 이 세 가지를 확인한 다음 업데이트 주기를 조정하세요. 다른 필드는 전체 설정 가이드를 참고하고, 규칙·정책 그룹·구독의 차이는 용어집에서 확인하세요.

Clash 다운로드클라이언트 및 시스템 요구 사항