Clash 규칙 분流 실전 가이드: 중국 본토 직결·해외 프록시 완전 정리

중국 본토 직결·해외 프록시 분流를 예로 DOMAIN-SUFFIX, GEOIP, RULE-SET 조합법과 규칙 매칭 순서, MATCH 기본값 및 누락 매칭 문제를 설명합니다.

B-01분流의 기본 원리: 규칙, 정책 그룹, 매칭 순서

Clash의 분流는 본질적으로 "위에서 아래로 하나씩 대조하는" 목록입니다. 설정 파일의 rules 필드는 배열이며, 각 줄이 독립된 규칙으로 규칙 유형,매칭 대상,정책명 세 부분으로 통일된 형식을 갖습니다. 네트워크 요청이 Clash 코어에 들어오면 코어는 배열의 첫 줄부터 마지막 줄까지 순서대로 대조하다가 하나라도 매칭되면 즉시 그 줄에 지정된 정책(직결, 프록시, 차단)으로 처리하고 이후 규칙은 더 이상 비교하지 않습니다. 이 "매칭되면 즉시 종료" 방식이 분流 설정을 이해하는 핵심이며, 뒤에서 다룰 누락 매칭 문제를 해결하는 데도 핵심 열쇠가 됩니다.

정책 부분에는 구체적인 노드가 아니라 정책 그룹 이름을 적습니다. 예를 들어 DIRECT(직결, 코어 내장), REJECT(차단, 코어 내장), 또는 proxy-groups에서 직접 만든 그룹명(예: 해외 프록시)입니다. 실제로 어느 노드를 쓸지는 정책 그룹 내부에서 결정하며, 규칙 단계는 "어느 길로 갈지"만 정하고 "그 길에 어떤 차가 다니는지"는 신경 쓰지 않습니다. 이렇게 계층을 나누면 노드를 바꾸거나 지연 정책을 조정할 때 정책 그룹만 손대면 되고 규칙 자체는 건드릴 필요가 없습니다.

B-02중국 본토 직결, 해외 프록시의 표준 작성법

중국 본토 직결·해외 프록시는 가장 흔한 분流 시나리오입니다. 핵심은 명확히 중국 본토에 속하는 도메인과 IP 대역을 골라 직결로 보내고, 명확히 해외이거나 프록시가 필요한 도메인을 골라 프록시로 보낸 다음, 나머지 모든 트래픽은 마지막 기본 규칙 하나로 특정 정책(보통은 프록시 그룹)에 몰아 누락을 막는 것입니다.

실무에서는 주로 세 가지 규칙 유형을 사용합니다.

  • DOMAIN-SUFFIX: 도메인 접미사로 매칭하며, 이미 알고 있는 사이트에 적합합니다. 예를 들어 DOMAIN-SUFFIX,google.com,해외 프록시google.com과 그 모든 하위 도메인에 매칭됩니다.
  • GEOIP: 목적지 IP의 지리적 위치로 매칭하며, 도메인 규칙이 뚜렷하지 않지만 서버 소속 지역이 명확한 트래픽에 적합합니다. 예를 들어 GEOIP,CN,DIRECT는 목적지 IP가 중국 본토에 속하면 직결한다는 의미입니다.
  • RULE-SET: 미리 정리된 규칙 세트 파일(로컬 또는 원격)을 불러옵니다. 수천 개의 도메인/IP 규칙을 하나의 참조로 묶어, 규칙 파일이 길고 지저분해지는 것을 막습니다.

가장 기본적인 중국 본토 직결·해외 프록시 규칙 예시는 다음과 같습니다.

rules:
  - DOMAIN-SUFFIX,cn,DIRECT
  - DOMAIN-SUFFIX,baidu.com,DIRECT
  - DOMAIN-SUFFIX,qq.com,DIRECT
  - DOMAIN-SUFFIX,google.com,해외 프록시
  - DOMAIN-SUFFIX,youtube.com,해외 프록시
  - DOMAIN-SUFFIX,github.com,해외 프록시
  - GEOIP,CN,DIRECT
  - MATCH,해외 프록시

이 규칙의 흐름은 이렇습니다. 먼저 명확히 직결하거나 명확히 프록시해야 할 도메인 몇 개를 정확히 처리하고, GEOIP,CN,DIRECT로 목적지 서버가 중국 본토에 있는 트래픽을 모두 걸러낸 다음, 마지막으로 MATCH,해외 프록시로 앞의 어떤 규칙에도 매칭되지 않은 트래픽을 전부 프록시 그룹에 넘깁니다. 실제로는 앞서 직접 쓴 DOMAIN-SUFFIX 항목들을 RULE-SET로 참조하는 규칙 세트로 바꾸는 경우가 많은데, 수십 개의 도메인을 직접 관리하는 것보다 지속적으로 업데이트되는 규칙 세트를 참조하는 편이 훨씬 편하기 때문입니다.

B-03RULE-SET로 규칙 세트를 참조하는 방법

RULE-SET는 두 단계로 이루어집니다. 먼저 rule-providers 필드에 규칙 세트의 이름, 출처, 갱신 주기를 선언하고, 이어서 rules에서 RULE-SET,규칙 세트 이름,정책명 형태로 참조합니다. 예시는 다음과 같습니다.

rule-providers:
  cn-domain:
    type: http
    behavior: domain
    url: "https://example.com/rules/cn-domain.yaml"
    path: ./rules/cn-domain.yaml
    interval: 86400
  proxy-domain:
    type: http
    behavior: domain
    url: "https://example.com/rules/proxy-domain.yaml"
    path: ./rules/proxy-domain.yaml
    interval: 86400

rules:
  - RULE-SET,cn-domain,DIRECT
  - RULE-SET,proxy-domain,해외 프록시
  - GEOIP,CN,DIRECT
  - MATCH,해외 프록시

behavior 필드는 규칙 세트 파일의 실제 내용과 일치해야 합니다. 흔히 쓰는 세 가지는 domain(파일이 도메인 목록), ipcidr(파일이 IP 대역 목록), classical(파일에 완전한 규칙 문장이 섞여 있고 각 줄에 유형 접두사가 붙음)입니다. behavior를 잘못 지정하는 것은 규칙 세트가 작동하지 않는 가장 흔한 원인 중 하나입니다. 코어는 선언된 behavior를 기준으로 파일 형식을 해석하기 때문에 맞지 않으면 규칙 세트가 사실상 빈 파일과 같아지지만, 명확한 오류가 표시되지 않을 수도 있습니다.

참고 NOTE 규칙 세트는 네트워크로 다운로드된 후 path에 지정한 로컬 파일에 캐시됩니다. interval은 다음 자동 갱신까지의 간격(초)입니다. 규칙 세트가 최신 버전으로 갱신되지 않은 것 같다면, 먼저 로컬 캐시 파일의 수정 시각을 확인한 뒤 필요하면 캐시를 직접 삭제해 재다운로드를 유도하세요.

B-04규칙 순서가 결과를 좌우하는 이유: 실제로 자주 발생하는 오류 사례

규칙 순서는 단순한 작성 습관이 아니라 분流 결과를 직접 결정하는 논리 구조입니다. 아래처럼 오류가 나기 쉬운 작성법을 살펴보겠습니다.

rules:
  - GEOIP,CN,DIRECT
  - DOMAIN-SUFFIX,google.com,해외 프록시
  - MATCH,해외 프록시

이 설정은 GEOIP,CN,DIRECT를 맨 앞에 두었습니다. 문제는 CDN으로 배포되는 일부 해외 사이트의 접속 노드 IP가 마침 중국 본토 CDN 노드에 위치하거나, 반대로 여러 중국 본토 서비스가 해외에도 가속 노드를 두는 경우가 있다는 점입니다. GEOIP는 "이번 연결이 실제로 도달한 IP의 소속 지역"을 판단할 뿐 "이 사이트 자체의 소속 지역"을 판단하지 않습니다. GEOIP,CN,DIRECT가 DOMAIN-SUFFIX보다 앞에 있으면, google.com에 접속했을 때 마침 GEOIP 데이터베이스에서 중국 본토로 표시된 IP로 해석되는 경우, 원래 적용되어야 할 아래쪽 DOMAIN-SUFFIX 규칙에 도달하기 전에 직결 규칙에 먼저 걸려 해당 요청이 직결로 처리되면서 연결 실패나 오염이 발생할 수 있습니다.

올바른 순서 원칙은 더 정밀하고 구체적인 규칙을 앞쪽에, 포괄적인 기본 판단을 뒤쪽에 두는 것입니다. 도메인 기반 규칙은 대체로 GEOIP보다 정밀한데, 도메인은 사이트의 신원 표시라서 CDN 스케줄링에 따라 바뀌지 않기 때문입니다. GEOIP는 도메인 규칙 뒤에 두어, 도메인 규칙으로 처리되지 않았지만 IP 소속 지역으로 간단히 판단할 수 있는 나머지 트래픽을 전담하게 하는 것이 적합합니다. 앞선 예시에서 DOMAIN-SUFFIX/RULE-SET를 앞에, GEOIP를 중간에, MATCH를 맨 뒤에 둔 것이 바로 이 원칙을 반영한 것입니다.

B-05MATCH 기본 규칙: 반드시 작성하고 반드시 맨 마지막에 둘 것

MATCH는 매칭 대상이 필요 없는 특수 규칙으로, "앞의 모든 규칙에 매칭되지 않은 트래픽은 여기서 지정한 정책으로 일괄 처리한다"는 의미입니다. 규칙 목록의 맨 마지막 줄에 있어야 하며, 그렇지 않으면 두 가지 문제가 생깁니다. MATCH를 빠뜨리면 어떤 규칙에도 매칭되지 않는 트래픽은 코어의 기본 동작(클라이언트마다 다르며 일부는 직결, 일부는 차단)에 따라 처리되어 예측이 어려워집니다. MATCH가 마지막에 있지 않으면 그 뒤에 오는 규칙은 절대 실행되지 않는데, MATCH 자체가 모든 트래픽에 무조건 매칭되기 때문입니다.

  1. 규칙 파일의 마지막 줄이 MATCH,정책명인지 확인하세요.
  2. MATCH 뒤에 다른 규칙 줄이 없는지 확인하고, 있다면 삭제하거나 앞으로 옮기세요.
  3. MATCH에 지정한 정책 그룹이 존재하고 정상 연결되는지 확인하세요. 특정 노드가 아니라 해외 프록시 그룹을 가리키는 것이 좋으며, 그래야 해당 노드가 실패해도 기본 규칙까지 함께 무력화되지 않습니다.

B-06자주 하는 실수와 누락 매칭 점검 목록

규칙이 작동하지 않거나 분流 결과가 예상과 다를 때는 대부분 아래 몇 가지 원인 중 하나이며, 순서대로 점검하면 대체로 문제를 찾을 수 있습니다.

증상흔한 원인점검 방법
특정 사이트가 프록시를 타야 하는데 직결로 나감DOMAIN-SUFFIX 규칙이 GEOIP보다 뒤에 있거나 규칙 세트의 behavior 선언이 잘못됨규칙 순서를 조정하고 규칙 세트 캐시 파일이 비어 있지 않은지 확인
특정 사이트가 직결이어야 하는데 프록시로 나감도메인이 더 광범위한 규칙에 먼저 매칭됨. 예를 들어 범위가 너무 넓은 DOMAIN-KEYWORD를 잘못 작성한 경우범위가 좁고 정밀한 규칙을 앞으로 옮기고, 지나치게 광범위한 키워드 규칙을 좁히거나 삭제
새로 추가한 규칙이 전혀 작동하지 않음규칙이 MATCH 뒤에 작성되어 절대 비교되지 않음MATCH가 마지막 줄인지 확인하고 새 규칙을 MATCH 앞에 삽입
규칙 세트를 갱신했는데도 결과가 이전과 같음로컬 캐시가 아직 만료되지 않았거나 interval이 너무 길게 설정됨로컬 캐시 파일을 삭제하고 코어를 재시작하거나 interval을 줄이기
전체 분流가 완전히 작동하지 않음정책 그룹 이름과 rules에서 참조한 이름의 표기가 일치하지 않음proxy-groups의 name 필드와 rules의 정책명을 하나씩 대조

이 중 "정책 그룹 이름 표기 불일치"는 가장 쉽게 놓치는 실수인데, 대부분의 클라이언트는 설정을 불러올 때 정책명이 존재하지 않아도 바로 오류를 내지 않고 해당 규칙을 조용히 무효 처리하기 때문입니다. 그 결과 "설정은 문제없어 보이는데 분流가 적용되지 않는" 상태가 됩니다. 규칙을 바꾼 뒤에는 구체적인 사이트로 하나씩 확인하는 습관을 들이는 것이 나중에 원인을 찾는 것보다 훨씬 시간이 절약됩니다.

B-07분流가 예상대로 작동하는지 확인하기

규칙을 다 작성했다면 감으로 판단하지 말고 아래 방법으로 하나씩 검증하세요.

  • 클라이언트의 연결 로그나 규칙 매칭 기록에서 목표 사이트에 접속한 뒤 이번 요청이 실제로 어느 규칙에 매칭되고 어느 정책 그룹을 탔는지 확인하세요. 대부분의 그래픽 클라이언트는 "로그" 또는 "연결" 패널에서 이를 볼 수 있습니다.
  • 중국 본토 사이트와 해외 사이트에서 각각 대표성 있는 도메인 두세 개씩 골라 테스트하세요. 사이트 하나만 테스트하고 결론을 내리지 마세요. 특정 사이트는 독자적인 CDN 특수 사정이 있을 수 있습니다.
  • 규칙 세트 참조 방식의 설정이라면, 처음 적용하기 전에 규칙 세트 파일이 정상적으로 다운로드되었는지, 로컬 캐시가 빈 파일이 아닌지 먼저 확인하세요.
권장 규칙 파일에는 명확한 그룹 주석을 남겨 "국내 직결", "해외 프록시", "기본값" 구간을 나누어 두는 것이 좋습니다. 그러면 나중에 문제를 점검할 때 처음부터 끝까지 한 줄씩 훑지 않고도 순서대로 빠르게 문제 구간을 찾을 수 있습니다.

그림대로 따라 하기: Clash 클라이언트 다운로드

규칙 작성법을 정리한 뒤 그래픽 클라이언트의 로그 패널로 분流 결과를 검증하면 디버깅 효율이 더 높아집니다.

클라이언트 다운로드