Clash 규칙 분리 설정 실전: 국내외 분리 시나리오별 규칙 작성법과 매칭 순서

국내외 분리를 목표로 규칙 종류, 매칭 순서, 정책 그룹 조합을 단계별로 설명하고, 바로 적용 가능한 설정 예시와 분리 결과 확인법을 정리했습니다.

분리 목표: 국내는 직결, 해외는 프록시

Clash의 핵심 동작 방식은 규칙 기반 전달입니다. Clash로 들어오는 모든 연결은 목적지 주소를 가지고 규칙 목록을 위에서부터 순서대로 대조하며, 어느 규칙에 매칭되면 그 규칙이 지정한 출구로 전달됩니다. 국내외 분리란 결국 '어떤 트래픽을 직결하고 어떤 트래픽을 프록시로 보낼지'를 순서가 올바른 규칙 목록으로 옮기는 작업입니다.

규칙의 출구는 세 종류뿐입니다. DIRECT는 직결로, 목적지 주소에 로컬 네트워크가 직접 접속합니다. REJECT는 즉시 차단으로 보통 트래픽 차단에 사용됩니다. 세 번째는 프록시 노드나 정책 그룹의 이름으로, 프록시 채널로 전달하라는 뜻입니다.

국내외 분리로 얻어야 할 효과는 명확합니다. 국내 사이트는 직결로 지연이 낮고 노드 트래픽을 쓰지 않으며, 해외 사이트는 프록시 출구로 나가고, 명확히 막고 싶은 요청은 바로 차단합니다. 이를 구현하려면 세 가지만 있으면 됩니다. 국내외 주소를 모두 아우르는 규칙, 노드를 가리키는 정책 그룹, 그리고 올바른 배치 순서입니다. 아래에서 하나씩 살펴보겠습니다.

규칙 종류: 각 규칙이 무엇을 매칭하는가

규칙 한 줄의 형식은 '종류, 매개변수, 출구'이며 세 부분을 쉼표로 구분합니다. 종류에 따라 요청을 어떤 기준으로 비교하는지가 달라지며, 자주 쓰는 종류는 아래 표와 같습니다.

규칙 종류매칭 대상작성 예시설명
DOMAIN정확한 도메인DOMAIN,example.com,PROXY해당 도메인 자체만 매칭, 하위 도메인은 미포함
DOMAIN-SUFFIX도메인 접미사DOMAIN-SUFFIX,example.com,PROXY메인 도메인과 모든 하위 도메인을 매칭, 가장 널리 쓰는 도메인 작성법
DOMAIN-KEYWORD도메인 키워드DOMAIN-KEYWORD,example,PROXY해당 문자열이 도메인에 포함되면 매칭, 오탐 범위가 넓어 신중히 사용
GEOSITE도메인 분류 집합GEOSITE,cn,DIRECT한 줄로 특정 도메인 그룹 전체를 커버, mihomo 커널 필요
IP-CIDR목적지 IP 대역IP-CIDR,192.168.0.0/16,DIRECT,no-resolve네트워크 대역 기준 매칭, 내부망이나 고정 IP 대역에 적합
GEOIP목적지 IP 소속 국가GEOIP,CN,DIRECTIP 데이터베이스로 국가/지역을 판별, 분리의 최종 보완용
DST-PORT목적지 포트DST-PORT,853,DIRECT포트 기준 분리, 단일 포트 서비스에 적합
PROCESS-NAME실행 프로세스명PROCESS-NAME,chrome.exe,PROXY프로세스 기준 분리, 데스크톱 환경에서 사용 가능
MATCH전체 요청MATCH,PROXY규칙 목록 맨 끝의 기본 출구, 반드시 마지막에 배치

선택 기준은 간단합니다. 도메인 접미사로 처리 가능하면 키워드를 쓰지 않고, GEOSITE 분류로 처리 가능하면 수백 줄의 DOMAIN-SUFFIX를 나열하지 않습니다. IP 관련 규칙은 도메인 규칙 뒤에 배치해 소속 국가 판별의 보완 역할만 맡깁니다. DOMAIN-KEYWORD는 오탐이 가장 잦은 유형으로, 짧은 키워드 하나가 국내 사이트의 하위 도메인까지 동시에 매칭할 수 있으므로 목표가 매우 명확하지 않다면 국내외 분리의 메인 목록에는 넣지 않는 것이 좋습니다.

커널 차이

GEOSITE는 Clash Meta / mihomo 커널의 기능으로 별도의 geodata 파일이 필요합니다. 원조 Clash 환경이라면 DOMAIN-SUFFIX, 규칙 세트, GEOIP 조합으로 대체해야 합니다. 커널을 바꾸기 전에 클라이언트의 정보 페이지에서 커널 이름을 먼저 확인한 뒤 규칙 작성법을 정하세요.

매칭 순서: 첫 매칭에서 즉시 종료

Clash는 rules 목록을 위에서 아래로 순서대로 매칭하며, 첫 번째로 매칭된 규칙에서 즉시 멈추고 그 아래 규칙은 더 이상 검사하지 않습니다. 따라서 순서는 단순한 편집 습관이 아니라 분리 결과 그 자체입니다. 국내외 분리의 안정적인 순서는 다음과 같습니다: 로컬/내부망 직결 → 명확히 차단할 대상 → 국내 도메인 직결 → 국내 IP 직결 → 나머지 전부 프록시.

  1. 먼저 로컬, 내부망, 예약된 주소 대역을 허용해 라우터·NAS·프린터 같은 트래픽이 프록시로 넘어가지 않도록 합니다.
  2. 다음으로 정확한 차단 규칙을 배치합니다. 예를 들어 이미 알려진 추적용 도메인이나 허용하고 싶지 않은 서비스가 여기에 해당하며, 차단 규칙이 앞쪽에 있을수록 이후 단계에서 불필요한 해석이 줄어듭니다.
  3. 그다음 국내 도메인 집합을 배치합니다. GEOSITE,cn 한 줄로 대량의 도메인을 커버할 수 있으며, GEOSITE가 없는 환경에서는 관리되는 도메인 규칙 세트로 대체합니다.
  4. 이어서 GEOIP,CN,DIRECT를 배치해 도메인 집합에 포함되지 않았지만 해석 결과가 중국 내로 나오는 목적지를 잡아냅니다.
  5. 마지막으로 MATCH,PROXY 한 줄만 남깁니다. 국내 규칙에 매칭되지 않은 모든 요청은 프록시 정책 그룹으로 통일해서 보냅니다.

no-resolve는 IP 계열 규칙에만 영향을 줍니다. 이를 붙이면 Clash는 이 규칙을 매칭시키기 위해 도메인을 IP로 강제 해석하지 않습니다. 흔한 방식은 내부망 대역에는 예외 없이 no-resolve를 붙이는 것이고, GEOIP,CNno-resolve를 붙일지는 도메인 규칙의 커버리지에 따라 달라집니다. 도메인 목록이 충분히 넓다면 GEOIP,CN,DIRECT,no-resolve로 써서 불필요한 추가 해석을 줄일 수 있고, 도메인 목록이 오래된 경우라면 해석 기능을 남겨두는 편이 더 안정적이지만, 이때는 올바른 DNS 경로와 함께 사용해 해석 과정 자체가 대리 통로를 우회하지 않도록 해야 합니다.

순서 사고

MATCH,PROXY를 목록 중간에 잘못 배치하면 그 뒤에 있던 국내 직결 규칙이 모두 무효화됩니다. GEOIP,CNGEOSITE,cn보다 앞에 두면 도메인으로 바로 직결될 수 있었던 수많은 요청이 먼저 IP 소속 판별을 거치게 됩니다. 결과는 결국 같습니다. 국내 사이트가 노드로 전달되어 지연과 노드 트래픽이 동시에 늘어납니다.

정책 그룹 조합: 출구는 이름 하나만 노출

규칙에는 특정 노드 이름을 직접 고정하지 말고 정책 그룹 이름을 쓰는 것을 권장합니다. 이렇게 하면 노드를 바꾸거나 속도를 측정하거나 백업 출구를 추가할 때 규칙 목록을 손댈 필요가 없습니다. 국내외 분리에는 최소 두 개의 그룹이 필요합니다. 수동 선택용 PROXY와 자동 속도 측정용 AUTO입니다.

정책 그룹 종류동작 방식적합한 위치
select클라이언트에서 출구를 수동으로 선택메인 출구 그룹, 최종 결정 위치에 적합
url-test주기적으로 속도를 측정해 지연이 가장 낮은 노드로 자동 전환select 그룹 안에 포함시켜 자동 옵션으로 사용
fallback순서대로 상태를 확인해 장애 시 다음 가용 노드로 전환지연보다 가용성을 중시하는 경우에 적합
load-balance정책에 따라 연결을 여러 노드로 분산다중 부하 분산용, 기본 문제 진단 대상으로는 부적합

추천 구조는 PROXYselect 타입으로 두고 그 안에 AUTO, 여러 노드, DIRECT를 후보로 넣는 방식입니다. AUTOurl-test 타입으로 실제 사용 가능한 프록시 노드만 넣습니다. 규칙은 전부 PROXY를 가리키게 하여, 클라이언트에서 자동/수동 노드를 전환해도 규칙은 그대로 두고 그룹 내 선택만 바꾸면 됩니다.

바로 적용 가능한 설정 예시

아래는 최소 구성의 예시 골격이며, proxy-groupsrules의 대응 관계를 중점적으로 봐야 합니다. 노드 정보는 필드 위치를 보여주기 위한 명백한 가짜 값입니다. 구독을 사용하는 경우 노드와 그룹은 구독 변환이나 오버라이드 메커니즘이 관리하도록 두어야 하며, 변환 결과를 직접 수정하면 다음 업데이트 때 덮어써집니다.

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false

proxies:
  - name: "예시 노드-사용 금지"
    type: ss
    server: node1.example.invalid
    port: 443
    cipher: aes-128-gcm
    password: "demo-pass-000"

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - AUTO
      - 예시 노드-사용 금지
      - DIRECT

  - name: AUTO
    type: url-test
    proxies:
      - 예시 노드-사용 금지
    url: http://example.invalid/generate_204
    interval: 300
    tolerance: 50

rules:
  - DOMAIN-SUFFIX,localhost,DIRECT
  - DOMAIN-SUFFIX,local,DIRECT
  - 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-CIDR,169.254.0.0/16,DIRECT,no-resolve
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

클라이언트가 구독을 사용 중이라면 '오버라이드 / Mixin / 설정 패치' 입구를 먼저 찾아, 위의 rules 순서 원칙을 구독이 생성하는 규칙의 앞이나 뒤에 적용하세요. 매 업데이트마다 재생성되는 완성 설정 파일을 직접 편집하지 마세요. 차단이 필요하면 GEOSITE,cn 앞에 별도의 REJECT 규칙이나 규칙 세트를 삽입해 국내 직결 규칙의 연속성을 유지하세요.

판단 기준

이 설정이 성공했다는 신호는 '인터넷이 되는지'가 아니라, 연결 패널에서 국내 목적지가 GEOSITE,cn 또는 GEOIP,CN에 매칭되고 출구가 DIRECT인지, 해외 목적지는 MATCH에만 매칭되어 출구가 PROXY 그룹 내 현재 선택된 노드로 들어가는지입니다.

분리 결과 확인법

확인은 세 단계로 나누어 순서대로 진행합니다. 첫 번째 단계는 모드 확인입니다. 클라이언트가 규칙 모드이고 시스템 프록시나 TUN이 트래픽을 이미 넘겨받았는지 봅니다. 브라우저 확장 프록시나 앱 내부 프록시는 Clash를 우회하므로 먼저 제외해야 합니다. 두 번째 단계는 매칭 확인입니다. 클라이언트의 연결 또는 로그 페이지를 열고 국내 요청 하나와 해외 요청 하나를 각각 발생시켜, 각 연결 옆에 표시되는 규칙 체인과 출구를 직접 확인합니다. 웹 페이지가 열리는 속도로 짐작하면 안 됩니다. 세 번째 단계는 명령줄 확인입니다. 명시적으로 프록시를 지정해 요청을 보내, 트래픽이 실제로 Clash 포트를 통해 들어가는지 확인합니다.

curl -x http://127.0.0.1:7890 -I https://목적지도메인/

명령줄은 요청이 Clash로 들어갔다는 사실만 증명할 뿐이며, 어느 쪽으로 분리되었는지는 여전히 연결 패널에서 rulechains 필드를 확인해야 알 수 있습니다. 국내 요청은 직결 체인이, 해외 요청은 노드 체인이 표시되어야 합니다. 해외 요청에 DIRECT가 표시된다면 앞쪽에 있는 DOMAIN-SUFFIX나 키워드 규칙이 잘못 매칭됐을 가능성이 큽니다. 국내 요청이 노드로 들어갔다면 MATCH의 위치가 너무 앞인지, GEOSITE 데이터가 빠졌는지, 클라이언트가 실제로 원조 커널을 쓰고 있는지를 먼저 확인하세요.

TUN이나 향상된 DNS 모드를 켰다면 시스템 트래픽이 실제로 Clash 가상 네트워크 카드로 들어가는지도 확인해야 합니다. 그렇지 않으면 규칙을 아무리 정확하게 작성해도 프록시를 수동으로 설정한 앱에만 적용됩니다. 문제를 진단할 때는 먼저 TUN을 끄고 시스템 프록시로 규칙을 확인한 뒤 TUN을 다시 켜면, '규칙 문제'와 '트래픽 인계 문제'를 분리해서 볼 수 있습니다.

자주 발생하는 오류 목록

  • 규칙 순서 역전: 기본 규칙을 앞쪽에 두면 그 뒤의 세밀한 규칙이 전부 무효화됩니다. 저장하기 전에 rules의 맨 위와 맨 아래만 확인해도 대부분의 사고를 막을 수 있습니다.
  • 키워드 오탐: DOMAIN-KEYWORD의 매칭 범위가 너무 넓어 국내 사이트가 프록시로 넘어갑니다. DOMAIN-SUFFIX로 바꾸거나 GEOSITE 분류에 맡기세요.
  • 규칙에 노드 이름을 직접 기입: 구독이 갱신되면서 노드 이름이 바뀌면 규칙이 그대로 무효화됩니다. 규칙은 정책 그룹 이름만 참조해야 합니다.
  • GEOIP 단독 의존: GEOIP,CN만 사용하면 CDN과 해외 미러가 누락됩니다. 도메인 집합과 IP 소속 판별을 함께 사용하세요.
  • 구독 완성 파일 직접 수정: 업데이트 후 덮어써져서 설정이 '저절로 되돌아간' 것처럼 보입니다. 오버라이드 입구를 통해 사용자 정의 부분을 관리하세요.
  • IPv6 방치: 로컬 환경에 사용 가능한 IPv6가 있는데 설정에서 껐거나 빠뜨리면 일부 요청이 시스템 네트워크로 새어나갑니다. 커널과 시스템 양쪽에서 일관되게 켜고 IP-CIDR6 규칙을 추가하거나, 아니면 명확히 꺼두세요.

규칙은 이정표처럼 관리하세요. 각 줄은 하나의 목적지만 나타내고, 순서는 구체적인 것에서 기본값 순으로 배치합니다. 국내 직결, 해외 프록시, 예외 차단이라는 세 가지가 각자 제자리를 지키면 이후 노드를 바꾸거나 클라이언트를 바꾸거나 규칙 세트를 추가할 때도 일부만 교체하면 되며 전체 설정을 다시 쓸 필요가 없습니다.

Clash 클라이언트 다운로드

규칙 분리를 적용하려면 먼저 클라이언트가 트래픽을 인계받아야 합니다. 다운로드 센터에서 사용 중인 플랫폼에 맞는 클라이언트를 선택한 뒤, 다시 가이드로 돌아와 시스템 프록시 또는 TUN 인계를 완료하세요.

Clash 다운로드