튜토리얼 2026-04-27 · 약 19분

Clash Meta GeoIP가 모두 엇나갔나요? MMDB 경로와 Country 규칙을 항목별로 수정

국내 서비스만 프록시로 나가고 해외 사이트는 이상하게 직접 연결된다면, 흔한 원인은 “규칙 문법이 틀렸다”기보다 GeoIP가 참조하는 오프라인 DB(MMDB·메타데이터)가 비어 있거나, 작업 디렉터리와 다른 경로를 가리키거나, 오래된 국가 매핑을 쓰는 경우입니다. 또한 DOMAIN·원격 규칙 세트가 GEOIP 행보다 위에 있으면 이미 다른 정책으로 소진되어 “Country 규칙이 안 먹는 것처럼” 보이기도 합니다. 이 글은 Clash Meta / Mihomo 계열을 기준으로 MMDB 경로 확인, 자동 갱신, GEOIP·Country 관련 행의 위치와 우선순위를 한 흐름으로 정리합니다. DNS·fake-ip·rule-providers와는 결이 다르지만 같이 읽으면 오판을 줄일 수 있습니다.

증상: 규칙은 있는데 방향이 반대로 느껴질 때

다음과 비슷하면 GeoIP·DB 쪽을 의심할 만합니다. (항상 해당은 아니며, DNS 스푸핑·노드 지역·브라우저 DNS over HTTPS 등도 겹칠 수 있습니다.)

  • 한국·중국 등 “로컬”로 분류하려는 IP가 계속 프록시 그룹으로 붙는다.
  • 반대로 해외 CDN 엣지가 로컬로 잘못 잡혀 DIRECT로 새며 콘텐츠가 깨진다.
  • 구독을 새로 받은 직후부터 갑자기 분류가 이상해졌다—프로필 디렉터리가 바뀌었거나 DB 파일이 비어 있다는 신호일 수 있다.
  • 로그에 GeoIP 조회 관련 경고가 간헐적으로 뜨거나, 예전에는 되던 GEOIP,XX 행이 갑자기 무의미해졌다.

먼저 한 가지

Rule 모드에서 테스트하세요. Global이면 GeoIP 행 자체가 의미가 달라집니다. 또한 목적지가 도메인이면 규칙 엔진은 먼저 이름 기반 행을 보고, IP 기반 국가 판정은 그 다음 단계에서 이루어지는 경우가 많습니다.

GeoIP가 “언제” 쓰이는지

Clash 계열에서 GEOIP 규칙은 최종적으로 연결의 목적지 IP에 대해 MMDB(또는 코어가 사용하는 동등 포맷)를 조회해 ISO 국가 코드를 얻습니다. 따라서 DB 파일이 없으면 조회가 실패하거나 기본값에 가까운 동작으로 떨어져, 사용자가 기대한 “국내=직접·해외=프록시” 패턴이 깨집니다.

또한 DNS가 fake-ip를 쓰는 환경에서는 규칙 매칭 시점의 “보이는 목적지”가 실제 서버와 다를 수 있어, GeoIP만 만지다가 원인을 놓치기 쉽습니다. 이 경우 《DNS·fake-ip 점검》에서 이름 해석 축을 먼저 안정화하는 편이 낫습니다.

MMDB 경로와 작업 디렉터리

GUI 클라이언트(Verge, CFA 등)는 보통 프로필·홈 디렉터리 아래에 geoip.dat, Country.mmdb, geoip.metadb 같은 이름으로 데이터를 둡니다. 코어 버전과 배포 채널에 따라 기본 파일명이 다릅니다. 중요한 것은 “설정에 쓴 상대 경로가 실제 실행 시 어느 폴더를 기준으로 해석되는지”입니다.

다음을 순서대로 확인하세요.

  1. 클라이언트 설정에서 프로필(구성) 저장 경로를 확인한다.
  2. 그 폴더에 GeoIP 관련 파일이 실제로 있는지, 크기가 0이 아닌지 본다.
  3. YAML에 경로를 오버라이드했다면(예: 사용자 지정 .mmdb), 그 경로가 상대 경로일 때 기준 디렉터리가 무엇인지 문서·로그로 확인한다.
  4. Docker·서비스로 돌릴 때는 컨테이너 안 경로와 볼륨 마운트가 호스트에서 기대한 파일을 가리키는지 본다.

파일을 수동으로 넣었다면 권한읽기 전용 마운트 때문에 코어가 갱신에 실패해 오래된 복사만 남는 경우도 있습니다. 배포 스크립트가 매번 빈 파일을 덮어쓰지 않는지도 점검하세요.

geodata-mode·로더·다운로드 URL

Mihomo 계열에서는 geodata-mode(예: mmdb vs 레거시 포맷)와 자동 다운로드 옵션이 설정에 노출되는 경우가 많습니다. 키 이름은 빌드·버전에 따라 조금씩 다르므로, 사용 중인 바이너리의 공식 문서를 한 번 확인하는 것이 안전합니다.

일반적인 패턴은 다음과 같습니다: 자동 갱신을 켠다갱신 주기를 현실적으로 둔다(예: 하루 1회 이상은 트래픽·안정성 절충) → geox-url 또는 동급 항목에서 GeoIP 아티팩트 URL이 차단되지 않는지 확인한다. 회사망·국가 방화벽 뒤에서는 릴리스 미러가 막혀 조용히 실패하는 경우가 많습니다.

# Example only — key names vary by Mihomo / client version
geodata-mode: mmdb
geo-auto-update: true
geo-update-interval: 24
# geox-url:
#   geoip: "https://.../GeoLite2-Country.mmdb"

보안·라이선스

MaxMind GeoLite2는 계정·라이선스 조건이 있습니다. 팀 배포라면 합법적인 다운로드 경로만 사용하고, 내부 미러에 올릴 때 갱신 프로세스를 문서화하세요. “아무 공개 링크나” 복사하는 방식은 끊기기 쉽고 정책 위반 소지도 있습니다.

GEOIP·Country 행 문법과 ISO 코드

규칙 파일에서 흔한 형태는 GEOIP,KR,DIRECT 또는 특정 국가 코드를 프록시 그룹으로 보내는 것입니다. 대소문자·쉼표 위치가 틀리면 해당 행 전체가 무시되거나 의도와 다른 해석을 받을 수 있으니, 에디터에서 복사 붙여넣기 할 때 특히 주의하세요.

일부 구성에서는 GEOIP,CN,no-resolve처럼 no-resolve 플래그를 붙여 DNS 순환을 피합니다. 플래그 조합이 맞지 않으면 “도메인 규칙에서 이미 매칭된 뒤”에는 GeoIP가 아예 실행되지 않을 수 있어, 증상이 “DB 문제”처럼 보이기도 합니다.

점검 항목 의미
국가 코드 ISO 3166-1 alpha-2 기준인지 확인 (KR, JP, US 등).
정책 그룹 이름 PROXY 자리에 실제 존재하는 그룹명이 와야 합니다.
invert 옵션 일부 템플릿은 “이 국가가 아닐 때”를 쓰기도 하므로 주석·예시를 꼭 읽으세요.

규칙 순서: DOMAIN이 먼저면 GeoIP는 뒷전

대부분의 템플릿에서 구체적인 도메인·IP 규칙이 위, 넓은 GEOIP·최종 MATCH가 아래입니다. 순서를 뒤집거나 원격 규칙 프로바이더가 생성한 거대한 목록이 GEOIP,KR,DIRECT보다 위에 병합되면, 한국 IP라도 먼저 “글로벌 프록시” 행에 걸려 나갑니다.

mixin·프로필 병합을 쓰는 경우, 로컬 오버라이드가 최종 규칙 배열에서 어디에 끼는지가 핵심입니다. 구독이 갱신될 때마다 순서가 바뀌는 구조라면, GeoIP 행을 mixin으로 “항상 같은 상대 위치”에 고정하는 방식을 검토하세요.

# Illustrative order — specific domains win first
rules:
  - DOMAIN-SUFFIX,corp.internal,DIRECT
  - GEOSITE,category-ads-all,REJECT
  - GEOIP,KR,DIRECT
  - GEOIP,JP,DIRECT
  - MATCH,PROXY

디버깅 팁

코어 로그에서 어떤 규칙 행이 매칭됐는지를 확인하세요. “KR인데도 프록시”라면 (1) 앞선 DOMAIN/IP 행, (2) 잘못된 목적지 IP 인식, (3) DB 부재·오류 중 하나로 좁혀집니다.

rule-providers와의 관계

원격 규칙 세트는 GeoIP DB와는 별개입니다. 다만 둘 다 오프라인 파일에 의존하므로, “다운로드는 됐는데 경로가 달라서 로드 실패”라는 같은 클래스의 문제가 납니다. rule-providers 쪽 path·interval 문제는 별도 글에서 다룹니다. GeoIP를 고친 뒤에도 증상이 남으면 그쪽도 함께 점검하세요.

실무 체크리스트

  1. Rule 모드인지, Global/직접 모드 혼동은 없는지 확인.
  2. 프로필 디렉터리에 MMDB·geoip 관련 파일 존재·크기·mtime 확인.
  3. geodata-mode·자동 갱신·다운로드 URL이 환경에서 실제로 동작하는지 로그로 확인.
  4. GEOIP 행이 DOMAIN·GEOSITE·IP 규칙보다 의도한 순서에 있는지, mixin 병합 후에도 유지되는지 확인.
  5. fake-ip·DNS 설정이 목적지 인식을 왜곡하지 않는지 DNS 글과 교차 검증.
  6. 문제 호스트 하나를 골라 로그로 “매칭된 규칙 + 목적지”를 스냅샷.

FAQ

DB를 새로 받았는데도 예전과 같다

실행 중인 코어가 다른 경로의 파일을 읽고 있을 수 있습니다. 프로세스 작업 디렉터리와 GUI가 표시하는 경로를 일치시키고, 재시작 후 mtime이 갱신됐는지 확인하세요.

해외 사이트인데 국내 IP로 나온다

CDN이 사용자 가까운 한국/아시아 엣지를 줄 수 있습니다. GeoIP는 “서버 등록 국가”가 아니라 해당 IP의 매핑을 따릅니다. 필요하면 도메인 규칙으로 보완하세요.

Docker만 재시작하면 파일이 사라진다

컨테이너 레이어에만 두면 재기동 시 초기화됩니다. 볼륨에 MMDB를 두거나 이미지 빌드에 포함하되 갱신 스크립트를 명확히 하세요.

규칙이 투명할 때 Clash가 빛납니다

GeoIP는 강력하지만 오프라인 DB·DNS·규칙 순서라는 세 축에 종속됩니다. 세 가지를 동시에 맞추면 “국내외 분류” 문제의 상당 부분은 재현 가능한 엔지니어링 이슈로 줄어듭니다.

Clash를 무료로 내려받고 차이를 경험해 보세요

MMDB·규칙 순서를 같이 맞추기

GeoIP 파일 경로와 GEOIP 행 위치를 확인한 뒤, DNS·rule-providers와 교차 검증하세요.

Clash 다운로드