rule 모드는 연결의 출구를 어떻게 결정할까
Clash의 rule 모드는 rules 목록을 위에서 아래로 확인하며, 처음 일치하는 규칙이 즉시 적용되고 이후 규칙은 판단에 참여하지 않습니다. 규칙의 왼쪽은 매칭 유형, 가운데는 매칭 대상, 오른쪽은 정책 이름입니다. 정책은 DIRECT나 REJECT일 수 있고, 설정에 이미 존재하는 PROXY, Auto, 해외 노드 같은 프록시 그룹일 수도 있습니다.
요청 하나를 매칭할 때 일반적으로 대상 도메인, 대상 IP, 대상 포트, 네트워크 유형과 프로세스 정보를 사용할 수 있습니다. 다만 인바운드 방식에 따라 확인 가능한 정보가 완전히 같지는 않습니다. 시스템 프록시가 HTTP 또는 SOCKS 연결을 처리할 때는 도메인이 비교적 명확하지만, TUN 모드가 시스템 트래픽을 가로채면 도메인 보존 여부가 DNS 모드, 도메인 스니핑, 애플리케이션의 연결 방식에 따라 달라집니다. 따라서 같은 규칙도 시스템 프록시와 TUN에서 서로 다른 매칭 기록을 남길 수 있습니다.
기본 결과 네 가지
| 규칙 결과 | 연결 동작 | 주요 용도 |
|---|---|---|
DIRECT |
현재 기기에서 대상에 직접 연결 | 중국 본토 사이트, LAN 기기, 신뢰할 수 있는 다운로드 소스 |
REJECT |
연결을 거부하고 이후 규칙에 넘기지 않음 | 광고 도메인, 추적 요청, 알려진 방해 주소 |
| 프록시 그룹 이름 | 선택한 노드 또는 자동 속도 측정 그룹으로 전달 | 해외 사이트, 개발 서비스, 스트리밍 |
MATCH |
앞선 규칙에서 매칭되지 않은 나머지 연결을 수신 | 규칙 목록의 마지막 폴백 |
DOMAIN-SUFFIX, GEOIP, RULE-SET, MATCH 작성법
DOMAIN-SUFFIX: 도메인 접미사 기준 처리
DOMAIN-SUFFIX,example.com,PROXY는 example.com 자체와 하위 도메인인 www.example.com, api.example.com 등을 매칭합니다. 완전한 도메인을 하나씩 작성하는 것보다 같은 서비스의 여러 하위 도메인을 처리하기 좋으며, 수동 규칙에서 자주 사용하는 유형입니다.
rules:
- DOMAIN,router.local,DIRECT
- DOMAIN-SUFFIX,gov.cn,DIRECT
- DOMAIN-SUFFIX,cn,DIRECT
- DOMAIN-SUFFIX,example.com,PROXY
DOMAIN은 하나의 완전한 도메인만 매칭하며 하위 도메인을 자동으로 포함하지 않습니다. DOMAIN-KEYWORD는 도메인에 지정 문자열이 들어가기만 하면 매칭되므로 범위가 넓고 오매칭도 발생하기 쉽습니다. 로그인 도메인이나 업데이트 도메인을 정확히 허용하려면 DOMAIN을 우선 사용하고, 사이트 전체를 포함하려면 DOMAIN-SUFFIX를 사용합니다.
GEOIP: 대상 IP의 소속 지역 기준 처리
GEOIP,CN,DIRECT는 클라이언트가 불러온 IP 지리 데이터베이스로 대상 주소가 중국 본토에 속하는지 판단합니다. 도메인 없이 IP로 직접 연결하거나 도메인 규칙에서 빠진 중국 본토 요청을 처리하는 데 적합합니다. GEOIP 판단은 로컬 데이터베이스에 의존하므로 데이터베이스가 오래되면 새로 할당된 대역이 폴백 정책으로 잘못 분류될 수 있습니다.
rules:
- 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
- GEOIP,CN,DIRECT
- MATCH,PROXY
no-resolve는 해당 IP 규칙이 도메인을 IP로 능동적으로 해석하지 않도록 합니다. LAN CIDR 규칙은 이미 확보한 대상 주소만 확인하면 되므로 이 옵션을 추가하면 불필요한 DNS 조회를 줄일 수 있습니다. 모든 GEOIP 규칙에 기계적으로 no-resolve를 붙이지 마세요. 대상 IP를 아직 얻지 못한 도메인 전용 요청이 지역 판정을 건너뛸 수 있습니다.
RULE-SET: 많은 규칙을 별도 파일로 분리
광고 규칙이나 중국 본토 도메인 규칙이 수백~수천 개에 이르면 모두 주 설정에 넣을 때 가독성이 떨어집니다. rule-providers는 규칙 파일을 정의하고, RULE-SET은 주 규칙 목록에서 이를 호출합니다. Clash Meta, 즉 mihomo는 domain, ipcidr, classical 등의 동작 유형을 지원하며 유형마다 페이로드 형식이 다릅니다.
rule-providers:
allow:
type: file
behavior: domain
path: ./ruleset/allow.yaml
ads:
type: file
behavior: classical
path: ./ruleset/ads.yaml
direct-domain:
type: file
behavior: domain
path: ./ruleset/direct-domain.yaml
rules:
- RULE-SET,allow,DIRECT
- RULE-SET,ads,REJECT
- RULE-SET,direct-domain,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
behavior: domain 파일에는 도메인 페이로드만 저장하며 중국 본토 도메인이나 허용 목록에 적합합니다. behavior: classical에는 DOMAIN-SUFFIX, DOMAIN-KEYWORD, IP-CIDR처럼 유형이 포함된 완전한 규칙을 저장할 수 있습니다. 로컬 파일은 내용을 먼저 확인한 뒤 활성화하기 좋습니다. 자동 업데이트가 필요하면 type: http로 바꾸고 규칙 주소, 저장 경로, 업데이트 주기를 함께 설정합니다.
MATCH: 반드시 마지막에 배치
MATCH,PROXY는 도메인이나 IP를 확인하지 않고 아직 매칭되지 않은 모든 연결을 처리합니다. MATCH가 중간에 있으면 아래 규칙은 실행될 기회가 없습니다. 일반적으로 “중국 본토는 직접 연결하고 나머지는 프록시”를 구성하므로, 예외 허용·광고 차단·LAN 직접 연결·중국 본토 도메인·GEOIP를 먼저 배치한 뒤 마지막에 MATCH로 프록시 그룹에 전달합니다.
중국 본토 직접 연결, 해외 프록시와 광고 차단 설정 뼈대
아래 뼈대는 기존 구독 설정에 병합해 사용할 수 있습니다. 구독에 PROXY라는 정책 그룹이 이미 있다고 가정합니다. 클라이언트에 그룹 이름이 “노드 선택”이나 “프록시”로 표시된다면 규칙 끝의 PROXY를 실제 이름으로 바꿔야 합니다. 정책 이름은 대소문자와 문자를 구분하므로 공백과 한글까지 완전히 일치해야 합니다.
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
profile:
store-selected: true
rule-providers:
allow:
type: file
behavior: domain
path: ./ruleset/allow.yaml
ads:
type: file
behavior: classical
path: ./ruleset/ads.yaml
direct-domain:
type: file
behavior: domain
path: ./ruleset/direct-domain.yaml
rules:
- RULE-SET,allow,DIRECT
- RULE-SET,ads,REJECT
- DOMAIN,localhost,DIRECT
- DOMAIN-SUFFIX,local,DIRECT
- DOMAIN-SUFFIX,lan,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
- RULE-SET,direct-domain,DIRECT
- DOMAIN-SUFFIX,gov.cn,DIRECT
- DOMAIN-SUFFIX,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
mixed-port: 7890은 하나의 포트에서 HTTP와 SOCKS5 연결을 모두 수신하므로 데스크톱 클라이언트의 시스템 프록시를 127.0.0.1:7890으로 통일하기 좋습니다. allow-lan: false는 이 예시에서 프록시 포트를 LAN에 개방하지 않는다는 뜻입니다. TV, 휴대폰, 게임기에서 이 컴퓨터에 연결해야 한다면 수신 주소와 방화벽 규칙을 별도로 설정해야 하며, 규칙 목록만 수정해서는 안 됩니다.
로컬 규칙 파일 세 가지
allow.yaml은 광고 목록의 오탐 차단 항목을 덮어쓰는 데 사용합니다. 광고 규칙보다 앞에 있으므로 같은 도메인은 먼저 허용됩니다. domain 동작의 페이로드는 다음과 같이 작성할 수 있습니다.
payload:
- 'login.example.net'
- '+.account.example.net'
ads.yaml은 classical 동작을 사용하며 각 항목에 완전한 규칙 유형을 포함합니다. 광고 목록에는 가능한 한 정확한 도메인과 접미사를 사용하고, 범위가 지나치게 넓은 키워드는 신중하게 사용해야 합니다.
payload:
- DOMAIN,ads.example.net
- DOMAIN-SUFFIX,tracking.example.net
- DOMAIN-KEYWORD,telemetry-example
direct-domain.yaml은 domain 동작을 사용하며 직접 연결할 중국 본토 서비스의 접미사를 저장합니다.
payload:
- '+.gov.cn'
- '+.edu.cn'
- '+.example.cn'
매칭 순서: 허용, 차단, 직접 연결과 폴백
규칙 순서는 단순한 정리 방식이 아니라 최종 출구를 바꿉니다. 권장 순서는 정확한 허용 목록, 광고 거부, LAN 주소, 중국 본토 도메인, 중국 본토 IP, 전용 서비스 정책, 마지막으로 MATCH입니다. 허용 목록을 광고 목록보다 앞에 두면 로그인 API, 인증 코드, 결제 페이지가 서드파티 규칙에 의해 오탐 차단되는 상황을 처리할 수 있습니다.
- 정확한 허용: 반드시 직접 연결하고 광고 규칙에 차단되지 않아야 하는 도메인을 처리합니다.
- 광고 거부: 명확한 광고 및 추적 도메인에 거부 결과를 반환합니다.
- LAN 직접 연결: 라우터, NAS, 프린터, 로컬 개발 서비스가 프록시를 거치지 않도록 합니다.
- 중국 본토 도메인 직접 연결: 먼저 도메인 규칙에 따라 라우팅해 불필요한 IP 판단을 줄입니다.
- 중국 본토 IP 직접 연결: IP로 직접 접속하거나 도메인 규칙에서 빠진 연결을 처리합니다.
- 해외 서비스 그룹: 스트리밍, 코드 호스팅처럼 별도 정책이 필요한 서비스는 MATCH보다 앞에 배치합니다.
- MATCH 폴백: 나머지 연결을 기본 프록시 그룹으로 전달합니다.
GEOIP를 광고 규칙보다 먼저 작성하면 안 되는 이유
광고 도메인이 중국 본토 IP로 해석될 수 있습니다. GEOIP,CN,DIRECT가 광고 규칙보다 앞에 있으면 요청이 먼저 직접 연결로 판정되어 뒤의 RULE-SET,ads,REJECT가 실행되지 않습니다. 광고 도메인 규칙을 GEOIP보다 앞에 배치해야 도메인 기준으로 요청을 우선 거부할 수 있습니다.
DOMAIN-SUFFIX,cn만 사용하는 것을 권장하지 않는 이유
DOMAIN-SUFFIX,cn,DIRECT는 .cn으로 끝나는 많은 사이트를 포함하지만, 중국 본토 서비스가 .com, .net 또는 클라우드 서비스 도메인을 사용할 수도 있습니다. 반대로 해외 서비스가 중국 도메인으로 일부 API를 제공하는 경우도 있습니다. 관리되는 중국 본토 도메인 규칙 집합이 주요 판단을 담당하게 하고, .cn과 GEOIP,CN으로 누락을 보완하는 편이 더 안정적입니다.
구독 업데이트 시 사용자 지정 규칙을 유지하는 방법
구독으로 생성된 YAML 파일을 직접 편집하면 다음 업데이트에서 변경 내용이 덮어써지는 경우가 많습니다. 데스크톱 클라이언트에 “전역 확장 설정”, “오버라이드”, “Merge”, “스크립트” 기능이 있다면 사용자 지정 rule-providers와 규칙 삽입 로직을 오버라이드 계층에 배치해야 합니다. 메뉴 이름은 클라이언트마다 다르지만 보통 「구독」→「편집」→「설정 오버라이드」 또는 「설정」→「구성」→「전역 확장」에서 찾을 수 있습니다.
병합할 때는 먼저 클라이언트가 추가 방식인지 교체 방식인지 확인해야 합니다. rules가 구독 규칙의 끝에 단순히 추가되고 기존 설정에 MATCH가 이미 있으면 새 규칙은 여전히 매칭되지 않습니다. 올바른 결과는 사용자 지정 규칙을 기존 MATCH 앞에 삽입하거나 rules 전체를 명시적으로 교체하는 것입니다.
원본 Clash와 mihomo의 호환 범위
기본적인 DOMAIN, DOMAIN-SUFFIX, DOMAIN-KEYWORD, IP-CIDR, GEOIP, RULE-SET, MATCH는 일반적인 Clash 설정에서 폭넓게 지원됩니다. mihomo는 GEOSITE, 복합 논리 규칙, 규칙 집합 바이너리 형식, 더 세밀한 프로세스 매칭 기능도 제공합니다. 서로 다른 코어에서 설정을 공유해야 한다면 먼저 기본 문법을 유지하고 클라이언트가 지원하는 확장 필드를 추가하세요.
TUN, DNS와 규칙 매칭의 관계
TUN 모드는 브라우저 트래픽뿐 아니라 시스템 프록시를 따르지 않는 애플리케이션, 일부 명령줄 도구와 UDP 연결도 가로챕니다. 이때 클라이언트는 네트워크 패킷, DNS 매핑 또는 스니핑 결과에서 대상 도메인을 복원해야 합니다. 대상 IP만 확인할 수 있다면 DOMAIN-SUFFIX와 domain 유형 RULE-SET은 참여할 수 없고, 연결은 IP-CIDR, GEOIP 또는 MATCH로 넘어갑니다.
fake-ip 모드
mihomo에서 흔히 사용하는 fake-ip DNS 모드는 도메인에 예약 주소를 반환하고 코어에 “가상 IP—원래 도메인” 매핑을 저장합니다. 애플리케이션이 이 가상 주소로 연결해도 코어는 도메인을 다시 확인해 도메인 규칙을 실행할 수 있습니다. LAN 기기 검색, 기업 내부망 또는 실제 DNS 응답에 의존하는 프로그램에 문제가 있다면 DNS 모드 전체를 바꾸기보다 관련 도메인을 fake-ip 필터 목록에 추가하세요.
redir-host 모드
redir-host는 실제 해석 결과를 반환한 뒤 도메인 또는 IP 기준으로 라우팅합니다. 일부 LAN 환경과 특수 애플리케이션에서는 더 직관적이지만, DNS 조회 경로와 실제 연결 경로가 일치해야 합니다. 그렇지 않으면 중국 본토에서 해석된 결과가 해외 프록시로 연결되는 상황이 발생할 수 있습니다. 문제를 확인할 때는 DNS 로그와 연결 로그를 함께 살펴보고 노드 속도 측정 결과만 확인하지 마세요.
권장 테스트 절차
- 클라이언트의 「로그」 페이지에서 레벨을 일시적으로 Info로 설정한 뒤 대상 사이트에 다시 접속합니다.
- 연결 기록에서 Host, Destination IP, Rule, Chain 필드를 확인합니다.
- 광고 도메인이
RULE-SET,ads에 매칭되고 결과가REJECT인지 확인합니다. - LAN 주소가
IP-CIDR에 매칭되고 결과가DIRECT인지 확인합니다. - 중국 본토 사이트가 direct-domain 또는
GEOIP,CN에 매칭되는지 확인합니다. - 분류되지 않은 해외 사이트가 최종적으로 MATCH에 매칭되고 예상한 프록시 그룹으로 들어가는지 확인합니다.
테스트할 때는 한 번에 조건 하나만 변경하세요. 규칙을 조정한 뒤 「구성」→「다시 불러오기」를 실행하고 기존 연결을 닫은 다음 요청을 새로 시작합니다. 브라우저의 지속 연결, HTTP/2 세션, 애플리케이션 연결 풀은 변경 전 출구를 계속 사용할 수 있으므로 페이지 새로고침만으로는 새 규칙이 적용되지 않을 수 있습니다.
자주 발생하는 문제와 확인 방법
설정은 불러와지지만 모든 트래픽이 프록시로 연결됨
먼저 모드가 여전히 Rule인지 확인한 다음 규칙 목록 맨 앞에 MATCH나 범위가 지나치게 넓은 프록시 규칙이 있는지 살펴봅니다. 중국 본토 도메인 규칙에 RULE-SET을 사용한다면 규칙 제공자의 항목 수가 0이 아닌지 확인하고, 로컬 path가 설정 파일이 있는 디렉터리를 기준으로 올바르게 해석되는지도 점검하세요.
광고 규칙을 활성화한 뒤 로그인 또는 결제 페이지가 열리지 않음
연결 기록에서 REJECT된 구체적인 도메인을 찾아 필요한 도메인을 allow 규칙 집합에 추가하고, RULE-SET,allow,DIRECT가 광고 규칙보다 앞에 있도록 합니다. 광고 목록 전체를 비활성화하거나 지나치게 넓은 최상위 도메인을 허용하지 마세요. 로그인 API의 완전한 도메인 또는 최소한의 유효 접미사를 우선 추가합니다.
중국 본토 사이트가 MATCH에 매칭됨
연결 기록에 Host가 남아 있는지 확인합니다. 도메인은 있지만 매칭되지 않는다면 보통 중국 본토 도메인 규칙에 해당 항목이 빠진 경우입니다. 대상 IP만 보인다면 GEOIP 데이터베이스와 DNS 설정을 확인하세요. 규칙에서 사용하는 정책 이름이 실제로 존재하는지도 확인해야 합니다. 일부 클라이언트는 유효하지 않은 정책을 만나면 설정 전체를 불러오지 못할 수 있습니다.
YAML 수정 후 파싱 실패가 표시됨
YAML은 공백으로 들여쓰기해야 하며 탭을 사용할 수 없습니다. rules와 rule-providers는 올바른 계층에 있어야 하고 목록 항목 앞에는 하이픈이 필요합니다. 콜론, 샵 또는 특수 문자가 포함된 도메인 페이로드는 작은따옴표로 감쌀 수 있습니다. 오류 메시지에 줄 번호가 표시되면 바로 앞 줄에 콜론을 빠뜨리지 않았는지도 확인하세요. 실제 오류 위치가 다음 줄로 표시되는 경우가 많습니다.
지연 시간 테스트는 정상인데 웹페이지가 열리지 않음
지연 시간 테스트는 테스트 주소가 특정 프록시 그룹을 통해 연결되는지만 확인할 뿐, 대상 웹페이지가 같은 정책에 매칭된다는 뜻은 아닙니다. 연결 페이지에서 실제 Rule과 Chain을 확인하세요. 요청이 DIRECT, REJECT 또는 다른 전용 그룹에 먼저 처리되었다면 속도 측정 노드를 반복해서 바꾸지 말고 규칙 순서를 조정해야 합니다.