GeoIP·GeoSite 데이터베이스 업데이트 및 mihomo 라우팅 규칙 설정
GeoIP·GeoSite 데이터 파일의 역할과 위치, 수동·자동 업데이트 설정, config.yaml의 GEOIP·GEOSITE 규칙 작성법을 안내합니다.
GeoIP와 GeoSite: IP 위치 정보와 도메인 분류 구분하기
GeoIP는 대상 IP의 지역 정보를 기준으로 매칭하고, GeoSite는 도메인 목록을 기준으로 매칭합니다. 둘 다 트래픽을 분기하는 규칙의 데이터 소스이며, 프록시 노드를 제공하거나 구독을 대체하지는 않습니다. 데이터베이스를 업데이트하면 규칙에서 조회할 수 있는 데이터가 바뀔 뿐, 노드가 추가되거나 노드 연결 설정이 자동으로 변경되지는 않습니다.
이 문서의 설정 예시는 mihomo 커널을 사용하는 클라이언트를 대상으로 합니다. Clash Meta는 해당 커널의 이전 명칭입니다. 구형 Clash 커널이나 각 파생 버전, GUI 클라이언트의 구현 방식은 서로 다르므로 클라이언트 이름만으로 모든 필드의 지원 여부를 판단할 수 없습니다. 작업 전 클라이언트의 ‘정보’ 메뉴나 실행 로그 첫 부분에서 실제 커널 이름을 확인하세요.
| 데이터 용도 | 일반적인 파일 | 관련 규칙 또는 설정 |
|---|---|---|
| IP 지역 매칭, MMDB 방식 | Country.mmdb | GEOIP;geodata-mode: false |
| IP 지역 매칭, DAT 방식 | geoip.dat | GEOIP;geodata-mode: true |
| 도메인 목록 매칭 | geosite.dat | GEOSITE |
geodata-mode는 GeoIP 데이터 형식을 제어하며 GeoSite 전체를 켜고 끄는 설정이 아닙니다. MMDB 방식을 사용하더라도 커널이 지원하고 설정에서 GEOSITE를 참조한다면 geosite.dat가 필요할 수 있습니다. “Country.mmdb를 업데이트했으니 도메인 분류 데이터도 최신이다”라고 생각하지 마세요.
데이터 저장 위치: 실행 중인 커널의 데이터 디렉터리 확인
클라이언트 설치 디렉터리, 구독 파일 디렉터리, 커널 데이터 디렉터리는 서로 다른 위치일 수 있습니다. 먼저 클라이언트의 설정, 더보기 메뉴 또는 트레이 메뉴에서 ‘설정 폴더 열기’, ‘데이터 폴더 열기’와 같은 항목을 찾으세요. 메뉴 이름은 클라이언트마다 다릅니다. 해당 폴더에서 기존 Country.mmdb, geoip.dat, geosite.dat 파일을 확인하고, 다운로드 폴더에 바로 저장하지 마세요.
mihomo를 직접 실행한다면 시작 옵션 확인
명령줄에서 실행할 때 -d로 작업 디렉터리를 지정할 수 있습니다. 아래는 데이터 디렉터리를 /var/lib/mihomo로, 설정 파일을 별도로 /etc/mihomo/config.yaml에 두는 Linux 예시입니다. 두 경로가 같은 폴더일 필요는 없습니다.
mihomo -d /var/lib/mihomo -f /etc/mihomo/config.yaml
- 직접 실행하는 경우: 실제로 사용한 명령을 확인하세요. 터미널의 현재 디렉터리만 확인해서는 안 됩니다.
- systemd 서비스:
systemctl cat mihomo로 서비스 정의의ExecStart와 실행 사용자를 확인하세요. 서비스 이름은 시스템에서 실제 사용하는 이름과 일치해야 합니다. - 컨테이너 실행: 컨테이너 내부 데이터 디렉터리가 호스트의 어느 경로에 마운트됐는지 확인하고, 해당 마운트 경로에 파일을 저장하세요.
- GUI 클라이언트: 파일이 현재 활성화된 커널 인스턴스에 속하는지 확인하세요. 이전에 비활성화한 다른 클라이언트의 데이터 디렉터리와 혼동하지 마세요.
파일명의 대소문자도 그대로 유지해야 합니다. Linux에서 Country.mmdb와 country.mmdb는 서로 다른 파일입니다. 일부 커널은 파일명이나 위치를 사용자 지정할 수 있으므로, 실제 적용된 설정과 로그에 기록된 경로를 기준으로 확인하세요.
수동 업데이트: 백업 후 교체하고 다시 불러오기
수동 업데이트는 데이터베이스를 처음 준비하거나 자동 다운로드에 실패했을 때, 또는 이전 데이터로 되돌려야 할 때 적합합니다. 현재 MMDB와 DAT 중 어떤 방식을 사용하는지 확인한 뒤 해당 형식의 파일을 다운로드하세요. 데이터 소스는 mihomo와 호환되는 파일을 제공하고, 포함 범위와 분류 이름을 안내해야 합니다. 관리 프로젝트마다 분류 목록이 완전히 같다고 보장할 수는 없습니다.
- 현재 상태 기록.적용 중인 설정을 저장하고 파일 경로, 수정 시간, 현재 데이터 소스를 기록하세요. 기존 파일은 바로 삭제하지 말고 백업 폴더에 복사해 두세요.
- 커널 중지.클라이언트에서 커널 서비스를 중지하거나 클라이언트를 종료한 뒤 백그라운드 커널도 완전히 종료됐는지 확인하세요. 서비스로 실행 중이라면 해당 서비스를 중지하세요.
- 다운로드 파일 확인.데이터베이스 본 파일인지 확인하세요. 압축 파일, 프로젝트 안내 페이지 또는 다운로드 실패 후 표시된 HTML 페이지가 아니어야 합니다. 압축 파일이라면 먼저 압축을 풀고 내부의 올바른 파일을 사용하세요.
- 기존 경로에 맞춰 교체.MMDB 방식이면
Country.mmdb, DAT 방식이면geoip.dat를 교체하세요. 도메인 분류를 업데이트하려면geosite.dat를 교체하세요. - 읽기 권한 확인.커널 실행 사용자에게 디렉터리 접근 권한과 파일 읽기 권한이 있어야 합니다. 자동 업데이트를 사용하려면 데이터 디렉터리에 쓰기 권한도 필요합니다.
- 재시작 후 확인.커널을 시작하고 데이터베이스 파싱 실패, 분류 없음, 권한 부족 등의 오류가 있는지 확인한 다음 새 연결에서 규칙이 적용되는지 테스트하세요.
디스크의 파일만 바꿨다고 메모리에 로드된 데이터가 즉시 갱신되는 것은 아닙니다. 클라이언트마다 핫 리로드 동작이 다르므로 수동으로 파일을 교체한 뒤에는 커널을 재시작해야 새 파일이 로드됐는지 확실히 확인할 수 있습니다. 교체 후 시작되지 않으면 먼저 커널을 중지하고 백업을 복원한 뒤 형식이 맞는지 확인하세요. 파일 문제를 감추려고 규칙을 연달아 수정하지 마세요.
자동 업데이트: 주기와 다운로드 소스 설정
해당 필드를 지원하는 mihomo 커널에서는 최상위 설정에서 데이터베이스 자동 업데이트를 활성화할 수 있습니다. 아래 예시는 DAT 방식을 선택하고 업데이트 간격을 24시간으로 설정합니다. 구독 새로고침 주기가 아니며, 연결할 때마다 데이터베이스를 다운로드하는 것도 아닙니다.
geodata-mode: true
geodata-loader: memconservative
geo-auto-update: true
geo-update-interval: 24
geodata-loader는 DAT 데이터의 로딩 방식을 지정하며, memconservative는 메모리 절약형 로더입니다. 다운로드 주소를 정하거나 규칙 우선순위를 바꾸는 설정은 아닙니다. MMDB를 계속 사용하려면 geodata-mode를 false로 설정하세요. 자동 업데이트를 켜려고 데이터 형식을 무리하게 바꿀 필요는 없습니다.
geox-url의 키와 파일 형식 맞추기
사용자 지정 소스를 사용하려면 최상위 geox-url 맵에 다운로드 주소를 설정하세요. geoip는 GeoIP DAT, geosite는 GeoSite DAT, mmdb는 MMDB에 해당합니다. 프로젝트 홈페이지나 로그인이 필요한 페이지가 아닌, 데이터 관리자가 제공하는 완전한 HTTPS 파일 주소를 입력해야 합니다.
이 문서에서는 고정된 원격 데이터 주소를 제공하지 않습니다. 분류 규칙의 사용 가능 여부는 선택한 데이터 프로젝트에 따라 달라집니다. 클라이언트에 설정된 신뢰할 수 있는 소스를 그대로 사용한다면 geox-url을 따로 추가할 필요가 없습니다. 클라이언트가 소스를 덮어쓰는 경우에는 구독 원문만 보지 말고 최종 적용된 설정을 확인해야 합니다.
- 구독 관리형 설정:클라이언트의 덮어쓰기, 병합 또는 확장 기능으로 최상위 필드를 추가해 다음 구독 업데이트 때 설정이 덮어써지지 않도록 하세요.
- 독립 설정:실행 시 실제로 사용하는 설정 파일을 직접 수정하세요. 이름이 같은 최상위 키를 두 번 작성하지 마세요.
- 다운로드 실패:먼저 로그에서 요청 주소와 오류 유형을 확인한 뒤 네트워크, 시스템 시간, 디스크 공간, 디렉터리 권한을 점검하세요.
GEOIP·GEOSITE 규칙 작성법: 규칙 순서가 매칭 결과를 결정합니다
규칙 모드는 위에서부터 순서대로 매칭하며, 일반적으로 가장 먼저 일치한 항목이 트래픽의 경로를 결정합니다. 아래 예시는 먼저 특정 도메인을 처리하고, 이어서 GeoSite 분류로 도메인을 처리한 다음 GeoIP로 IP를 판별하고, 마지막에 기본 정책 그룹으로 보냅니다. 예시에서는 현재 구독에 ‘노드 선택’이라는 정책 그룹이 정의되어 있다고 가정합니다. 해당 그룹이 없다면 설정에 실제로 존재하는 이름으로 바꿔야 합니다.
mode: rule
rules:
- DOMAIN-SUFFIX,example.org,DIRECT
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,노드 선택
GEOSITE: 분류 이름은 데이터베이스에서 확인
GEOSITE,cn,DIRECT는 현재 GeoSite 데이터베이스의 cn 목록에 포함된 도메인을 DIRECT로 보낸다는 뜻입니다. 도메인 접미사 .cn을 단순히 확인하는 규칙이 아닙니다. cn이나 다른 분류를 사용할 수 있는지는 데이터 관리자가 제공하는 분류 목록을 확인하세요. 데이터 소스를 바꾼 뒤에는 기존 규칙에서 참조하는 분류가 여전히 존재하는지도 확인해야 합니다.
GEOIP: no-resolve가 모든 DNS 조회를 막지는 않습니다
GEOIP,CN,DIRECT,no-resolve는 대상 IP의 지역 정보로 매칭하되, 이 IP 규칙을 확인하기 위해 아직 해석되지 않은 도메인을 새로 조회하지 않는다는 뜻입니다. 요청에 대상 IP가 이미 포함되어 있다면 매칭에 사용할 수 있습니다. 이 옵션은 DNS를 전역적으로 끄거나 애플리케이션 자체의 조회를 막지 않습니다.
도메인 규칙에 매칭되지 않은 요청도 DNS 조회 결과로 지역을 판별하려면 필요에 따라 no-resolve를 제거할 수 있습니다. 대신 규칙 판단에 추가 DNS 조회가 필요할 수 있습니다. Fake-IP를 사용하는 경우 도메인 복원 여부, 기존 조회 결과, 실제 요청 경로도 동작에 영향을 줍니다. 규칙 문구만 보고 결과를 단정하지 말고 연결 기록을 함께 확인하세요.
MATCH: 기본 규칙은 항상 마지막에 배치
MATCH는 앞선 규칙에 매칭되지 않은 요청을 처리합니다. GEOSITE나 GEOIP보다 앞에 두면 뒤에 있는 규칙은 요청을 처리할 기회가 없습니다. 특정 도메인 예외는 일반적으로 넓은 범위의 분류 규칙보다 앞에 배치해야 합니다. 그렇지 않으면 데이터베이스에 해당 도메인이 있더라도 예상과 다른 경로를 사용할 수 있습니다.
GeoIP의 지역 정보는 서버 소유자나 서비스의 실제 소재지를 증명하지 않습니다. CDN, 여러 지역에 분산된 서버 또는 Anycast를 사용하는 사이트는 도메인 분류와 IP 지역 정보가 일치하지 않을 수 있습니다. 특정 서비스에 항상 지정한 정책을 적용하려면 국가·지역 판별에만 의존하지 말고 명확한 도메인 규칙을 추가하세요.
업데이트 후에도 트래픽이 분기되지 않을 때: 적용 설정·로그·새 연결 확인
확인할 때는 ‘파일 업데이트 성공 여부’와 ‘트래픽의 규칙 매칭 여부’를 따로 살펴보세요. 데이터베이스 로드 성공은 데이터를 읽을 수 있다는 뜻일 뿐입니다. 애플리케이션 트래픽이 해당 커널로 들어오고 규칙 모드로 동작해야 관련 규칙이 적용됩니다.
| 증상 | 우선 확인할 항목 | 확인할 위치 |
|---|---|---|
| 분류가 없다는 메시지 표시 | 데이터베이스에 규칙에서 사용한 분류 이름이 있는지 | 데이터 소스의 분류 목록과 GEOSITE 규칙 |
| 파일이 없다는 메시지 표시 | 작업 디렉터리, 대소문자, 데이터 형식 | 시작 옵션과 커널 데이터 디렉터리 |
| 파싱 실패 메시지 표시 | 웹페이지, 압축 파일 또는 다른 형식을 잘못 다운로드했는지 | 다운로드 결과와 해당 데이터베이스 파일 |
| 파일은 업데이트됐지만 규칙이 매칭되지 않음 | 앞선 규칙, 실행 모드, 대상 도메인 또는 IP | 적용 중인 설정과 연결 상세 정보 |
| 구독을 새로고침할 때마다 설정이 사라짐 | 임시 생성 파일에만 수정 내용을 저장했는지 | 클라이언트의 덮어쓰기 또는 설정 병합 |
- 최종 설정 확인.실행 중인 설정에
rules,geodata-mode, 업데이트 관련 필드가 실제로 있는지 확인하세요. 활성화되지 않은 설정만 수정한 것은 아닌지 점검해야 합니다. - 규칙 모드 확인.전역 모드나 직접 연결 모드에서는 이 규칙 목록과 같은 결과가 나오지 않습니다.
- 새 연결 생성.테스트할 사이트의 기존 연결을 종료한 뒤 다시 접속하세요. 이미 연결된 장시간 연결은 데이터베이스를 업데이트해도 즉시 경로가 바뀌지 않는 경우가 많습니다.
- 연결 상세 정보 확인.대상 도메인, 대상 IP, 매칭된 규칙, 최종 정책 경로를 기록하세요. 전후 변화를 비교하기 쉽도록 한 번에 한 항목씩 조정하세요.
- 트래픽 유입 경로 확인.시스템 프록시는 해당 설정을 따르는 앱의 트래픽에만 영향을 줍니다. TUN이 처리할 수 있는 트래픽도 라우팅 및 제외 설정에 따라 달라집니다. 커널에 들어오지 않은 요청에는 Geo 규칙이 적용되지 않습니다.
문제 해결 중에는 로그 수준을 일시적으로 높이고, 완료한 뒤 평소 수준으로 되돌려 로그 용량을 줄이세요. 로그를 공유할 때는 구독 주소, 토큰, 노드 인증 정보, 민감한 접속 기록을 가리세요. 데이터 소스를 자주 바꾸기보다 복구 가능한 설정과 데이터베이스 백업을 하나 보관하는 편이 문제를 찾기 쉽습니다.