Clash 규칙 기반 라우팅 실전 가이드
규칙 기반 라우팅은 Clash의 가장 핵심적인 기능입니다. 기초 문법부터 고급 기법까지, 모든 트래픽의 경로를 정밀하게 제어하는 방법을 알려드립니다.
규칙 기반 라우팅의 의미
Clash의 규칙 기반 라우팅(Rule-based Routing)은 단순한 프록시 도구와 Clash를 구분 짓는 핵심 기능입니다. 잘 설계된 규칙 세트를 적용하면 Clash가 정교한 교통 관제 시스템처럼 작동합니다. 네이버, 쿠팡, 카카오 같은 국내 서비스는 직접 연결로 전속력·지연 없이 접속하고, Google, YouTube, GitHub 같은 해외 서비스는 자동으로 프록시 노드로 전환되어 자연스럽게 이용할 수 있으며, 광고·추적 도메인은 곧바로 차단되어 트래픽과 지연을 아낄 수 있습니다.
규칙 기반 라우팅이 없던 시절에는 사용자가 "프록시 켜기"와 "프록시 끄기" 두 가지 상태 중 하나만 선택할 수 있었습니다. 켜면 국내 서비스가 느려지고, 끄면 해외 서비스에 접속할 수 없었습니다. 규칙 기반 라우팅은 이 둘을 동시에 만족시켜주기 때문에, 규칙 설정에 능숙해지는 것이 Clash 고급 사용자에게 필수적인 역량입니다.
Clash.Meta(Mihomo) 코어는 규칙 시스템을 크게 강화해서 RULE-SET, DOMAIN-REGEX, NETWORK 등 새로운 규칙 유형을 추가했고, 커뮤니티가 관리하는 대규모 규칙 세트(예: Loyalsoldier의 clash-rules)를 지원하게 되면서 규칙의 표현력과 관리 효율이 크게 향상되었습니다.
규칙 문법의 기초
Clash 설정 파일(YAML 형식)에서 rules 필드는 순서가 있는 목록입니다. 각 규칙의 형식은 다음과 같습니다:
유형,매칭값,대상 정책 그룹[,no-resolve]
규칙은 위에서부터 순서대로 매칭되며, 처음 매칭된 규칙이 적용되고 이후 규칙은 검사하지 않습니다. 즉 규칙의 순서가 매우 중요합니다: 특수 규칙은 앞쪽에, 범용 규칙은 뒤쪽에 배치해야 합니다. 일반적인 규칙 파일 구조는 다음과 같습니다:
rules:
# 1. 로컬 네트워크 및 특수 주소는 직접 연결
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
# 2. 광고 차단 (우선 매칭되도록 앞쪽에 배치)
- RULE-SET,reject,REJECT
# 3. 프록시 대상 도메인
- RULE-SET,proxy,Proxy
# 4. 국내 도메인 직결
- RULE-SET,direct,DIRECT
- GEOIP,KR,DIRECT
# 5. 기본 규칙 (반드시 마지막에 배치)
- MATCH,Proxy
맨 마지막의 MATCH는 반드시 존재해야 하는 기본 규칙으로, 앞의 규칙에 매칭되지 않은 모든 트래픽이 여기로 떨어집니다. 보통 프록시로 설정해서, 규칙에 없는 도메인이라도 해외 서비스에 접속할 수 있도록 합니다.
자주 쓰는 규칙 유형
DOMAIN은 도메인을 완전히 일치시키며 하위 도메인은 매칭하지 않습니다. DOMAIN,google.com,Proxy는 google.com만 매칭하고 www.google.com은 매칭하지 않습니다.
DOMAIN-SUFFIX는 도메인과 그 모든 하위 도메인을 매칭하며, 가장 많이 쓰이는 도메인 규칙 유형입니다. DOMAIN-SUFFIX,google.com,Proxy는 google.com, www.google.com, mail.google.com 등을 모두 매칭합니다.
DOMAIN-KEYWORD는 도메인에 지정한 키워드가 포함되어 있으면 매칭됩니다. 편리하지만 오탐이 발생하기 쉬운 양날의 검입니다. DOMAIN-KEYWORD,google,Proxy는 google.com뿐 아니라 googledrive.com이나 심지어 somegooglestuff.net까지 매칭할 수 있으므로 신중하게 사용해야 합니다.
IP-CIDR는 목적지 IP 대역을 매칭합니다. 보통 내부망 주소 직결(예: 192.168.0.0/16)이나 특정 서비스의 IP 범위에 사용됩니다. IP-CIDR 규칙은 기본적으로 도메인을 먼저 IP로 해석하는데, DNS 해석이 발생하지 않길 원한다면(예: Fake-IP 모드) 끝에 no-resolve를 붙여야 합니다.
GEOIP는 목적지 IP의 지리 정보 데이터베이스를 기준으로 소속 국가를 판단합니다. GEOIP,KR,DIRECT는 거의 모든 Clash 설정 파일에 등장하는 규칙으로, 모든 국내 IP를 직결시켜 국내 서비스가 프록시를 타지 않도록 합니다. Mihomo 코어는 Maxmind GeoIP나 GeoSite 데이터베이스를 사용하며 자동으로 갱신할 수 있습니다.
RULE-SET은 외부 규칙 세트 파일(또는 인라인 규칙 세트)을 참조하는 방식으로, 대량의 규칙을 관리하는 데 추천되는 방법입니다. 자세한 내용은 다음 절에서 다룹니다.
MATCH는 모든 트래픽을 무조건 매칭하며, 반드시 규칙 목록의 맨 마지막에 기본 규칙으로만 사용할 수 있습니다.
정책 그룹과 규칙의 관계
규칙에서 "대상 정책 그룹"은 Clash 설정 파일의 proxy-groups 필드에 정의된 정책 그룹 이름이거나, 내장된 DIRECT(직결) 또는 REJECT(차단) 키워드입니다.
정책 그룹의 역할은 여러 노드를 하나로 묶고, 노드를 선택하는 전략을 정의하는 것입니다:
select 유형은 사용자가 노드나 하위 정책 그룹을 직접 선택할 수 있게 해주며, 최상위 "노드 선택" 정책 그룹으로 적합합니다. 규칙이 매칭된 후 어느 노드로 트래픽이 흐를지는 사용자가 현재 선택한 항목에 따라 결정됩니다.
url-test 유형은 자동으로 속도를 측정해 지연이 가장 낮은 노드를 선택하며, "자동 선택" 정책 그룹으로 적합합니다. url(측속 주소), interval(측속 주기, 초 단위), tolerance(전환 허용 오차, 밀리초 단위) 파라미터로 동작을 제어합니다.
fallback 유형은 노드 순서대로 선택하여 처음으로 사용 가능한 노드를 적용하며, 현재 노드가 실패하면 자동으로 다음 노드로 전환됩니다. 장애 조치와 비슷하며 안정성이 중요한 상황에 적합합니다.
load-balance 유형은 여러 노드에 트래픽을 분산시켜, 동시 다운로드 속도를 높이는 상황에 적합합니다.
규칙과 정책 그룹을 조합하면 "어떤 트래픽이 어떤 전략을 타는지"를 세밀하게 제어할 수 있습니다. 영상 트래픽은 "스트리밍 전용" 정책 그룹(해당 지역이 해제되는 노드 선택)으로, 다운로드 트래픽은 "다운로드 최적화" 정책 그룹(대역폭이 큰 노드 선택)으로, 일반 브라우징은 "자동 선택" 정책 그룹(지연이 낮은 노드 선택)으로 분리할 수 있습니다.
Rule-Set 규칙 세트
수백 개의 도메인 규칙을 직접 관리하는 것은 번거롭고 금방 낡은 정보가 됩니다. RULE-SET을 사용하면 외부 파일이나 URL을 규칙 세트로 참조해서, 규칙 관리를 커뮤니티 프로젝트에 맡길 수 있습니다.
가장 널리 쓰이는 커뮤니티 규칙 세트는 Loyalsoldier가 관리하는 clash-rules 프로젝트로, reject(광고 차단), proxy(프록시 도메인), direct(직결 도메인) 등 여러 분류 규칙 세트를 제공합니다. 매일 자동으로 갱신되고 수만 개의 규칙을 수록하고 있어, 수동 관리보다 커버리지와 정확도가 훨씬 높습니다.
설정 파일에서 참조하는 방법은 다음과 같습니다:
rule-providers:
reject:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400 # 하루에 한 번 갱신
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,proxy,Proxy
- GEOIP,KR,DIRECT
- MATCH,Proxy
Mihomo 코어는 처음 실행할 때 이 규칙 세트 파일을 로컬 캐시로 다운로드하고, 이후 interval초마다 자동으로 갱신합니다. 네트워크가 끊겨도 캐시된 규칙 세트로 계속 사용할 수 있어 정상적인 이용에 영향이 없습니다.
커스텀 규칙 실전
프록시 서비스가 제공하는 구독 설정에는 대체로 합리적인 규칙 세트가 이미 포함되어 있지만, 특정 상황을 위해 커스텀 규칙을 추가해야 할 때가 있습니다. Clash Plus(Mihomo)는 GUI의 "Override(오버라이드)" 기능으로 규칙을 추가하거나, "Mixin" 메커니즘으로 커스텀 설정을 병합할 수 있어, 원본 구독 파일을 직접 수정할 필요가 없습니다.
시나리오 1: 특정 앱을 강제로 직결시키기. 특정 국내 서비스가 규칙 세트 커버리지 부족으로 의도치 않게 프록시를 타게 되면, DOMAIN-SUFFIX 규칙을 DIRECT로 지정해 수동으로 추가하고 규칙 목록 앞쪽(우선순위가 높은 위치)에 배치하면 됩니다:
prepend-rules:
- DOMAIN-SUFFIX,example-kr-app.com,DIRECT
- DOMAIN-SUFFIX,example-cdn.co.kr,DIRECT
시나리오 2: 스트리밍 서비스에 특정 노드 지정하기. Netflix의 지역 해제는 노드의 소재 지역과 밀접하게 연관되어 있어, 전용 해제 노드가 필요합니다. 전용 정책 그룹을 만들고 Netflix 관련 도메인을 이 정책 그룹으로 지정할 수 있습니다:
prepend-proxy-groups:
- name: "Netflix 전용선"
type: select
proxies:
- 미국 Netflix 해제 노드 1
- 미국 Netflix 해제 노드 2
prepend-rules:
- DOMAIN-SUFFIX,netflix.com,Netflix 전용선
- DOMAIN-SUFFIX,nflxvideo.net,Netflix 전용선
- DOMAIN-SUFFIX,nflximg.net,Netflix 전용선
시나리오 3: 특정 광고 도메인 차단하기. 규칙 세트에 포함되지 않은 광고 도메인을 발견했다면, REJECT 규칙을 바로 추가하면 됩니다:
prepend-rules:
- DOMAIN-SUFFIX,specific-ad-domain.com,REJECT
디버깅과 문제 해결
특정 사이트에 접속할 수 없거나 잘못된 경로로 라우팅될 때, "Connections(연결)" 페이지가 가장 강력한 디버깅 도구입니다. Clash Plus의 연결 로그를 열고 해당 사이트 요청을 다시 발생시킨 뒤, 로그에서 그 연결이 어떤 규칙에 매칭되었는지(Rule 열)와 어디로 흐르는지(Chain 열)를 확인합니다. 대부분의 경우 한눈에 문제를 파악할 수 있습니다 — 잘못된 규칙에 매칭된 것인지, 노드 자체의 연결 실패인지 구분됩니다.
특정 도메인이 "직결" 트래픽에 나타났지만 프록시를 타야 한다면, "Override" 설정에 DOMAIN-SUFFIX 규칙을 추가해 프록시 정책 그룹으로 지정하면 해결됩니다. 반대로 직결해야 할 국내 사이트가 프록시를 타고 있다면 DIRECT를 지정하는 규칙을 추가하세요.
http://127.0.0.1:9090/ui)은 데스크톱 GUI보다 더 상세한 연결 로그와 규칙 테스트 기능을 제공해서, 규칙을 깊이 디버깅할 때 추천하는 도구입니다.
DNS와 프라이버시 보호를 더 알아보고 싶나요?
규칙 기반 라우팅에 Fake-IP DNS를 결합해야 진짜로 유출 없는 트래픽 분류가 완성됩니다. 다음 글에서 자세히 다룹니다.