GeoIP와 GeoSite: IP 주소와 도메인을 각각 매칭
Clash의 트래픽 분류 정확도는 규칙 순서뿐 아니라 규칙이 참조하는 데이터에도 달려 있습니다. GeoIP는 IP 주소 대역을 국가나 지역별로 분류하고, GeoSite는 도메인을 사이트·서비스·지역별로 분류합니다. 두 데이터베이스는 매칭 기준을 제공할 뿐 프록시 노드를 제공하거나, 특정 범주를 직접 연결 또는 프록시로 보낼지 결정하지는 않습니다.
예를 들어 GEOIP,CN,DIRECT는 대상 IP가 데이터베이스의 CN 범주에 해당하면 직접 연결하고, GEOSITE,cn,DIRECT는 도메인이 cn 범주에 해당하면 직접 연결합니다. 해외 CDN을 사용하거나 여러 지역에 서비스를 배포한 웹사이트, IP 주소를 공유하는 서비스는 두 규칙의 판정 결과가 다를 수 있습니다. 데이터베이스가 반드시 손상된 것은 아니며, 분류 대상이 서로 다르기 때문입니다.
| 항목 | GeoIP | GeoSite |
|---|---|---|
| 주요 입력값 | 대상 IPv4 또는 IPv6 주소 | 연결에 연결된 도메인 |
| 일반적인 파일 | geoip.dat、Country.mmdb | geosite.dat |
| 규칙 예시 | GEOIP,CN,DIRECT | GEOSITE,cn,DIRECT |
| 흔히 발생하는 차이 | IP 주소의 위치와 서비스 용도는 다를 수 있음 | 새 도메인이 아직 등록되지 않았거나 분류가 다름 |
데이터 출처가 통일된 기준을 뜻하지는 않음
GeoSite는 주로 v2fly/domain-list-community 및 파생 빌드에서 제공되며, GeoIP는 여러 IP 주소 데이터 프로젝트의 변환 결과일 수 있습니다. MetaCubeX/meta-rules-dat은 mihomo에서 사용하기 적합한 빌드 파일을 제공합니다. 파일명이 같더라도 출처에 따라 범주, 수록 범위, 업데이트 주기가 다를 수 있습니다. geolocation-!cn 같은 태그를 사용하기 전에 현재 데이터 소스에 해당 범주가 실제로 포함되어 있는지 확인하세요. 다른 규칙 데이터베이스의 태그를 그대로 가져와서는 안 됩니다.
설정 전 확인 사항: mihomo 커널 사용 여부
아래의 geodata-mode, geox-url 및 자동 업데이트 설정은 mihomo를 기준으로 합니다. Clash는 클라이언트 생태계에서 널리 쓰이는 명칭이지만, 인터페이스가 비슷하다고 커널 기능까지 완전히 같은 것은 아닙니다. 구형 Clash 커널은 해당 필드를 지원하지 않을 수 있으며, 클라이언트 버전만으로 커널 버전을 알 수는 없습니다.
- 클라이언트의 정보, 커널 정보 또는 시작 로그에서 실제 커널 이름과 전체 버전을 확인하고, mihomo로 표시되는지 확인하세요.
- 현재 활성화된 구독 설정이 무엇인지, 덮어쓰기·병합·스크립트 처리가 설정되어 있는지 확인하세요.
- 현재 적용 중인 설정을 백업하세요. 구독을 업데이트해도 변경 사항이 덮어써지지 않도록 클라이언트가 제공하는 영구 덮어쓰기 기능에 전역 필드를 추가하는 것이 좋습니다.
- 작동 모드를 규칙 모드로 설정하세요. 전역 모드와 직접 연결 모드에서는 아래의 분류 규칙에 따라 연결 경로를 선택하지 않습니다.
geox-url 및 자동 업데이트 설정: 바로 적용할 수 있는 구성
아래 설정은 YAML 최상위에 두고 rules, dns와 같은 들여쓰기 수준에 맞추세요. 특정 정책 그룹 안에 넣으면 안 됩니다. 예시에서는 DAT 형식 GeoIP를 활성화하고 MetaCubeX 릴리스 파일을 사용합니다. 데이터베이스 설정만 포함하며, 노드가 들어 있는 완전한 구독 설정은 아닙니다.
geodata-mode: true
geodata-loader: memconservative
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 데이터 모드를 사용합니다.false로 설정하면 MMDB 모드를 사용합니다. 이 옵션은 GEOSITE 전체를 켜고 끄는 설정이 아닙니다.geodata-loader: memconservative: 메모리 사용량을 줄이는 geodata 로더를 선택합니다. 업데이트 주기를 설정하거나 다운로드 파일 형식을 변환하는 기능은 없습니다.geo-auto-update: true: 커널의 GEO 데이터 자동 업데이트 기능을 활성화합니다. 실제로 실행되는 커널이 해당 필드를 지원해야 합니다.geo-update-interval: 24: 업데이트 주기는 24시간입니다. 24분이 아니며 매일 자정에 업데이트된다는 의미도 아닙니다.geox-url: 파일 종류별 다운로드 주소를 지정합니다. 확장자만 바꿔서는 MMDB와 DAT 형식을 서로 변환할 수 없습니다.
예시에는 나중에 모드를 전환할 때를 고려해 mmdb 주소도 남겨 두었습니다. 그렇다고 실행할 때마다 모든 파일을 함께 사용하는 것은 아닙니다. 다운로드하고 불러올 리소스는 실제 적용된 설정, 규칙 참조 및 커널 구현에 따라 달라집니다. 캐시가 이미 있는 경우 URL만 변경한 것을 업데이트 완료의 근거로 삼지 마세요. 업데이트를 실행한 뒤 로그를 확인해야 합니다.
다운로드 주소는 실제 파일을 가리켜야 합니다
사용자 지정 주소는 저장소 홈, 로그인 페이지, 다운로드 안내 페이지가 아니라 해당 형식의 바이너리 파일을 반환해야 합니다. GitHub 릴리스 링크는 리디렉션될 수 있으므로 네트워크 정책에서 처음 접속하는 주소뿐 아니라 최종 파일이 있는 호스트에도 접근할 수 있어야 합니다. 시간 초과가 발생하면 로그에 표시된 대상 주소와 오류를 먼저 확인한 뒤 신뢰할 수 있는 데이터 소스로 바꾸세요.
데이터베이스 다운로드에도 시작 단계의 의존성이 있습니다. 커널이 트래픽 분류에 필요한 데이터를 아직 가져오지 못했다면 해당 데이터를 참조하는 규칙이 정상적으로 로드되지 않을 수 있습니다. 처음 설정할 때는 다운로드 주소에 접근할 수 있는지 먼저 확인하세요. 필요하면 클라이언트의 수동 업데이트 기능을 사용하거나 데이터베이스 파일을 오프라인으로 넣은 뒤 GEO 규칙이 포함된 설정을 불러오세요. 다운로드 요청이 현재 선택한 프록시 노드를 반드시 거친다고 가정하지 마세요.
GEOIP·GEOSITE 규칙: 범주와 정책 그룹이 모두 있어야 합니다
규칙은 위에서 아래로 확인하며, 처음 일치하는 항목이 적용됩니다. 아래 예시는 로컬 네트워크 주소를 먼저 처리하고, 국내 도메인과 분류된 해외 도메인을 처리한 뒤 국내 IP를 확인하고 마지막에 나머지 연결을 처리합니다. 기존 설정에 프록시 경로라는 정책 그룹이 이미 있다고 가정합니다. 사용하기 전에 설정에 있는 실제 그룹 이름으로 바꾸세요.
rules:
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- 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
- IP-CIDR6,::1/128,DIRECT,no-resolve
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
- IP-CIDR6,fe80::/10,DIRECT,no-resolve
- GEOSITE,cn,DIRECT
- GEOSITE,geolocation-!cn,프록시 경로
- GEOIP,CN,DIRECT,no-resolve
- MATCH,프록시 경로
DIRECT는 기본 제공 직접 연결 정책이고, 프록시 경로는 사용자가 지정한 이름이므로 정책 그룹과 철자까지 정확히 일치해야 합니다. 기존 그룹 이름이 PROXY라면 두 곳의 '프록시 경로'를 바꾸세요. 최상위 rules 필드를 새로 추가하지 말고 기존 규칙 목록에 병합하거나 교체하세요. 구독 설정에 필요한 세부 예외 규칙도 유지해야 합니다.
해외 도메인 규칙을 GEOIP보다 앞에 두는 이유
해외 서비스 도메인이 분류되어 있지만 조회 결과가 국내 CDN 주소라고 가정해 보겠습니다. GEOIP,CN,DIRECT가 먼저 일치하면 연결이 직접 연결될 수 있습니다. 도메인 규칙을 IP 위치 판정보다 앞에 두면 서비스 수준의 의도를 우선 적용할 수 있습니다. 다만 geolocation-!cn은 데이터베이스에 있는 범주 이름일 뿐 해외 웹사이트 전체를 빠짐없이 포함하지는 않습니다. 등록되지 않은 연결은 뒤에 오는 규칙에서 처리해야 합니다.
no-resolve는 DNS를 사용하지 않는다는 뜻이 아닙니다
no-resolve는 해당 IP 유형 규칙을 적용하기 위해 도메인을 새로 조회하지 말라는 뜻입니다. 연결에 실제 대상 IP가 이미 있으면 GEOIP가 해당 IP를 확인할 수 있습니다. 도메인만 있고 사용할 수 있는 실제 IP가 없다면 이 규칙은 건너뛰고 다음 규칙으로 넘어갈 수 있습니다. DNS 유출 방지 옵션도 GeoIP 자동 업데이트 옵션도 아닙니다. 분류되지 않은 도메인을 여기서 조회하려면 이 매개변수를 제거할 수 있지만, DNS 조회 지연과 DNS 경로를 고려해야 합니다.
업데이트 절차: 설정 적용, 파일 업데이트, 규칙 매칭 확인
데이터베이스 업데이트와 구독 업데이트는 별개입니다. 구독 업데이트는 보통 노드와 설정을 가져오고, GEO 데이터 업데이트는 분류 파일을 교체합니다. 클라이언트에 구독 업데이트 성공이라고 표시되어도 geosite.dat가 업데이트되었다고 볼 수는 없습니다.
- 적용된 설정을 확인하세요. 최종적으로 불러온 YAML에서 자동 업데이트 필드와 URL이 구독 또는 덮어쓰기 기능에 의해 변경되지 않았는지 확인합니다.
- 설정을 다시 불러오세요. 로그에서 알 수 없는 필드, YAML 들여쓰기 오류, 존재하지 않는 범주 또는 찾을 수 없는 정책 그룹이 있는지 확인합니다.
- GEO 데이터를 한 번 업데이트하세요. 클라이언트에서 GEO 데이터 업데이트로 명시된 메뉴를 사용하세요. 해당 메뉴가 없다면 클라이언트 문서의 안내를 따르세요. 구독 업데이트 버튼으로 대신할 수는 없습니다.
- 결과를 확인하세요. 다운로드 성공 또는 실패 로그와 실제 데이터 디렉터리의 파일 수정 시각을 기록하세요. 수정 시각은 파일이 변경되었다는 것만 보여 주므로, 데이터가 제대로 로드되었는지도 확인해야 합니다.
- 새 연결을 생성하세요. 국내 도메인, 분류된 해외 도메인, 로컬 네트워크 주소에 다시 접속한 뒤 연결 세부 정보에서 규칙 유형, 매칭 내용, 최종 정책을 각각 확인합니다.
테스트에는 새 연결을 사용하세요. 브라우저의 연결 재사용, 앱의 장시간 연결, 기존 세션은 이전 정책을 계속 사용할 수 있으므로 페이지를 새로고침하는 것만으로 연결이 다시 생성된다고 볼 수 없습니다. 문제를 확인할 때는 대상 앱을 종료한 뒤 다시 열거나 해당 연결만 끊으세요. 모든 작업을 한꺼번에 중단하지 않아도 됩니다.
자주 발생하는 문제: 다운로드 실패, 범주 누락, 업데이트 후 잘못된 분류
| 증상 | 먼저 확인할 항목 | 해결 방법 |
|---|---|---|
| 다운로드 시간 초과 또는 연결 실패 | 도메인 조회, 외부 연결 경로, 릴리스 파일 리디렉션 | 먼저 파일 주소에 접근할 수 있도록 조치한 뒤 업데이트를 다시 시도합니다 |
| 데이터베이스 구문 분석 실패 | 다운로드한 내용이 웹페이지인지, 파일 형식이 설정과 일치하는지 | 올바른 DAT 또는 MMDB 파일을 받습니다 |
| 범주가 없다는 오류 | 현재 데이터 소스에 규칙에서 참조하는 범주가 포함되어 있는지 | 범주를 변경하거나 해당 범주가 포함된 데이터 빌드를 사용합니다 |
| 규칙에서 지정한 정책을 찾을 수 없음 | 정책 그룹 이름과 대소문자 | 규칙 대상에 실제 정책 그룹 이름을 정확히 입력합니다 |
| 업데이트는 성공했지만 연결 경로가 달라지지 않음 | 작동 모드, 앞에 있는 규칙, 기존 연결 | 규칙 모드로 전환한 뒤 새 연결에서 처음 일치하는 규칙을 확인합니다 |
오프라인으로 교체하기 전에 데이터 디렉터리를 확인하세요
클라이언트마다 데이터 디렉터리가 다르며, 서비스 모드와 일반 사용자 모드가 서로 다른 위치를 사용할 수도 있습니다. 클라이언트가 제공하는 디렉터리 메뉴나 커널 시작 매개변수로 위치를 확인하고 파일이 설치 디렉터리에 있다고 단정하지 마세요. 파일을 직접 교체하려면 해당 디렉터리를 사용하는 커널을 먼저 중지하고 기존 파일을 백업하세요. 예상 파일명에 맞는 올바른 형식의 데이터베이스를 넣은 다음 커널을 시작하고 로드 로그를 확인합니다.
도메인 하나만 잘못 분류되었다면 데이터베이스 전체를 바로 교체할 필요는 없습니다. 관련 GEO 규칙 앞에 범위가 명확한 DOMAIN 또는 DOMAIN-SUFFIX 규칙을 추가해 예상한 정책이 적용되는지 확인하고 데이터 소스에 분류 문제를 알려 주세요. 예외 규칙이 구체적일수록 데이터베이스가 수정된 뒤 정리하기도 쉽습니다.
점검 범위: 규칙 집합, DNS, TUN을 각각 확인
- rule-providers는 별도로 업데이트됩니다. 원격 규칙 집합의
interval은 보통 초 단위이며, 예를 들어86400은 하루입니다. 반면 이 문서의geo-update-interval: 24는 시간 단위입니다. 두 설정을 혼동하지 마세요. - DNS는 사용할 수 있는 조회 정보를 결정합니다. GeoSite가 작동하려면 연결에 도메인이 연결되어 있어야 합니다. fake-ip 환경에서는 연결 정보와 도메인의 매핑을 통해 도메인 정보를 유지할 수 있지만, IP만 있는 모든 연결을 자동으로 도메인 연결로 바꿔 주지는 않습니다.
- TUN은 트래픽을 처리하는 범위를 결정합니다. TUN을 활성화하면 더 많은 시스템 트래픽을 처리할 수 있지만, 데이터베이스 분류를 자동으로 수정하거나 규칙 우선순위를 바꾸지는 않습니다.
- GEO 데이터는 노드를 제공하지 않습니다. 데이터베이스를 성공적으로 다운로드해도 프록시 사용 가능 여부는 구독, 노드 상태, 정책 그룹 선택에 달려 있습니다.
안정적으로 관리하려면 먼저 커널과 적용된 설정을 확인하고, 다음으로 데이터베이스 출처와 업데이트 결과를 점검한 뒤, 새 연결에서 매칭 과정을 확인하세요. 도메인 예외를 명확하게 유지하고 필요에 따라 IP 최종 규칙을 설정하세요. 구독 업데이트와 로컬 덮어쓰기가 각자 맡을 범위를 분명히 하면 다음 업데이트 후에도 이전 동작으로 되돌아가는 일을 막을 수 있습니다. 필드 의미는 mihomo 일반 설정 문서에서, 범주와 파일 범위는 MetaCubeX 데이터 저장소에서 확인할 수 있습니다.