1. GeoIP와 GeoSite의 역할
Clash의 분流 규칙 자체에는 지리 정보나 사이트 데이터가 내장되어 있지 않습니다. 규칙에 쓰인 GEOIP, GEOSITE는 단순한 조회 명령이며, 「이 IP가 어디 소속인지」, 「이 도메인이 어느 카테고리인지」를 실제로 판별하는 것은 커널 작업 디렉터리에 있는 데이터베이스 파일입니다. 커널이 구동될 때 이 파일들을 메모리에 로드하고, 규칙이 매칭될 때 조회가 이루어집니다. 파일이 없거나 오랫동안 업데이트되지 않으면 분流 결과가 어긋나 직결해야 할 트래픽이 프록시로 가거나, 프록시로 보내야 할 트래픽이 직결로 빠지는 문제가 생깁니다.
GeoIP: IP 소속 지역 판별
GeoIP 데이터는 「IP 대역 → 지역 코드」 형태의 매핑입니다. 규칙 GEOIP,CN,DIRECT가 매칭되면 대상 IP가 중국 본토 대역에 속한다는 뜻이며 연결이 곧바로 직결됩니다. 대상이 도메인인 경우 커널은 먼저 DNS 조회를 수행한 뒤 데이터베이스를 조회하는데, 규칙 끝에 no-resolve를 붙이면 이 조회를 건너뛰고 대상이 이미 IP인 요청에만 적용되어, 규칙 하나 때문에 모든 도메인을 조회하는 상황을 피할 수 있습니다. mihomo는 기본적으로 mmdb 형식의 geoip.metadb를 사용하며, geodata-mode를 true로 설정하면 v2ray 형식의 geoip.dat를 사용합니다. 두 형식은 규칙 소스에 맞춰 하나만 선택해야 하며 혼용해서는 안 됩니다.
GeoSite: 도메인 카테고리 판별
GeoSite 데이터는 「도메인 → 카테고리 태그」 형태의 매핑으로, 커뮤니티가 관리하는 domain-list-community 프로젝트에서 나온 것이며 컴파일 결과물이 geosite.dat입니다. 자주 쓰는 카테고리로는 cn(중국 본토 사이트), geolocation-!cn(주요 해외 사이트), google, github, telegram, private(내부망 및 로컬 도메인) 등이 있습니다. 하나의 카테고리가 수만 개 도메인을 포괄하며 커뮤니티 제출로 계속 보강되기 때문에 DOMAIN-SUFFIX 규칙을 일일이 작성하는 것보다 훨씬 편리하고 누락도 적습니다.
참고
GEOSITE 규칙은 도메인만 매칭하며 DNS 조회를 발생시키지 않고, GEOIP 규칙은 IP만 인식합니다. 두 규칙은 서로 보완적이며 실제 설정에서는 보통 함께 사용합니다: 도메인은 먼저 GeoSite로 조회하고, 매칭되지 않은 부분은 GeoIP로 지역 기준의 최종 판단을 합니다.
2. 데이터베이스 파일과 다운로드 소스
mihomo의 GEO 데이터 파일은 커널 작업 디렉터리, 보통 config.yaml과 같은 디렉터리에 위치합니다. 주요 파일은 다음과 같습니다:
| 파일 | 형식 | 용도 |
|---|---|---|
| geoip.metadb | mmdb | 기본 IP 소속 데이터베이스, geodata-mode 미사용 시 사용 |
| geoip.dat | v2ray geodata | geodata-mode 활성화 시 사용되는 IP 소속 데이터베이스 |
| geosite.dat | v2ray geodata | GEOSITE 규칙용 도메인 카테고리 데이터베이스 |
| country.mmdb | mmdb | 선택 사항, MaxMind 형식의 국가/지역 데이터베이스로 metadb 대체 가능 |
| GeoLite2-ASN.mmdb | mmdb | 선택 사항, IP-ASN 규칙으로 자율 시스템 기준 분流 시 사용 |
기본 다운로드 소스는 MetaCubeX/meta-rules-dat 저장소의 Release로, 매일 빌드됩니다. 주소를 변경하려면 설정에서 geox-url로 지정합니다:
# config.yaml 예시
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/geoip.metadb"
GitHub 접속이 불안정한 환경에서는 접근 가능한 미러 주소로 바꾸면 됩니다. 필드를 비워두면 기본 주소로 되돌아갑니다. 메모리가 부족한 환경에서는 geodata-loader: memconservative를 추가로 설정해 데이터베이스가 상주 메모리를 차지하는 비중을 줄일 수 있습니다.
3. 업데이트 방법: 수동과 자동
자동 업데이트
geo-auto-update: true
geo-update-interval: 24
geo-auto-update를 활성화하면 커널이 geo-update-interval에 지정된 간격(단위: 시간)마다 자동으로 최신 데이터베이스를 확인하고 다운로드하며, 다운로드가 끝나면 재시작 없이 즉시 반영됩니다. 간격은 24시간이면 충분합니다. 커뮤니티 저장소가 매일 빌드되므로 하루 한 번 업데이트로도 충분히 최신 상태를 유지할 수 있고, 간격을 더 짧게 잡아도 같은 파일을 반복 다운로드할 뿐 실질적인 이득은 없습니다.
수동 업데이트
- 릴리스 페이지에서
geoip.metadb(geodata 모드에서는geoip.dat)와geosite.dat를 다운로드하고, 파일명은 그대로 유지합니다. - 커널 작업 디렉터리에 넣습니다. 데스크톱 클라이언트는 보통 각자의 설정 디렉터리 내 커널 작업 디렉터리에, 명령줄 배포는 기본적으로
~/.config/mihomo/이며config.yaml과 같은 디렉터리입니다. - 커널을 재시작해 새 데이터베이스를 반영합니다. 패널에서 Geo 데이터베이스 업데이트 버튼을 클릭하거나 외부 컨트롤러 API의
PUT /configs/geo를 호출해 커널이 즉시 다시 다운로드하고 로드하게 할 수도 있습니다.
주의
업데이트 실패의 가장 흔한 원인은 다운로드 소스에 접근할 수 없는 경우입니다. 먼저 현재 네트워크에서 geox-url에 지정된 주소에 직접 접속되는지 확인하고, 안 되면 미러로 바꾸거나 수동 업데이트로 전환하세요. 업데이트 후에는 로그를 확인해 geosite와 geoip의 로드 항목 수가 정상인지 확인해야 합니다. 항목 수가 0이거나 오류가 발생하면 파일이 손상되었거나 파일 형식이 geodata-mode 설정과 맞지 않는다는 뜻입니다.
4. rules에서 GEO 데이터 참조하기
규칙 형식은 GEOSITE,카테고리,정책과 GEOIP,지역코드,정책으로 고정되며, 후자는 네 번째 매개변수로 no-resolve를 선택적으로 붙일 수 있습니다. 지역 코드는 CN, US, JP처럼 두 글자 알파벳을 사용합니다. 자주 쓰는 예시는 다음과 같습니다:
| 규칙 예시 | 설명 |
|---|---|
| GEOSITE,private,DIRECT | 내부망 및 로컬 도메인 직결 |
| GEOSITE,cn,DIRECT | 중국 본토 사이트 직결 |
| GEOSITE,geolocation-!cn,PROXY | 주요 해외 사이트는 프록시 경유 |
| GEOSITE,github,PROXY | GitHub 관련 도메인은 프록시 경유 |
| GEOIP,CN,DIRECT,no-resolve | 대상이 이미 IP이고 중국 본토 소속이면 직결 |
| GEOIP,CN,DIRECT | 도메인을 먼저 조회한 뒤 중국 본토 소속이면 직결 |
매칭 순서는 위에서 아래로 진행되며 매칭되면 즉시 종료됩니다. 도메인 계열 규칙(GEOSITE, DOMAIN 계열)은 앞쪽에, GEOIP는 뒤쪽에 배치해야 합니다. GEOIP가 앞쪽에 있으면 다수의 도메인 요청이 먼저 DNS 조회를 거치게 되어 첫 응답이 느려지고, 피할 수 있었던 조회 요청도 늘어납니다. 흔히 쓰는 「중국 본토 직결, 해외 프록시」 마무리 방식은 다음과 같습니다:
rules:
- GEOSITE,private,DIRECT
- GEOSITE,cn,DIRECT
- GEOSITE,geolocation-!cn,PROXY
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,CN,DIRECT,no-resolve
- MATCH,PROXY
마지막 두 줄의 의미는 대상이 이미 IP이고 중국 본토 소속이면 직결, 나머지는 모두 프록시를 경유한다는 것입니다. 「도메인을 조회한 뒤 중국 본토 소속이면 직결」로 처리하려면 GEOIP 규칙의 no-resolve를 제거하면 되지만, 앞의 규칙에 매칭되지 않은 모든 도메인이 한 번씩 조회된다는 대가가 따릅니다.
데이터량이 많은 카테고리는 규칙 세트로 바꿔 쓸 수도 있습니다. meta-rules-dat는 mrs 형식의 규칙 세트 파일도 함께 배포하며, rule-providers로 필요한 만큼 불러와 로딩 속도를 높이고 리소스 사용량을 줄일 수 있습니다:
rule-providers:
geosite-cn:
type: http
behavior: domain
format: mrs
interval: 86400
path: ./ruleset/geosite-cn.mrs
url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/cn.mrs"
rules:
- RULE-SET,geosite-cn,DIRECT
5. 자주 묻는 질문
GeoIP와 GeoSite는 둘 다 켜야 하나요?
꼭 그렇지는 않습니다. 규칙에 GEOIP만 사용한다면 geosite.dat는 필요 없고, GEOSITE 규칙을 사용할 때만 geosite.dat가 반드시 있어야 합니다. 대부분의 분流 방식은 두 가지를 함께 사용합니다: 도메인 요청은 먼저 GeoSite로 조회하고, 매칭되지 않은 부분은 GeoIP로 지역 기준의 최종 판단을 합니다.
자동 업데이트 간격은 얼마가 적당한가요?
24시간이 적당합니다. 커뮤니티 데이터베이스가 매일 빌드되어 배포되므로 하루 한 번 업데이트로도 충분히 최신 상태를 유지할 수 있으며, 간격을 더 짧게 잡아도 같은 파일을 반복 다운로드할 뿐 실질적인 이득은 없습니다.
업데이트했는데 분流 결과가 그대로예요.
순서대로 확인해 보세요. 먼저 커널을 재시작하거나 설정을 다시 불러오고, 파일이 브라우저 다운로드 폴더가 아니라 커널이 실제로 읽는 작업 디렉터리에 있는지 확인합니다. 마지막으로 구동 로그에서 geosite와 geoip의 로드 항목 수를 확인하세요. 항목 수가 0이거나 오류가 나면 파일이 손상되었거나 파일 형식이 geodata-mode 설정과 맞지 않는다는 뜻입니다.
구독 설정에 geo 관련 항목이 없는데 추가해야 하나요?
추가하지 않아도 사용 가능하며, 커널이 기본 주소로 필요한 데이터베이스를 자동으로 다운로드합니다. 고정 미러 주소를 쓰거나 업데이트 간격을 조정하고 싶을 때만 오버라이드나 전역 설정에 geox-url, geo-auto-update를 추가하면 됩니다.
geodata-mode는 켜야 하나요?
규칙 소스에 따라 다릅니다. GEOIP, GEOSITE의 일반적인 작성법만 쓴다면 기본 mmdb 모드로 충분하고, 참조하는 규칙 세트나 튜토리얼에서 geoip.dat를 명시적으로 요구할 때만 켜면 됩니다. 켠 뒤에는 geoip.dat가 반드시 존재해야 하며, 없으면 GEOIP 규칙을 로드할 수 없어 커널 구동 시 바로 오류가 발생합니다.
6. 정리
GeoIP는 IP를, GeoSite는 도메인을 담당합니다. 파일을 올바른 디렉터리에 두고, 다운로드 주소에 접근 가능하며, 규칙 순서를 제대로 배치하면 분流가 안정적으로 동작합니다. 하루 한 번 자동 업데이트를 유지하고, 규칙 작성법은 커뮤니티 데이터베이스의 변화에 맞춰 조금씩 조정하면 됩니다. 클라이언트와 커널은 플랫폼별로 다운로드 센터에 정리되어 있고, 기본 설정 절차는 사용 가이드에서 확인할 수 있습니다.