Clash의 기본 설정을 마치고 나면 곧 이런 요구가 생깁니다. 국내 사이트는 직접 연결, 해외 사이트는 프록시, 회사 내부망은 프록시 우회, 게임 트래픽은 별도 처리, 더불어 광고까지 차단하고 싶어집니다. 이는 모두 「프록시 켜기」로 해결되는 것이 아니라, Clash 규칙 엔진의 핵심 기능에 해당합니다. 본 글은 규칙 문법부터 시작하여 자신만의 라우팅 전략을 한 단계씩 구축하도록 안내합니다.
규칙 엔진은 어떻게 동작하는가
Clash는 모든 네트워크 요청을 처리할 때, rules 목록의 규칙을 순서대로 한 줄씩 매칭합니다. 어느 한 규칙이 적중하면 즉시 해당 동작(특정 프록시 그룹으로 보내기, 직접 연결, 거부)을 실행하고 더 이상 아래로 매칭하지 않습니다. 따라서 규칙의 배열 순서가 매우 중요합니다. 구체적인 규칙일수록 앞에, 포괄적인 규칙일수록 뒤에 배치해야 합니다.
전형적인 규칙 목록 구조는 다음과 같습니다.
rules:
- DOMAIN-SUFFIX,company.internal,DIRECT
- DOMAIN-SUFFIX,google.com,Proxy
- GEOIP,CN,DIRECT
- MATCH,Proxy
마지막 MATCH는 폴백 규칙으로 반드시 목록 맨 끝에 두어야 하며, 그렇지 않으면 뒤에 오는 규칙은 영원히 실행되지 않습니다.
GEOSITE, PROCESS-NAME, RULE-SET)을 지원하여, 기존 Clash보다 기능이 더 강력합니다. 본 글의 예시는 모두 Mihomo 코어 문법을 기준으로 합니다.
자주 쓰는 규칙 유형 상세 해설
도메인 계열 규칙
DOMAIN은 완전한 도메인을 정확히 매칭하고, DOMAIN-SUFFIX는 도메인과 그 모든 하위 도메인을 매칭하며, DOMAIN-KEYWORD는 도메인에 지정한 키워드가 포함된 요청을 매칭합니다. 세 가지는 정확한 것에서 모호한 것 순으로 사용 상황이 다릅니다.
DOMAIN,www.google.com,Proxy— www.google.com만 매칭DOMAIN-SUFFIX,google.com,Proxy— google.com 및 모든 하위 도메인(예: mail.google.com) 매칭DOMAIN-KEYWORD,google,Proxy— 도메인에 google이 포함된 모든 요청 매칭
일상적인 설정에서는 DOMAIN-SUFFIX가 가장 많이 쓰입니다. 하위 도메인을 커버하면서도 무관한 도메인을 잘못 매칭하지 않기 때문입니다. 정확한 제어가 필요할 때만 DOMAIN을 사용합니다.
IP 계열 규칙
IP-CIDR와 IP-CIDR6은 IP 주소 대역으로 매칭하며, 내부망 직접 연결이나 특정 IP 대역 차단에 자주 쓰입니다. 예를 들면 다음과 같습니다.
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
이 세 줄은 RFC 1918에서 정의한 사설 주소 대역으로, 거의 모든 구독 설정에 포함되어 로컬 네트워크 기기 간 통신이 프록시를 거치지 않도록 보장합니다. no-resolve는 이 규칙을 위해 DNS 해석을 유발하지 않음을 의미하며, 순환 조회를 방지합니다.
지리적 위치 규칙
GEOIP는 IP 소속 국가에 따라 매칭하고, GEOSITE는 도메인 분류 데이터베이스에 따라 매칭합니다. 이는 「국내 직접 연결, 해외 프록시」를 구현하는 가장 간결한 방법입니다.
- GEOSITE,cn,DIRECT
- GEOSITE,google,Proxy
- GEOIP,CN,DIRECT
- GEOIP,LAN,DIRECT
GEOSITE는 도메인 분류 기반이라 GEOIP보다 정확합니다. 예를 들어 해외에 배치된 CDN 노드를 GEOIP는 해외로 잘못 판단할 수 있지만, GEOSITE,cn은 국내 서비스로 올바르게 식별할 수 있습니다.
프로세스 및 포트 규칙
PROCESS-NAME은 요청을 시작한 프로그램 이름으로 매칭하며, 특정 소프트웨어가 지정한 회선을 사용하도록 하는 데 적합합니다.
- PROCESS-NAME,Telegram.exe,Proxy
- PROCESS-NAME,WeChat.exe,DIRECT
- PROCESS-NAME,steam.exe,Game
DST-PORT와 SRC-PORT는 목적지 또는 출발지 포트로 매칭하며, 단독으로 쓰이는 경우는 적지만 게임 UDP 트래픽을 정밀하게 제어할 때 매우 유용합니다.
프록시 그룹: 규칙의 목적지
규칙 오른쪽의 세 번째 인자는 프록시 그룹 이름 또는 동작입니다. DIRECT(직접 연결), REJECT(거부), REJECT-DROP(조용히 드롭)을 제외한 나머지는 모두 사용자가 직접 정의한 프록시 그룹입니다.
자주 쓰이는 프록시 그룹 유형은 다음과 같습니다.
- select — 수동 선택. 화면에 드롭다운 목록으로 표시되며, 가장 많이 쓰임
- url-test — 자동 속도 측정으로 지연 시간이 가장 낮은 노드 선택
- fallback — 순서대로 시도하며, 현재 노드를 사용할 수 없을 때 자동 전환
- load-balance — 부하 분산으로 여러 노드 간에 트래픽 분배
- relay — 체인 프록시로, 트래픽이 여러 노드를 차례로 경유
실용적인 다중 그룹 전략 예시입니다.
proxy-groups:
- name: Proxy
type: select
proxies: [Auto, HK, JP, US, DIRECT]
- name: Auto
type: url-test
proxies: [HK, JP, US]
url: http://www.gstatic.com/generate_204
interval: 300
- name: AdBlock
type: select
proxies: [REJECT, DIRECT]
Rule-Provider: 서드파티 규칙 세트 구독하기
수백 개의 규칙을 수동으로 관리하는 것은 현실적이지 않습니다. Rule-Provider를 사용하면 원격 URL에서 규칙 세트를 구독할 수 있으며, Clash가 주기적으로 가져와 업데이트합니다. 설정 형식은 다음과 같습니다.
rule-providers:
reject:
type: http
behavior: domain
url: "https://example.com/rules/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://example.com/rules/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,reject,AdBlock
- RULE-SET,direct,DIRECT
- GEOSITE,cn,DIRECT
- MATCH,Proxy
behavior는 domain, ipcidr, classical 중에서 선택할 수 있습니다. domain과 ipcidr는 최적화된 바이너리 형식으로 매칭 속도가 더 빠르고, classical은 완전한 Clash 규칙 문법과 호환되어 유연성이 가장 높습니다.
REJECT로 지정하여 서비스를 사용할 수 없게 만들거나, 악성 노드로 지정하여 트래픽을 탈취할 수 있습니다.
광고 차단 실전
Clash의 광고 차단 원리는 매우 간단합니다. 광고 도메인을 REJECT 또는 REJECT-DROP으로 매칭하면, 요청이 로컬에서 드롭되어 광고 콘텐츠가 영원히 로딩되지 않습니다. 브라우저 확장 프로그램과 비교해, Clash는 시스템 차원에서 차단하므로 모든 앱 내부의 광고 요청까지 커버할 수 있습니다.
권장하는 광고 차단 규칙 배열 순서는 다음과 같습니다.
- 로컬 네트워크 및 내부망 IP 직접 연결(로컬 서비스 오차단 방지)
- 광고 도메인 규칙 세트 →
REJECT - 국내 도메인 →
DIRECT - 해외 도메인 →
Proxy MATCH폴백
광고 차단을 켜면 일부 사이트의 「광고 차단 방지」 감지가 작동하여, 광고 차단기를 끄라는 안내가 페이지에 표시될 수 있습니다. 이는 정상적인 현상이며, 규칙에서 특정 도메인에 대한 예외를 추가할 수 있습니다.
- DOMAIN-SUFFIX,anti-adblock-example.com,DIRECT
예외 규칙을 광고 규칙 세트 앞에 배치하면, 거부되지 않고 직접 연결이 우선 적중합니다.
실전: 나만의 라우팅 전략 만들기
다음은 대다수 사용자에게 적합한 완전한 규칙 프레임워크로, 이를 기반으로 가감할 수 있습니다.
rules:
# 1. 로컬 및 내부망
- GEOIP,LAN,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
# 2. 광고 차단
- RULE-SET,reject,REJECT
# 3. 커스텀 직접 연결(회사, 은행, 행정)
- DOMAIN-SUFFIX,company.com,DIRECT
- GEOSITE,cn,DIRECT
# 4. 커스텀 프록시(특정 서비스를 특정 노드로)
- DOMAIN-SUFFIX,openai.com,US
- DOMAIN-SUFFIX,netflix.com,Proxy
# 5. 국내 IP 직접 연결
- GEOIP,CN,DIRECT
# 6. 폴백
- MATCH,Proxy
Clash Verge Rev 등의 클라이언트에서는 「설정 → 규칙」 화면을 통해 시각적으로 편집하거나, YAML 파일을 직접 수정할 수 있습니다. 수정 후 「설정 다시 로드」를 클릭하면 바로 적용되며, 클라이언트를 재시작할 필요가 없습니다.
규칙 디버깅: 트래픽 경로 확인하기
규칙을 다 작성한 뒤, 특정 트래픽이 정말 예상대로 라우팅되는지 어떻게 검증할까요? Clash는 연결 로그 기능을 제공합니다. Clash Verge Rev에서 「연결」 패널을 열면, 각 요청이 매칭한 도메인, 목적지 IP, 사용된 규칙, 최종적으로 거치는 프록시 그룹을 실시간으로 볼 수 있습니다.
디버깅 팁:
- 먼저 대상 사이트에 접속하여 연결 로그에서 해당 항목을 찾습니다
- 「규칙」 열을 확인하여 어느 규칙이 적중했는지 확인합니다. 예상한 규칙이 아니라면 순서를 조정해야 한다는 의미입니다
MATCH가 표시되면 앞의 모든 규칙이 적중하지 않았다는 뜻이므로, 더 구체적인 규칙을 추가해야 합니다- 규칙을 수정한 뒤 설정을 다시 로드하고 페이지를 새로 고쳐 다시 테스트합니다
일괄 검증의 경우, Clash의 API 인터페이스를 사용하여 규칙 적중 상황을 조회할 수 있습니다. 고급 사용자는 LOG-LEVEL을 debug로 설정하여 로그 파일에서 전체 규칙 매칭 과정을 볼 수도 있지만, 일상 사용 시에는 로그 파일이 비대해지는 것을 막기 위해 info 수준을 유지하는 것이 좋습니다.
규칙 병합: 오버라이드 vs 교체
구독을 사용할 때, 커스텀 규칙을 구독에서 제공하는 규칙과 어떻게 공존시킬까요? 일반적으로 두 가지 방식이 있습니다.
- 선행 규칙(prepend-rules) — 사용자의 규칙을 구독 규칙 앞에 삽입하며, 우선순위가 가장 높습니다. 직접 연결 예외나 광고 차단을 추가하는 데 적합합니다
- 후행 규칙(append-rules) — 사용자의 규칙을 구독 규칙 뒤에 추가하며, 폴백 정책을 수정하는 데 적합합니다
Clash Verge Rev의 「설정 → 오버라이드」 기능에서는 전체 설정 파일을 수정하지 않고도 YAML 조각으로 규칙을 추가할 수 있습니다. 예를 들어 광고 차단과 커스텀 직접 연결만 추가하려면 다음과 같이 합니다.
prepend-rules:
- RULE-SET,reject,REJECT
- DOMAIN-SUFFIX,mycompany.com,DIRECT
이 방식의 장점은 구독이 업데이트될 때 커스텀 규칙을 덮어쓰지 않는다는 것으로, 일상적인 유지 관리에서 가장 권장하는 방법입니다.
자주 묻는 문제 해결
규칙을 수정했는데 적용되지 않음
설정을 다시 로드했는지(파일만 저장한 것이 아닌지) 확인하세요. 일부 클라이언트에는 「규칙」과 「설정」 두 개의 편집 진입점이 있어, 잘못된 위치를 수정하면 적용되지 않습니다. YAML 들여쓰기가 올바른지 확인하세요. YAML은 들여쓰기에 극도로 민감하여 공백 하나만 빠져도 해당 규칙 전체가 무시됩니다.
국내 사이트가 프록시를 거침
대개 GEOIP,CN,DIRECT의 위치가 너무 뒤에 있어, 앞의 MATCH,Proxy에 먼저 매칭되었기 때문입니다. GEOIP/GEOSITE 규칙을 위로 옮기고, 폴백 규칙이 맨 끝에 오도록 하세요.
광고 차단으로 인해 앱 기능에 이상이 생김
일부 앱의 통계, 푸시, 업데이트 서비스 도메인이 광고 도메인과 같은 규칙 세트에 들어 있는 경우가 있습니다. 영향을 받는 앱에 DOMAIN-SUFFIX 예외를 추가하거나, 광고 규칙 세트를 일시적으로 REJECT에서 DIRECT로 바꿔 문제가 되는 도메인을 찾아내세요.
정리
Clash의 규칙 시스템은 라우팅 프록시의 핵심입니다. DOMAIN-SUFFIX, GEOSITE, GEOIP 세 가지 핵심 규칙을 익히고 Rule-Provider 구독과 결합하면, 안정적이고 개인화된 라우팅 전략을 구축할 수 있습니다. 광고 차단은 광고 도메인을 REJECT로 지정하기만 하면 되며, 규칙 순서가 올바르다는 전제 하에 시스템 차원의 광고 제거를 구현할 수 있습니다.
규칙 설정에 「한 번에 완성」은 없습니다. 사용 상황이 바뀜에 따라 끊임없이 미세 조정하게 됩니다. 구독이 제공하는 기본 규칙에서 출발하여 매번 한두 개의 커스텀 규칙만 추가하고 테스트하는 것이, 한 번에 모든 규칙을 다시 작성하는 것보다 훨씬 안전합니다.