규칙 엔진 동작 원리

Clash의 규칙 엔진은 위에서 아래로 순서대로 매칭합니다. 처음으로 일치하는 규칙이 적용되고 이후 규칙은 더 이상 확인하지 않습니다. 각 규칙은 세 부분으로 구성됩니다:

# 형식: 규칙 유형,매칭 값,대상 정책
- DOMAIN-SUFFIX,google.com,Proxy
- GEOIP,CN,DIRECT
- MATCH,DIRECT        # 기본값 규칙, 반드시 마지막에 배치

이 순서 매칭 메커니즘을 이해하는 것이 매우 중요합니다: 정밀한 규칙을 앞에, 광범위한 규칙을 뒤에, MATCH를 마지막 기본값으로 배치하세요.

규칙 유형 상세 설명

도메인 규칙

규칙 유형매칭 방법예시
DOMAIN도메인 정확 일치DOMAIN,www.google.com,Proxy
DOMAIN-SUFFIX도메인 및 모든 서브도메인에 일치DOMAIN-SUFFIX,google.com,Proxy
DOMAIN-KEYWORD도메인에 키워드 포함DOMAIN-KEYWORD,googleapis,Proxy
DOMAIN-REGEX정규식으로 도메인 매칭DOMAIN-REGEX,^api\..+\.com$,Proxy

DOMAIN-SUFFIX,google.com,Proxygoogle.com, www.google.com, mail.google.com 등 모든 서브도메인에 동시에 일치합니다. 가장 많이 사용되는 도메인 규칙입니다.

IP 주소 규칙

규칙 유형매칭 방법예시
IP-CIDRIPv4 CIDR 범위 매칭IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR6IPv6 CIDR 범위 매칭IP-CIDR6,::1/128,DIRECT
GEOIPIP 소속 국가/지역으로 매칭GEOIP,CN,DIRECT
💡
IP-CIDR 규칙은 기본적으로 DNS 확인을 트리거합니다(도메인을 IP로 변환한 후 매칭). fake-ip 모드에서는 IP-CIDR 규칙이 도메인에 대해 작동하지 않으므로 도메인 규칙을 먼저 사용하세요. IP-CIDR가 DNS 확인을 트리거하지 않도록 하려면 규칙 끝에 no-resolve를 추가합니다: IP-CIDR,10.0.0.0/8,DIRECT,no-resolve

기타 규칙 유형

규칙 유형설명예시
PROCESS-NAME프로세스 이름으로 매칭 (데스크톱)PROCESS-NAME,git.exe,Proxy
PROCESS-PATH프로세스 전체 경로로 매칭PROCESS-PATH,/usr/bin/curl,Proxy
NETWORK프로토콜 유형으로 매칭NETWORK,udp,Proxy
PORT대상 포트로 매칭DST-PORT,22,DIRECT
RULE-SET외부 규칙 세트 참조RULE-SET,gfw,Proxy
MATCH기본값 매칭, 무조건 일치MATCH,DIRECT

proxy-groups 정책 그룹 설정

정책 그룹은 규칙이 일치한 후 트래픽을 전달할 대상을 정의합니다. Clash는 다음과 같은 정책 그룹 유형을 지원합니다:

수동 선택 (select)

proxy-groups:
  - name: "Proxy"
    type: select
    proxies:
      - "자동 선택"
      - "홍콩 01"
      - "싱가포르 01"
      - "일본 01"
      - DIRECT

사용자가 클라이언트 인터페이스에서 수동으로 사용할 노드 또는 하위 정책 그룹을 선택합니다. 가장 바깥쪽의 기본 정책 그룹은 일반적으로 select 유형을 사용합니다.

지연 시간 자동 선택 (url-test)

  - name: "자동 선택"
    type: url-test
    url: "https://www.gstatic.com/generate_204"
    interval: 300      # 테스트 간격(초), 180~300 권장
    tolerance: 50      # 지연 시간 차이가 50ms 이내이면 노드 전환 안 함
    proxies:
      - "홍콩 01"
      - "홍콩 02"
      - "싱가포르 01"

모든 노드의 지연 시간을 자동으로 테스트하고 항상 가장 낮은 지연 시간의 노드를 선택합니다. 지연 시간에 민감한 시나리오(게임, 화상 회의)에 이상적입니다.

장애 조치 (fallback)

  - name: "장애 조치"
    type: fallback
    url: "https://www.gstatic.com/generate_204"
    interval: 300
    proxies:
      - "기본 노드"
      - "백업 노드 01"
      - "백업 노드 02"

목록의 첫 번째 노드를 우선적으로 사용하고 해당 노드가 사용 불가능할 때만 다음 노드로 전환합니다. 안정성을 최우선으로 하는 시나리오에 적합합니다.

로드 밸런싱 (load-balance)

  - name: "로드 밸런싱"
    type: load-balance
    strategy: round-robin   # round-robin / consistent-hashing
    url: "https://www.gstatic.com/generate_204"
    interval: 300
    proxies:
      - "노드 A"
      - "노드 B"
      - "노드 C"

여러 노드에 트래픽을 분산하여 전체 처리량을 향상시킵니다. round-robin은 노드를 순차적으로 순환합니다. consistent-hashing은 동일한 대상 주소에 항상 동일한 노드를 사용하며, 세션 유지가 필요한 시나리오에 적합합니다.

rule-providers 외부 규칙 세트

수백 개의 규칙을 수동으로 관리하는 것은 번거롭고 누락이 생기기 쉽습니다. rule-providers를 사용하면 외부 URL이나 로컬 파일에서 커뮤니티가 관리하는 대용량 규칙 세트를 구독하고 자동으로 업데이트할 수 있습니다.

rule-providers:
  gfw:
    type: http
    behavior: domain        # domain / ipcidr / classical
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400         # 24시간마다 자동 업데이트

  cn-cidr:
    type: http
    behavior: ipcidr
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/cncidr.txt"
    path: ./ruleset/cncidr.yaml
    interval: 86400

  direct:
    type: http
    behavior: domain
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/direct.txt"
    path: ./ruleset/direct.yaml
    interval: 86400

rules:
  - RULE-SET,direct,DIRECT
  - RULE-SET,gfw,Proxy
  - RULE-SET,cn-cidr,DIRECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,Proxy
ℹ️
추천 규칙 세트 출처: Loyalsoldier/clash-rules는 커뮤니티에서 가장 널리 사용되는 규칙 세트로, GFW 목록, 국내 직접 연결 도메인, 광고 필터링 등을 포함하며 지속적으로 유지 관리되고 업데이트됩니다.

완전한 설정 템플릿 예시

다음은 규칙 기반 라우팅, 정책 그룹, 외부 규칙 세트를 포함한 최소 동작 가능한 설정 템플릿입니다:

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

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - tls://8.8.8.8:853

proxies:
  - name: "홍콩 01"
    type: vmess
    server: hk01.example.com
    port: 443
    uuid: "your-uuid-here"
    alterId: 0
    cipher: auto
    tls: true

proxy-groups:
  - name: "Proxy"
    type: select
    proxies: ["자동 선택", "홍콩 01", DIRECT]

  - name: "자동 선택"
    type: url-test
    url: "https://www.gstatic.com/generate_204"
    interval: 300
    proxies: ["홍콩 01"]

rule-providers:
  gfw:
    type: http
    behavior: domain
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400

rules:
  # 사용자 정의 고우선순위 규칙 (맨 앞에 배치)
  - DOMAIN-SUFFIX,openai.com,Proxy
  - DOMAIN-KEYWORD,notion,Proxy
  # 외부 규칙 세트
  - RULE-SET,gfw,Proxy
  # 국내 IP 직접 연결
  - GEOIP,CN,DIRECT
  # LAN 직접 연결
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  # 기본값
  - MATCH,DIRECT

일반적인 분할 터널링 시나리오

스트리밍 잠금 해제

Netflix, Disney+, YouTube Premium 등의 스트리밍 서비스에는 지역 제한이 있으며 특정 지역의 잠금 해제 노드가 필요합니다:

proxy-groups:
  - name: "Netflix"
    type: select
    proxies: ["미국 노드", "싱가포르 노드", "일본 노드"]

rules:
  - DOMAIN-SUFFIX,netflix.com,Netflix
  - DOMAIN-SUFFIX,nflxvideo.net,Netflix
  - DOMAIN-KEYWORD,netflix,Netflix

개발자 도구 최적화

npm, pip, Docker Hub 등은 프록시가 필요하고, 내부망 서비스와 로컬 개발 서버는 직접 연결이 필요합니다:

rules:
  # 개발 도구는 프록시 경유
  - DOMAIN-SUFFIX,npmjs.org,Proxy
  - DOMAIN-SUFFIX,pypi.org,Proxy
  - DOMAIN-SUFFIX,docker.io,Proxy
  - PROCESS-NAME,git.exe,Proxy       # Windows
  - PROCESS-NAME,git,Proxy           # macOS/Linux
  # 로컬 개발 직접 연결
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - DOMAIN-SUFFIX,local,DIRECT

규칙 설정 모범 사례

  • 정밀도 우선: DOMAINDOMAIN-SUFFIX 앞에, DOMAIN-SUFFIXDOMAIN-KEYWORD 앞에 배치하여 오매칭을 줄임
  • GEOIP는 뒤에: GEOIP는 DNS 확인이 필요하여 시간이 걸리므로 도메인 규칙 뒤에 배치
  • MATCH는 반드시 마지막: 기본값 규칙으로, 어떤 규칙에도 일치하지 않는 트래픽을 MATCH가 처리
  • 로그로 디버깅: Clash 클라이언트의 '로그' 페이지에서 각 연결이 어떤 규칙에 일치했는지 실시간으로 확인하여 라우팅 문제를 빠르게 해결
  • no-resolve로 지연 감소: 내부 IP임이 확실한 IP-CIDR 규칙에는 no-resolve를 추가하여 DNS 확인 단계를 건너뜀
고급 설정 가이드에서 더 많은 Clash 고급 기능 살펴보기

요약

  • 규칙은 위에서 아래로 순서대로 매칭: 정밀한 규칙 먼저, 광범위한 규칙 나중에, MATCH가 기본값
  • 자주 사용하는 규칙 유형: DOMAIN-SUFFIX(도메인 및 서브도메인), GEOIP(IP 지리적 위치), IP-CIDR(IP 범위), PROCESS-NAME(프로세스 이름)
  • proxy-groups로 노드 선택 전략 정의: select(수동) / url-test(자동 지연) / fallback(장애 조치) / load-balance(로드 밸런싱)
  • rule-providers로 대용량 외부 규칙 세트 구독, 자동 업데이트, 수동 관리 불필요

관련 글