Clash GeoIP·GeoSite 데이터베이스 업데이트 방법: geox-url 설정과 GEOSITE 규칙 작성법

GeoIP·GeoSite 데이터 파일의 용도와 저장 위치를 알아보고, geox-url 자동 업데이트와 수동 교체 방법, GEOIP·GEOSITE 규칙 작성법을 살펴봅니다.

먼저 커널을 확인하고 GeoIP와 GeoSite를 구분하세요

먼저 클라이언트의 ‘정보’ 또는 커널 정보 화면에서 실행 중인 커널을 확인하세요. Clash는 프록시 커널과 그 생태계를 통칭할 때 흔히 쓰는 이름이며, GUI 클라이언트는 설정 관리, 시스템 프록시 적용, 커널 실행을 담당합니다. 이 문서의 geox-url, GEOSITE 및 자동 업데이트 예시는 mihomo를 대상으로 합니다. mihomo는 기존 Clash Meta가 이름을 변경한 프로젝트이므로, 모든 구형 Clash 커널에 그대로 적용할 수는 없습니다.

먼저 두 데이터베이스의 차이를 파악한 뒤 업데이트할 파일을 정하세요. GeoIP는 IP 주소 대역을 국가나 지역 등의 그룹으로 분류하고, GeoSite는 도메인을 웹 서비스나 용도별 그룹으로 분류합니다. 두 데이터베이스는 규칙 매칭에 필요한 데이터를 제공할 뿐, 프록시 노드를 제공하거나 구독 링크를 대신하지 않습니다. 데이터베이스를 업데이트해도 만료된 노드가 다시 연결되지는 않습니다.

데이터 유형주요 파일관련 규칙 및 용도
GeoSitegeosite.datGEOSITE,cn,DIRECT: 도메인 그룹 기준으로 매칭
GeoIP, DAT 모드geoip.datGEOIP,CN,DIRECT: IP 주소 대역 기준으로 매칭
GeoIP, MMDB 모드Country.mmdbGEOIP 규칙에 사용되지만 데이터 형식과 로딩 방식이 다릅니다

데이터 소스에 어떤 그룹이 포함되어 있는지 먼저 확인한 다음 그룹 이름을 작성하세요. cn은 자주 쓰이는 예시지만, 모든 경량 데이터베이스에 같은 카테고리가 포함되는 것은 아닙니다. GeoSite 카테고리는 보통 소문자로 표기하며, 속성이 붙은 카테고리는 데이터 소스의 안내를 확인해야 합니다. 웹사이트 이름만 보고 태그를 추측한 뒤 로딩 실패를 네트워크 문제로 단정하지 마세요.

실제 데이터 디렉터리를 찾아 잘못된 파일을 업데이트하지 않기

먼저 실행 중인 커널의 작업 디렉터리를 찾으세요. 명령줄의 -d 옵션으로 설정 및 데이터 디렉터리를 지정할 수 있습니다. GUI 클라이언트는 보통 자체 앱 데이터 디렉터리를 사용하며, 서비스 모드에서는 계정이나 디렉터리가 다를 수도 있습니다. 설치 폴더, 다운로드 폴더, 현재 활성화된 설정 디렉터리는 서로 다를 수 있습니다.

  1. 클라이언트에서 디렉터리 열기 메뉴를 찾아 ‘설정 디렉터리’, ‘데이터 디렉터리’, ‘앱 디렉터리 열기’와 같은 항목을 선택하세요. 메뉴 이름은 클라이언트와 버전에 따라 다르므로 실제 화면을 기준으로 확인하세요.
  2. 커널 시작 로그나 프로세스 인자를 확인해 -d가 가리키는 경로를 찾으세요. 이름이 같은 파일을 검색으로 찾았다고 바로 덮어쓰면 안 됩니다.
  3. 해당 디렉터리에서 geosite.dat, geoip.dat 또는 Country.mmdb를 찾아 파일 크기와 수정 시간, 현재 사용 중인 설정을 기록하세요.
  4. 구독 원본과 실제 적용되는 최종 설정을 구분하세요. 클라이언트가 설정을 병합한 뒤에는 실제 적용되는 값이 구독 편집 화면의 내용과 다를 수 있습니다.

명령줄 커널을 별도 디렉터리에서 실행하면 경로를 명시적으로 지정할 수 있습니다. 아래 예시는 Linux 또는 macOS 터미널에서 실행하며, 현재 디렉터리에 mihomo-data/config.yaml이 준비되어 있다고 가정합니다. 첫 번째 명령은 버전을 확인하고, 두 번째 명령은 설정을 검사합니다. 검사 명령은 커널을 계속 실행해 프록시 서비스를 제공하지 않습니다.

mihomo -v
mihomo -t -d "$PWD/mihomo-data" -f "$PWD/mihomo-data/config.yaml"

geox-url 및 자동 업데이트 설정

업데이트 관련 필드는 YAML 최상위에 두고 rules, dns와 같은 수준으로 맞추세요. YAML은 들여쓰기로 계층을 표현하는 설정 형식입니다. 이 필드들을 dns나 프록시 노드 아래에 들여쓰면 안 됩니다. 아래는 기존 설정에 병합할 예시이며, 노드와 정책 그룹까지 포함한 전체 설정 파일이 아닙니다.

geodata-mode: true
geo-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"
  • geodata-mode: true: GEOIP 매칭에 DAT 형식의 GeoIP 데이터를 사용합니다. false로 설정하면 일반적으로 MMDB 경로를 사용합니다. GeoSite 전체를 켜고 끄는 설정은 아닙니다.
  • geo-auto-update: true: 커널의 지리 데이터 정기 업데이트를 활성화합니다.
  • geo-update-interval: 24: 업데이트 간격을 24시간으로 설정합니다. 매일 특정 시각에 업데이트한다는 뜻은 아닙니다.
  • geox-url: 데이터 유형별 다운로드 소스를 지정합니다. 소스를 입력했다고 해서 즉시 다운로드가 완료되는 것은 아닙니다.

실제 사용 모드에 맞춰 데이터 소스를 설정하세요. 위 예시에는 DAT와 MMDB 주소를 함께 표시해 대응 관계를 설명했습니다. DAT 모드라고 해서 매번 세 파일을 모두 사용해야 하는 것은 아닙니다. mmdb는 설정 키이고, 예시 다운로드 주소의 파일명은 소문자 country.mmdb이며 커널에서 흔히 사용하는 로컬 파일명은 Country.mmdb입니다. 수동 교체 시 두 이름을 혼동하지 마세요.

저장한 뒤 설정을 다시 불러오고 로딩 로그를 확인하세요. 클라이언트에 ‘Geo 데이터 업데이트’와 같은 기능이 있다면 이를 사용해 업데이트를 직접 실행할 수 있습니다. 해당 메뉴가 없다고 해서 재시작만으로 기존 데이터베이스가 반드시 덮어써진다고 가정하지 마세요. 자동 업데이트는 커널의 일정에 따라 실행됩니다. 즉시 교체해야 한다면 다음 절의 오프라인 방식을 사용할 수 있습니다.

현재 네트워크에서 다운로드 주소에 접속할 수 있는지 먼저 확인하세요. GitHub 릴리스 첨부 파일은 다른 주소로 리디렉션될 수 있으므로, 명령줄에서 다운로드할 때는 리디렉션을 따라야 합니다. 클라이언트의 시스템 프록시를 켜도 커널 자체의 다운로드가 같은 경로를 이용한다고 보장되지는 않습니다. 시간 초과가 발생하면 로그에 표시된 도메인, 연결 오류, 프록시 선택을 먼저 확인한 뒤 신뢰할 수 있는 데이터 소스로 변경하세요.

geosite.dat 및 geoip.dat 수동 교체

먼저 임시 파일로 다운로드한 다음 커널을 중지하고 파일을 교체하세요. 커널이 실행 중일 때 파일을 쓰는 동시에 읽게 해서는 안 됩니다. 웹페이지에서 ‘다른 이름으로 저장’한 결과의 파일명만 바꿔 데이터베이스로 사용해서도 안 됩니다. 로그인 페이지나 오류 페이지를 다운로드한 경우 확장자가 .dat여도 데이터로 사용할 수 없습니다.

앞 절에서 사용한 별도 디렉터리에서 DAT 모드만 살펴보겠습니다. 첫 단계는 파일 다운로드입니다. -f는 HTTP 오류가 발생하면 명령을 실패 처리하고, -L은 리디렉션을 따라갑니다. 두 명령이 모두 성공한 뒤 다음 단계로 진행하고, 터미널 오류를 무시하지 마세요.

curl -fL --retry 2 \
  "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat" \
  -o "./mihomo-data/geoip.dat.new"

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

이어서 GUI 클라이언트를 종료하거나 해당 커널 서비스를 중지하고, 자동으로 다시 시작되지 않는지 확인하세요. 아래 명령은 기존 데이터 파일 두 개가 모두 있고 백업 파일 이름이 아직 사용되지 않았다고 가정합니다. 처음 설치해 원본 파일이 없다면 해당 백업 명령은 건너뛰세요. 업데이트할 때마다 별도의 백업을 남겨 마지막으로 사용할 수 있는 사본을 덮어쓰지 않도록 하세요.

cp "./mihomo-data/geoip.dat" "./mihomo-data/geoip.dat.before-update"
cp "./mihomo-data/geosite.dat" "./mihomo-data/geosite.dat.before-update"

mv "./mihomo-data/geoip.dat.new" "./mihomo-data/geoip.dat"
mv "./mihomo-data/geosite.dat.new" "./mihomo-data/geosite.dat"

mihomo -t -d "$PWD/mihomo-data" -f "$PWD/mihomo-data/config.yaml"

검사를 통과하면 커널을 시작하고 최초 로딩 및 실제 요청 로그를 확인하세요. 설정 검사로 발견할 수 있는 오류는 일부에 불과하므로 실제 실행 테스트를 대신할 수 없습니다. 카테고리가 없거나 파일을 읽지 못하거나 파싱 오류가 발생하면 커널을 중지하고 백업을 복원한 뒤 데이터 소스와 파일 형식을 확인하세요.

MMDB 모드를 사용하는 경우 형식이 맞는 파일을 다운로드해 실제 디렉터리의 Country.mmdb와 교체하세요. geoip.dat의 이름만 Country.mmdb로 바꾸면 안 됩니다. 두 파일의 내부 형식이 다릅니다. Linux는 파일명의 대소문자를 구분하므로 교체 후 실행 계정에 읽기 권한이 있는지도 확인하세요.

GEOSITE 및 GEOIP 규칙 작성

먼저 클라이언트가 규칙 모드인지 확인한 뒤 규칙 순서를 조정하세요. 규칙 모드는 목록 위에서 아래로 확인하며, 규칙이 일치하면 보통 다음 규칙은 검사하지 않습니다. 전역 모드에서는 이 목록에 따라 요청별 출구를 선택하지 않습니다. TUN 모드는 트래픽을 가로채는 기능이며 규칙 모드를 대신하지 않습니다.

아래 예시는 기존 설정에 ‘프록시 선택’이라는 정책 그룹이 정의되어 있다고 가정합니다. DIRECT는 기본 제공되는 직결 출구이므로 따로 만들 필요가 없습니다. ‘프록시 선택’은 실제 그룹 이름과 정확히 일치해야 합니다. 예시 도메인은 문법 설명용이므로 실제 설정에서는 용도에 맞게 추가하거나 삭제하세요.

mode: rule

rules:
  - DOMAIN-SUFFIX,example.com,프록시 선택
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,프록시 선택

예외 규칙을 먼저, 넓은 범위의 그룹 규칙은 나중에 배치하세요

따로 처리할 도메인을 그룹 규칙보다 먼저 작성하세요. 첫 번째 DOMAIN-SUFFIX는 지정된 도메인과 하위 도메인을 매칭합니다. 두 번째는 GeoSite의 cn 카테고리에 따라 도메인을 처리하고, 세 번째는 중국 본토 IP 주소 범위를 대상으로 합니다. 마지막 MATCH는 나머지 요청을 처리합니다. MATCH를 목록 맨 앞에 두면 뒤에 있는 지리 데이터 규칙이 적용되지 않습니다.

no-resolve 옵션의 장단점 이해하기

no-resolve는 ‘이 IP 규칙을 위해 도메인을 직접 조회하지 않음’으로 이해하면 됩니다. 대상이 처음부터 IP 주소라면 GEOIP 매칭은 계속 적용됩니다. 요청에 도메인만 있고 사용할 수 있는 대상 IP가 없다면, 이 규칙은 매칭을 위해 별도 조회를 하지 않고 MATCH까지 넘어갈 수 있습니다. 따라서 불필요한 DNS 조회를 줄이는 데는 도움이 되지만, 모든 중국 본토 도메인이 GEOIP에 매칭된다고 보장하지는 않습니다.

도메인 그룹을 서버 위치의 증거로 여기지 마세요. 하나의 도메인이 글로벌 콘텐츠 전송 네트워크를 사용할 수 있고, 같은 서비스에 여러 도메인 카테고리가 적용될 수도 있습니다. GeoSite 분류와 GeoIP 지역 판정은 서로 다른 질문에 답합니다. 서비스별 분류가 목적이라면 도메인 규칙을 우선 고려하고, 대상 주소 범위에 따라 처리할 때는 IP 규칙을 사용하세요.

업데이트 후에는 파일 시간뿐 아니라 규칙 매칭 결과도 확인하세요

먼저 클라이언트의 연결 화면에서 새 요청의 규칙과 출구를 확인하세요. 파일 수정 시간이 바뀌었다는 것은 파일에 쓰기가 있었다는 의미일 뿐, 실행 중인 커널이 데이터를 다시 불러왔거나 테스트 요청이 해당 커널을 통과했다는 뜻은 아닙니다. 브라우저가 기존 연결을 재사용한다면 관련 탭이나 연결을 닫고 새 요청을 보내세요.

  1. 현재 수정한 설정이 활성화되어 있는지 확인하고, 실행 설정의 geodata-mode와 규칙 순서를 점검하세요.
  2. 로그에 데이터 로딩 오류가 있는지 확인하세요. 파일 없음, 권한 부족, 카테고리 누락 등의 메시지를 특히 주의 깊게 살펴보세요.
  3. 대상 그룹에 속하는 것으로 알려진 도메인을 하나 선택한 뒤 연결 상세 정보에 GEOSITE, GEOIP 또는 앞쪽에 배치된 도메인 규칙이 표시되는지 확인하세요.
  4. 출구가 예상한 DIRECT 또는 정책 그룹인지 확인한 다음, 정책 그룹에서 현재 선택된 노드도 점검하세요.
  5. 대상 IP만 사용하는 연결을 테스트해 GEOIP를 별도로 확인하세요. 도메인에 한 번 접속한 결과만으로 두 데이터베이스가 모두 정상이라고 판단하지 마세요.

터미널에서 테스트할 때는 로컬 프록시 포트를 명시하세요. 아래 예시는 기존 설정의 mixed-port가 7890이라고 가정합니다. 실제 포트가 다르면 클라이언트에 표시된 값으로 바꾸세요. 이 명령은 요청이 프록시 경로로 들어가는지 확인하는 용도입니다. 성공 응답만으로 어떤 지리 그룹에 매칭됐는지 알 수는 없으므로 연결 화면도 함께 확인하세요.

curl -I --proxy http://127.0.0.1:7890 https://example.com

오류 유형별로 업데이트 문제 해결하기

증상먼저 확인할 항목해결 방법
GEOSITE 규칙을 인식하지 못함실제 커널 및 버전해당 규칙을 지원하는 mihomo인지 확인하세요. 클라이언트 이름만으로 커널을 판단하지 마세요.
특정 카테고리가 없다는 메시지가 표시됨규칙 태그와 데이터 소스의 카테고리데이터 소스에 실제로 포함된 카테고리를 사용하거나 호환되는 데이터베이스로 되돌리세요.
다운로드 시간 초과 또는 리디렉션 실패업데이트 주소와 네트워크 경로먼저 첨부 파일을 다운로드할 수 있는지 확인하고, 필요하면 데이터 디렉터리로 오프라인 전송하세요.
업데이트 후에도 이전 규칙이 계속 적용됨실행 디렉터리, 로딩 상태, 규칙 순서활성 디렉터리의 파일을 교체했는지 확인하고 커널을 다시 불러온 뒤 새 연결을 만드세요.
구독을 새로고침한 뒤 설정이 사라짐변경 사항을 구독 원본에만 입력했는지 여부업데이트 설정과 사용자 규칙을 지속적으로 유지되는 오버라이드 설정으로 옮기세요.

Geo 데이터와 rule-providers 구분하기

먼저 규칙이 GEOSITE를 사용하는지 RULE-SET을 사용하는지 확인하세요. rule-providers는 별도의 규칙 모음을 불러오는 규칙 제공자이며, 자체 다운로드 주소와 형식, 업데이트 간격을 사용합니다. geox-url을 설정해도 모든 규칙 제공자가 함께 업데이트되지는 않습니다. 반대로 특정 규칙 제공자를 업데이트해도 geosite.dat가 교체되는 것은 아닙니다.

문제가 생기면 되돌릴 수 있도록 변경 사항을 최소화하세요

한 번에 한 종류만 변경하세요. 먼저 데이터베이스를 업데이트하고 기존 규칙을 확인한 뒤 새 카테고리를 추가하거나 규칙 순서를 조정하세요. 문제가 발생했을 때 해당 데이터 파일과 설정만 복원하면 클라이언트 재설치, DNS 변경, TUN 활성화를 한꺼번에 하는 것보다 원인을 찾기 쉽습니다. 설정 병합이나 트래픽 가로채기를 더 살펴보려면 사용 안내를 확인하세요. 연결 문제가 발생하면 문제 해결을 참고해 항목별로 점검하세요.

Clash 다운로드클라이언트 플랫폼 선택