Chapter 01 / Baseline
설정 골격 및 디버깅 기준선
Clash 설정은 서로 독립된 옵션 목록이 아니라 순서가 있는 처리 체인입니다. 클라이언트는 먼저 수신 포트, 실행 모드, DNS 같은 기본 항목을 읽고 프록시 노드와 프록시 그룹을 불러온 다음 규칙과 규칙 세트를 로드합니다. 마지막으로 시스템 프록시 또는 TUN이 트래픽을 커널로 전달합니다. 어느 한 계층에서 존재하지 않는 이름을 참조하면 이후 동작에 영향을 줍니다. 가장 흔한 예는 규칙이 이미 이름을 바꾼 프록시 그룹을 가리키는 경우입니다. 설정 자체는 파싱되더라도 매칭된 트래픽이 예상한 출구를 선택하지 못할 수 있습니다. 따라서 고급 설정의 첫 단계는 옵션을 더 추가하는 것이 아니라, 설명하고 검증하고 되돌릴 수 있는 기준선 설정을 만드는 것입니다.
클라이언트 설정과 커널 설정을 먼저 구분하세요
Clash Plus, Clash Verge Rev, FlClash, Clash Nyanpasu 같은 그래픽 클라이언트는 보통 설정을 두 계층으로 나눕니다. 첫 번째는 앱 자체의 설정으로, 시작 시 자동 실행, 시스템 프록시 전환, 설정 업데이트 주기, 화면 테마, 서비스 설치 상태 등이 해당합니다. 두 번째가 mihomo 커널에 전달되는 YAML입니다. 시스템 프록시 버튼은 일반적으로 구독 파일을 수정하지 않고 운영체제의 프록시 진입점만 바꿉니다. TUN 스위치는 클라이언트가 실행 시 오버라이드 값을 생성할 수 있으므로 원본 구독에서 동일한 필드를 찾지 못할 수도 있습니다. 문제를 확인할 때는 현재 적용된 설정과 구독 원문을 함께 살펴보고, 다운로드한 YAML만 확인해서는 안 됩니다.
디버깅에 적합한 기본 섹션은 간결하게 유지하는 것이 좋습니다. 로그 레벨은 먼저 info를 사용하면 연결, 규칙 매칭, DNS 오류를 확인하기에 충분합니다. 특정 요청을 추적해야 할 때만 일시적으로 debug로 전환하세요. 포트를 명시해야 하는지는 클라이언트 관리 방식에 따라 달라지며, 데스크톱 클라이언트는 시작할 때 자체 포트를 주입할 수 있습니다. 설정 파일을 직접 관리한다면 아래 구조를 사용할 수 있지만, 해당 포트가 다른 프록시 프로그램에서 사용 중이지 않은지 확인해야 합니다.
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
unified-delay: true
profile:
store-selected: true
store-fake-ip: true
mode: rule은 규칙에 따라 직접 연결, 프록시 또는 거부를 결정합니다. unified-delay는 측정 기준을 전체 연결 과정에 가깝게 만들지만 실제 네트워크 품질을 바꾸지는 않습니다. store-selected는 프록시 그룹 선택을 저장하므로 재시작 후 그룹마다 다시 선택할 필요가 없습니다. store-fake-ip는 Fake-IP 매핑을 저장해 재시작 직후 매핑이 바뀌면서 발생하는 연결 변동을 줄입니다. 모바일 환경에서 시스템이 앱 프로세스를 회수할 수 있으므로 영속 설정이 특히 중요하지만, 클라이언트가 정상적으로 백그라운드에서 실행되도록 허용되어 있어야 합니다.
가장 짧은 경로로 검증 흐름을 만드세요
변경할 때마다 먼저 커널이 설정을 불러오는지 확인하고, 다음으로 프록시 노드가 연결을 수립하는지 확인하세요. 그 후 테스트 요청 하나가 어떤 규칙에 매칭됐는지 살펴보고, 마지막으로 대상 앱을 점검합니다. 설정 파싱 단계에서 이미 오류가 발생했다면 노드를 바꿔도 의미가 없습니다. 노드 핸드셰이크가 실패했다면 먼저 구독과 네트워크를 처리하고 DNS부터 수정하지 마세요. 브라우저는 정상인데 특정 앱만 실패한다면 해당 앱이 시스템 프록시를 우회하는지, 독립 DNS나 QUIC을 사용하는지 확인하세요. 이 순서를 따르면 문제를 하나의 계층으로 좁힐 수 있습니다.
| 확인 계층 | 확인되어야 할 결과 | 실패 시 우선 처리할 항목 |
|---|---|---|
| 설정 파싱 | 설정이 정상적으로 로드되고 필드 또는 들여쓰기 오류가 없음 | YAML 들여쓰기, 중복 키, 잘못된 참조 |
| 노드 연결 | 프록시 그룹에 선택 가능한 프록시가 있고 세션을 수립할 수 있음 | 구독 유효성, 네트워크 권한, 프로토콜 매개변수 |
| 규칙 매칭 | 로그에 요청이 예상한 규칙과 정책에 매칭된 것으로 표시됨 | 규칙 순서, 프록시 그룹 이름, 규칙 세트 로드 상태 |
| 시스템 트래픽 연결 | 대상 앱의 트래픽이 시스템 프록시 또는 TUN으로 들어감 | 시스템 프록시, VPN 권한, 라우팅 충돌 |
설정 파일의 들여쓰기에는 공백만 사용하고 탭은 섞지 마세요. 콜론, 샵 또는 특수 문자가 포함된 텍스트는 따옴표로 감쌀 수 있으며, 규칙에서 참조하는 프록시 그룹 이름은 변경 후에도 일관되게 유지해야 합니다. 클라이언트를 바꿔야 한다면 먼저 다운로드 페이지에서 플랫폼에 맞는 항목을 선택하세요. 모든 플랫폼에서는 우선 Clash Plus를 고려하고, 운영체제와 사용 습관에 따라 다른 클라이언트를 선택하면 됩니다. 이전할 때는 같은 구독을 먼저 가져와 기본 연결을 확인한 다음 로컬 오버라이드를 옮기세요. 이전 클라이언트가 생성한 런타임 필드를 범용 설정으로 그대로 복사하지 않는 것이 좋습니다.
Chapter 02 / Policy
프록시 그룹 유형과 조합 방법
프록시 그룹은 노드와 규칙 사이에 위치합니다. 규칙은 보통 특정 노드에 직접 연결하지 않고, 안정적인 프록시 이름으로 요청을 보낸 뒤 프록시 그룹이 사용할 출구를 결정하게 합니다. 이 구조를 사용하면 노드가 바뀌어도 규칙을 유지할 수 있으며, 수동 선택, 자동 속도 측정, 장애 전환과 부하 분산을 서로 다른 계층으로 나눌 수 있습니다. 프록시 그룹을 설계할 때 가장 중요한 원칙은 이름을 명확하게 하고, 계층을 제한하며, 용도를 하나로 유지하는 것입니다. 하나의 그룹이 지역 선택, 서비스 분류, 자동 전환을 동시에 맡으면 당장은 편해 보여도 나중에 어떤 경로가 최종 선택됐는지 파악하기 어렵습니다.
select, url-test, fallback 및 load-balance
select는 수동 선택 그룹으로, 전체 진입점이나 사람이 출구를 고정해야 하는 서비스에 적합합니다. 노드 품질을 자동으로 판단하지 않으므로 현재 노드가 끊겨도 기존 선택이 유지될 수 있습니다. url-test는 지정한 주소로 연결을 테스트하고 결과가 좋은 노드를 선택하므로 일상적인 자동 선택에 적합합니다. fallback은 목록 앞쪽의 사용 가능한 노드를 우선 사용해 주·보조 관계를 명확히 유지하려는 경우에 적합합니다. load-balance는 여러 노드에 연결을 분산하므로 출구 변경을 감수할 수 있는 병렬 요청에 적합하지만, 로그인 세션, 위험 관리가 민감한 서비스, 고정된 출발지 주소가 필요한 서비스에는 대체로 적합하지 않습니다.
proxy-groups:
- name: 전체 선택
type: select
proxies:
- 자동 선택
- 장애 전환
- DIRECT
- name: 자동 선택
type: url-test
use:
- main-provider
url: https://www.gstatic.com/generate_204
interval: 600
tolerance: 80
lazy: true
- name: 장애 전환
type: fallback
use:
- main-provider
url: https://www.gstatic.com/generate_204
interval: 600
lazy: true
interval은 검사 간격입니다. 너무 짧게 설정하면 노드와 기기의 깨우기 빈도가 늘고, 모바일에서는 백그라운드 배터리 소모가 증가할 수 있습니다. 너무 길면 장애 발견이 늦어집니다. tolerance는 비슷한 결과 사이에서 잦은 전환을 줄이는 값으로, 속도를 높이는 기능이 아니라 안정성 임계값입니다. lazy: true는 그룹을 실제로 사용할 때 검사하도록 하며 유휴 상태의 비용을 줄이는 데 적합합니다. 테스트 주소는 가볍고 안정적인 응답을 반환해야 합니다. 파일 다운로드 주소를 상태 확인 대상으로 사용하지 말고, 한 번의 테스트 결과를 장기적인 안정성 판단으로 삼지도 마세요.
프록시 그룹은 서비스 의미에 맞춰 이름을 정하세요
먼저 통합 출구로 사용할 “전체 선택”을 하나 두고, 서비스별로 “스트리밍”, “개발 서비스”, “메신저” 같은 정책을 만드는 방식을 권장합니다. 서비스 그룹 내부에서는 “전체 선택”, 지역 그룹 또는 DIRECT를 참조하고, 규칙은 서비스 그룹만 참조하도록 구성하세요. 이렇게 하면 노드 공급원을 바꿀 때 하위 그룹만 조정하면 되고 규칙 계층은 유지됩니다. 그룹 이름에는 한글을 사용할 수 있지만 이름을 바꿀 때는 rules, rule-providers의 동작 필드와 다른 프록시 그룹의 참조도 함께 확인해야 합니다. 대소문자와 공백도 식별자의 일부이므로 공백 하나만 달라도 다른 이름으로 처리됩니다.
- name: 개발 서비스
type: select
proxies:
- 전체 선택
- 자동 선택
- DIRECT
- name: 스트리밍
type: select
proxies:
- 전체 선택
- 자동 선택
rules:
- DOMAIN-SUFFIX,github.com,개발 서비스
- DOMAIN-SUFFIX,githubusercontent.com,개발 서비스
- MATCH,전체 선택
노드가 많다면 모든 이름을 proxies에 하나씩 적을 필요 없이, 프록시 제공자의 use로 불러온 뒤 필터 표현식으로 범위를 좁힐 수 있습니다. 필터링은 구독에 포함된 노드 이름의 품질에 좌우됩니다. 공급원마다 이름 규칙이 다르면 지역 키워드만으로 잘못 선택할 수 있습니다. 먼저 클라이언트에서 실제 노드 이름을 확인한 다음 필터 조건을 작성하고, 구독을 업데이트한 뒤 새 이름이 추가되지 않았는지도 확인하세요. 테스트 노드, 만료 안내 노드, 배율 표시를 제외할 때는 표현식이 너무 넓어 정상 노드까지 사라지지 않도록 주의해야 합니다.
| 그룹 유형 | 적합한 용도 | 주요 한계 |
|---|---|---|
| select | 수동 출구 고정, 전체 진입점, 서비스 선택 | 장애 노드를 자동으로 우회하지 않음 |
| url-test | 일상적인 자동 선택, 노드가 많은 구독 | 테스트 결과가 실제 서비스 체감 품질과 같지는 않음 |
| fallback | 명확한 주·보조 순서, 안정적인 출구 | 목록 순서를 계속 관리해야 함 |
| load-balance | 고정 출구가 필요 없는 병렬 연결 | 세션 또는 출발지 주소가 바뀔 수 있음 |
프록시 그룹 문제는 참조 관계부터 확인해야 합니다. 먼저 규칙이 매칭한 그룹 이름을 확인한 뒤 해당 그룹에서 현재 선택 항목을 열고 실제 노드까지 아래로 추적하세요. 자동 그룹이 전환되지 않는 것처럼 보이면 테스트 주소에 연결할 수 있는지, 검사 간격이 아직 지나지 않았는지, 클라이언트가 백그라운드 활동을 일시 중지했는지 확인합니다. 특정 서비스가 계속 다시 로그인한다면 부하 분산 그룹에서 고정 출구 그룹으로 옮겨 테스트하세요. 정책 계층의 목표는 자동화를 겹겹이 쌓는 것이 아니라, 모든 선택을 로그와 그룹 구조로 설명할 수 있게 만드는 것입니다.
Chapter 03 / Rules
규칙 세트 구독으로 관리하기
규칙이 수십 개에서 수백 개로 늘어나면 모든 내용을 주 설정에 계속 넣는 방식은 빠르게 유지 관리가 어려워집니다. rule-providers는 주제별 규칙을 독립 리소스로 분리하고, 주 설정에서 다운로드 주소, 형식, 업데이트 주기와 매칭 동작을 선언할 때 사용합니다. 주 파일에는 호출 순서만 남기고 규칙 내용은 해당 규칙 세트가 관리하게 됩니다. 광고 차단, 로컬 네트워크, 개발 서비스 또는 스트리밍 규칙을 각각 업데이트할 수 있고, 특정 규칙 세트에 문제가 생겨도 전체 구독을 다시 작성하지 않고 빠르게 비활성화할 수 있습니다.
provider 정의와 RULE-SET 호출
규칙 제공자의 이름은 로컬 참조용 식별자일 뿐이며, 실제 파싱에 영향을 주는 것은 behavior, format과 리소스 내용입니다. behavior: domain은 도메인 항목만 포함된 모음에 적합하고, ipcidr은 IP 대역을 대상으로 하며, classical은 유형 접두사가 붙은 고전 규칙을 담을 수 있습니다. 형식은 원격 파일과 일치해야 합니다. 일반 텍스트 규칙은 text, YAML 규칙은 yaml을 사용할 수 있습니다. classical 형식의 내용을 domain으로 선언하지 마세요. 로드에 성공했다고 해서 매칭 의미까지 올바른 것은 아닙니다.
rule-providers:
private-domain:
type: http
behavior: domain
format: yaml
path: ./ruleset/private-domain.yaml
url: https://example.com/rules/private-domain.yaml
interval: 86400
developer:
type: http
behavior: classical
format: text
path: ./ruleset/developer.list
url: https://example.com/rules/developer.list
interval: 86400
rules:
- RULE-SET,private-domain,DIRECT
- RULE-SET,developer,개발 서비스
- GEOIP,LAN,DIRECT,no-resolve
- MATCH,전체 선택
예시 도메인은 필드 구조만 보여 주므로, 실제 사용 시에는 접근 가능 여부와 콘텐츠 신뢰성을 확인한 규칙 공급원으로 바꿔야 합니다. path는 로컬 캐시 위치이며, 서로 다른 provider가 같은 경로를 공유해서는 안 됩니다. interval은 초 단위입니다. 공용 규칙은 보통 몇 분마다 업데이트할 필요가 없으며, 지나치게 잦은 업데이트는 요청과 쓰기 작업만 늘립니다. 업데이트에 실패해도 커널은 일반적으로 기존 캐시를 계속 사용하므로, 문제를 확인할 때는 “최초 다운로드 실패”와 “업데이트는 실패했지만 이전 규칙이 계속 적용되는 상태”를 구분해야 합니다. 캐시를 삭제한 뒤 재시도하면 이 복구 조건을 잃게 되므로 첫 단계로 수행하지 마세요.
규칙 순서가 곧 우선순위입니다
Clash는 위에서 아래로 내려가며 처음 매칭되는 규칙을 찾고, 매칭되면 이후 규칙을 더 확인하지 않습니다. 구체적인 규칙은 포괄적인 규칙보다 앞에 배치해야 합니다. 사설 도메인과 로컬 네트워크는 보통 먼저 직접 연결하고, 서비스 도메인은 해당 정책으로 보내며, IP 규칙은 주소 확인이 필요한 위치에 배치하고, 마지막에 MATCH로 나머지 트래픽을 처리합니다. 넓은 범위의 프록시 규칙을 맨 위에 두면 뒤에 있는 직접 연결 예외는 영원히 실행되지 않습니다. 잘못된 분기 문제를 확인할 때는 도메인이 어떤 분류에 속하는지 추측하기보다 로그에서 “어떤 규칙에 매칭됐는지” 확인하는 편이 정확합니다.
no-resolve는 IP 규칙을 매칭할 때 IP를 얻기 위해 DNS 조회를 능동적으로 수행하지 않도록 합니다. 불필요한 조회를 줄일 수 있지만 모든 규칙 뒤에 기계적으로 추가해서는 안 됩니다. 도메인 요청에 앞선 도메인 규칙이 없고 이후 GEOIP 판단에 의존한다면, 조회를 완전히 막아 해당 규칙에 필요한 주소를 얻지 못할 수 있습니다. 추가 여부는 규칙 유형과 DNS 모드에 따라 결정하세요. 대상 IP를 이미 직접 알고 있는 연결은 IP 규칙으로 정상 매칭할 수 있습니다.
로컬의 소수 예외는 rules 맨 위에 직접 작성하면 됩니다. 서너 개 항목을 위해 원격 규칙 세트를 만들 필요는 없습니다. 특정 업무 도메인을 반드시 직접 연결하거나 어떤 앱의 API를 “개발 서비스”에 고정해야 한다면, 구독 규칙 세트보다 앞에 해당 규칙을 배치하세요. 예외가 계속 늘어나면 로컬 provider로 옮기면 됩니다. 이렇게 하면 주 설정의 가독성을 유지하면서 사소한 변경마다 원격 파일을 배포하지 않아도 됩니다.
rules:
- DOMAIN,router.local,DIRECT
- DOMAIN-SUFFIX,corp.example,DIRECT
- DOMAIN-SUFFIX,github.com,개발 서비스
- RULE-SET,private-domain,DIRECT
- RULE-SET,developer,개발 서비스
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- MATCH,전체 선택
규칙 세트 장애를 확인하는 순서
먼저 provider 상태가 로드를 완료했는지 확인하고, 원격 응답 내용이 선언한 형식과 일치하는지 살펴보세요. 그다음 규칙 세트 이름이 RULE-SET 참조와 일치하는지 확인하고 마지막으로 호출 위치를 점검합니다. 상태는 정상인데 전혀 매칭되지 않는다면 동작 유형이 잘못되었거나, 앞선 포괄 규칙에 가로막혔거나, 대상 연결이 IP만 노출하는데 규칙 세트에는 도메인만 있는 것이 흔한 원인입니다. 업데이트 후 잘못된 분기가 급증했다면 이전 로컬 캐시를 복원하거나 해당 규칙 세트를 일시적으로 주석 처리해 문제가 상위 공급원 변경에서 비롯됐는지 확인하세요.
규칙 공급원이 많아질수록 업데이트 주기와 이름을 통일하기 어려워집니다. 더 안정적인 구조는 용도에 맞는 소수의 규칙 세트만 선택하고, 각 서비스에 하나의 주요 공급원만 두며, 로컬 예외를 최우선으로 배치하는 것입니다. 범위가 비슷한 전체 규칙 세트를 여러 개 동시에 추가한 뒤 순서가 충돌을 자동으로 해결해 주기를 기대하지 마세요. 여러 기기에서 동기화해야 한다면 다중 기기 설정 동기화 방법을 참고해 주 설정, 구독 링크와 로컬 규칙을 분리해 관리하세요.
Chapter 04 / DNS
DNS 설정 최적화 및 누수 점검
DNS는 도메인을 주소로 변환하는 방식을 결정하며, 도메인 규칙이 정확히 매칭되는지에도 직접 영향을 줍니다. Clash의 DNS 모듈을 활성화하면 앱의 조회가 먼저 로컬 리스너로 들어간 뒤 커널이 설정에 따라 상위 리졸버를 선택할 수 있습니다. 여기서 해결해야 할 문제는 세 가지입니다. 조회가 실제로 Clash에 들어오는지, 각 도메인을 어떤 상위 리졸버에 맡길지, 조회 결과가 이후 연결과 일치하는지 확인해야 합니다. 공용 DNS 주소를 많이 나열한다고 안정성이 자동으로 높아지지는 않으며, 오히려 결과 출처와 장애 범위가 불분명해질 수 있습니다.
nameserver, default-nameserver 및 proxy-server-nameserver
nameserver는 기본 상위 리졸버입니다. default-nameserver는 DoH 또는 프록시 서버 자체의 도메인을 조회할 때 사용하므로, 보통 직접 접근 가능한 IP 형식의 리졸버를 지정해 리졸버에 연결하기 위해 다시 도메인 조회가 필요해지는 상황을 피합니다. proxy-server-nameserver는 프록시 노드 도메인을 전용으로 처리해 노드 주소 조회가 서비스 DNS 규칙의 영향을 받지 않게 할 수 있습니다. 구독 노드가 도메인을 사용하고 이 계층의 조회가 실패하면 화면에는 모든 노드가 동시에 사용할 수 없는 것처럼 보일 수 있지만, 원인은 노드 프로토콜이 아닐 수 있습니다.
dns:
enable: true
listen: 0.0.0.0:1053
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
use-hosts: true
respect-rules: true
default-nameserver:
- 223.5.5.5
- 1.1.1.1
nameserver:
- https://dns.alidns.com/dns-query
- https://1.1.1.1/dns-query
proxy-server-nameserver:
- https://dns.alidns.com/dns-query
fake-ip-filter:
- "*.lan"
- "*.local"
- "time.*.com"
- "ntp.*.com"
respect-rules는 DNS 요청이 프록시 규칙을 참고하도록 합니다. 다만 프록시 조회 체인이 이미 작동해야 하므로, 그렇지 않으면 프록시와 조회 중 무엇이 먼저 필요한지 순환 의존이 생길 수 있습니다. 초기 설정에서 상위 리졸버에 접근할 수 없다면 먼저 이 옵션을 끄고 기본 조회를 확인한 뒤 단계적으로 활성화하세요. listen은 클라이언트의 DNS 연결 방식과 맞춰야 합니다. 데스크톱에서 TUN이 연결을 맡는 경우 로컬 네트워크 기기가 해당 포트에 접근하도록 할 필요가 없는 경우가 많습니다. 외부 인터페이스에 바인딩한다면 방화벽과 로컬 네트워크 접근 범위도 함께 확인하세요.
리졸버 수와 fallback 로직
기본 리졸버는 안정적인 공급원 두세 곳이면 대체로 충분합니다. 리졸버마다 반환 주소가 네트워크 위치, CDN 조정, 캐시의 영향을 받을 수 있으므로 목록이 길다고 결과가 더 정확해지는 것은 아닙니다. fallback을 사용한다면 필터 조건도 함께 이해해야 합니다. 그렇지 않으면 모든 조회가 여러 경로로 들어가 대기 시간과 네트워크 요청이 늘어날 수 있습니다. 규칙이 명확한 설정에서는 포괄적인 fallback 판단에 의존하기보다 nameserver-policy로 도메인별 리졸버를 지정하는 편이 설명하기 쉽습니다.
nameserver-policy:
"geosite:private":
- system
"+.corp.example":
- 10.0.0.53
"geosite:cn":
- https://dns.alidns.com/dns-query
정책에서 사용하는 도메인 매칭 방식은 실제 규칙 세트의 처리 능력과 일치해야 합니다. 기업 내부 도메인을 내부 DNS로만 조회할 수 있다면 내부 리졸버로 가는 경로가 직접 연결이거나 사내 네트워크에 도달할 수 있어야 합니다. 내부 리졸버를 일반 nameserver에 넣으면 사무실 네트워크를 벗어난 뒤에도 조회가 계속 시간 초과될 수 있으므로, 특정 접미사에만 적용하는 방식이 더 적절합니다. 시스템에서 다른 VPN, 네트워크 필터 또는 보안 프로그램을 함께 실행한다면 Clash보다 먼저 DNS를 다시 작성하고 있지 않은지도 확인하세요.
DNS 누수는 먼저 관찰 범위를 정의하세요
DNS 누수는 보통 지정된 경로에서 처리되어야 할 조회가 시스템이나 앱에 의해 다른 리졸버로 직접 전송되는 현상을 뜻합니다. 점검할 때는 특정 웹사이트가 보여 주는 리졸버 이름 하나만 보지 말고, 시스템 네트워크 설정, Clash 로그와 패킷 캡처를 함께 확인해야 합니다. 브라우저가 자체 보안 DNS를 사용하거나 모바일 앱이 내장 DoH를 사용할 수도 있습니다. 이런 요청은 일반 HTTPS 트래픽처럼 보이므로 시스템의 53번 포트를 거치지 않을 수 있습니다. 모든 조회를 Clash로 통일하려면 앱 내부의 독립 조회를 끄거나 DoH 도메인을 규칙으로 명확히 처리하세요.
| 현상 | 가능한 단절 지점 | 확인할 작업 |
|---|---|---|
| 모든 노드 도메인 조회 실패 | default 또는 proxy-server-nameserver에 접근할 수 없음 | IP 리졸버로 최소 시작 경로 구성 |
| 브라우저는 정상인데 특정 앱만 실패 | 앱 내장 DNS, QUIC 또는 시스템 프록시 우회 | TUN 연결 상태와 앱 네트워크 설정 확인 |
| 내부 네트워크 도메인 조회 실패 | 내부 DNS가 도메인별로 분기되지 않음 | nameserver-policy 추가 및 라우팅 확인 |
| 조회는 정상인데 잘못된 주소로 연결 | 캐시, CDN 조정 또는 Fake-IP 매핑 이상 | 로그를 대조한 뒤 해당 캐시만 정리 |
DNS를 변경한 뒤에는 설정을 다시 불러오고, 로그에서 DNS 모듈이 정상적으로 리슨하는지 확인한 다음 일반 도메인, 내부 도메인, 노드 도메인을 각각 테스트하세요. 웹페이지가 열리지 않는다고 전체 캐시를 바로 삭제하지 마세요. 시스템 캐시, 브라우저 캐시, Fake-IP 매핑이 동시에 바뀌어 전후 결과를 비교하기 어려워집니다. 클라이언트에는 연결됨으로 표시되지만 인터넷이 전혀 되지 않는다면 연결됐지만 인터넷이 안 될 때의 점검 목록에 따라 노드, 구독, DNS, 시스템 프록시와 TUN을 순서대로 확인하세요.
Chapter 05 / Network stack
TUN 모드와 Fake-IP 연동
시스템 프록시는 프록시 설정을 능동적으로 따르는 앱만 처리할 수 있습니다. 명령줄 도구, 일부 게임, 독립 네트워크 스택을 사용하는 앱, UDP를 직접 전송하는 프로그램은 시스템 프록시를 완전히 우회할 수 있습니다. TUN 모드는 가상 네트워크 인터페이스로 시스템 라우팅을 연결하고 이런 트래픽을 Clash 커널로 보내므로 적용 범위가 더 넓습니다. Fake-IP는 DNS 단계에서 매핑 주소를 반환해 커널이 연결을 받을 때 원래 도메인을 복원하고 도메인 규칙을 실행하도록 합니다. 두 기능은 자주 함께 사용되지만 역할은 다릅니다. TUN은 트래픽을 안으로 들여오고 Fake-IP는 도메인 의미를 보존합니다.
TUN 필드와 시스템 권한
tun:
enable: true
stack: mixed
dns-hijack:
- any:53
- tcp://any:53
auto-route: true
auto-detect-interface: true
strict-route: true
mtu: 1500
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
stack은 TUN이 사용할 네트워크 스택 구현을 결정합니다. 지원되는 커널에서 mixed는 호환성과 성능을 균형 있게 제공하며, 특정 플랫폼에서 문제가 생기면 system 또는 gvisor를 각각 테스트할 수 있습니다. 단, 비교 기준 없이 자주 전환하지 마세요. auto-route는 라우팅을 자동으로 작성하고, auto-detect-interface는 현재 출구 네트워크 인터페이스를 식별하려고 합니다. Wi-Fi, 모바일 네트워크, 유선 네트워크 사이를 전환할 때 이 옵션은 인터페이스를 수동으로 지정하는 부담을 줄입니다. strict-route는 트래픽 우회를 더 엄격하게 막지만 다른 VPN, 가상 머신, 컨테이너 네트워크와 라우팅 충돌을 일으킬 수 있습니다.
TUN을 시작하려면 시스템 수준의 VPN 또는 네트워크 확장 권한이 필요합니다. Windows 클라이언트는 서비스 모드로 네트워크 작업 권한을 높일 수 있고, macOS는 네트워크 확장을 허용해야 하며, Android와 iOS에서는 시스템 VPN 승인이 표시됩니다. 권한을 거부하면 화면의 스위치가 잠시 켜졌다가 다시 꺼질 수 있고, 로그에 장치 생성 또는 라우팅 작성 오류가 나타납니다. 이때 구독을 반복해서 가져와도 소용이 없으므로 먼저 시스템 권한을 처리하세요. macOS의 구체적인 대화상자와 복구 절차는 네트워크 확장 및 키체인 처리 가이드를 참고하세요.
Fake-IP 매핑 과정
Fake-IP 모드는 도메인 조회를 받으면 실제 주소를 앱에 바로 전달하지 않고 예약된 주소 대역에서 매핑 값을 할당합니다. 앱이 해당 주소로 연결하면 커널이 매핑 테이블을 통해 도메인을 복원한 뒤 DOMAIN, DOMAIN-SUFFIX 또는 규칙 세트와 매칭합니다. 앱이 대상 주소만 네트워크 계층에 전달하더라도 Clash가 원래 도메인을 파악할 수 있다는 점이 장점입니다. 매핑 주소는 원격 서버 주소가 아니므로 공용 인터넷 라우팅 테스트에 사용해서는 안 됩니다. 198.18.0.0/16 범위의 결과가 보인다면 일반적으로 Fake-IP가 정상적으로 조회에 참여하고 있다는 뜻입니다.
일부 로컬 네트워크 검색, 시간 동기화, 프린터, 게임 플랫폼 또는 실제 DNS 응답에 의존하는 프로그램은 Fake-IP와 맞지 않으므로 fake-ip-filter에 추가해야 합니다. 필터 범위는 가능한 한 구체적으로 지정하세요. 너무 넓은 도메인 집합을 제외하면 많은 요청이 실제 주소 모드로 돌아가 도메인 복원 효과가 약해지고 IP 매칭 규칙에 의존하게 될 수 있습니다. 호환성 문제가 생기면 먼저 로그에서 도메인을 확인하고 접미사 하나씩 추가하며 다시 테스트하세요. 출처가 불분명한 긴 필터 목록을 그대로 복사하지 마세요.
MTU, UDP 및 네트워크 전환
페이지는 열리지만 일부 이미지, 업로드 또는 특정 앱이 멈춘다면 경로 MTU가 맞지 않을 수 있습니다. TUN 캡슐화는 추가 오버헤드를 만들며, 하위 네트워크에 이미 VPN, PPPoE 또는 모바일 네트워크 제한이 있다면 1500바이트에서 단편화나 패킷 손실이 발생할 수 있습니다. 다른 설정은 유지한 채 MTU를 단계적으로 낮춰 보세요. 예를 들어 1400 안팎부터 테스트하고 문제가 안정적으로 사라지는지 관찰할 수 있습니다. MTU가 작을수록 안전한 것은 아닙니다. 너무 작으면 패킷 수와 처리 비용이 늘어나므로 효과를 확인한 뒤 안정적으로 작동하는 가장 큰 값을 선택하세요.
UDP 문제는 세 가지 계층으로 나눠 확인해야 합니다. 앱이 UDP를 전송하는지, TUN이 이를 연결하는지, 노드 프로토콜과 네트워크가 해당 전송을 지원하는지입니다. DNS 조회, QUIC, 게임과 음성 통화는 모두 UDP를 사용할 수 있습니다. QUIC을 끈 뒤 브라우저가 복구되었다고 해서 UDP 경로에 문제가 집중되었다는 뜻일 뿐, DNS나 노드 전체를 사용할 수 없다는 의미는 아닙니다. 모바일 기기가 Wi-Fi와 셀룰러 네트워크 사이를 전환한 뒤에는 이전 세션이 기존 인터페이스에 묶여 있을 수 있으므로, 필요하다면 전체 설정을 지우기보다 TUN을 다시 연결하세요.
| 연결 방식 | 적용 범위 | 적합한 환경 |
|---|---|---|
| 시스템 프록시만 사용 | HTTP 또는 SOCKS 프록시 설정을 따르는 앱 | 브라우저, 일반 데스크톱 앱, 권한이 제한된 환경 |
| TUN + redir-host | 더 넓은 TCP/UDP 트래픽, DNS가 실제 주소 반환 | 실제 주소 호환성이 필요한 환경 |
| TUN + Fake-IP | 광범위하게 연결하고 도메인 매칭 기능 유지 | 규칙 분기가 복잡하거나 앱이 시스템 프록시를 우회하는 기기 |
활성화 순서는 다음과 같습니다. 먼저 시스템 프록시로 노드와 규칙이 정상인지 확인하고, 그다음 TUN만 켜서 라우팅과 권한을 확인한 뒤, 마지막으로 Fake-IP를 활성화하고 소수의 호환성 예외를 처리하세요. TUN을 켠 뒤 기기 전체가 인터넷에 연결되지 않으면 먼저 TUN을 꺼서 네트워크를 복구한 다음 기본 라우팅, DNS 가로채기, 다른 VPN을 확인하세요. Windows 서비스 모드, 포트 충돌과 시스템 프록시 설정은 Windows 설치 및 설정 전체 과정에서 확인할 수 있습니다.
Chapter 06 / Sniffer
도메인 스니핑 및 규칙 복원
일부 연결은 Clash에 들어올 때 대상 IP만 포함하고, 도메인 규칙에 바로 사용할 호스트 이름은 포함하지 않습니다. 도메인 스니핑은 TLS ClientHello의 SNI나 HTTP 요청의 Host처럼 연결 초기에 식별할 수 있는 정보를 확인한 뒤 얻은 도메인을 규칙 매칭에 사용합니다. 전체 서비스 콘텐츠를 읽는 기능은 아니며 모든 연결에서 도메인을 복원할 수 있는 것도 아닙니다. 암호화된 클라이언트 핸드셰이크, 비표준 프로토콜, IP를 직접 사용하는 요청, 일부 UDP 트래픽에는 스니핑할 적절한 필드가 없을 수 있습니다.
기본 설정과 프로토콜 범위
sniffer:
enable: true
force-dns-mapping: true
parse-pure-ip: true
override-destination: false
sniff:
HTTP:
ports:
- 80
- 8080-8880
override-destination: true
TLS:
ports:
- 443
- 8443
QUIC:
ports:
- 443
skip-domain:
- "+.push.apple.com"
- "Mijia Cloud"
parse-pure-ip는 IP만 표시되는 대상에서 프로토콜 특징을 분석하려고 시도합니다. force-dns-mapping은 Fake-IP 매핑과 함께 사용해 연결과 DNS 조회 사이의 관계를 복원하는 데 도움을 줍니다. override-destination은 스니핑한 도메인으로 대상을 다시 쓸지 결정합니다. 전체 재작성을 켜면 도메인 규칙 매칭이 개선될 수 있지만 원래 주소에 의존하는 연결에서 호환성 문제가 생길 수도 있습니다. 따라서 전역에서는 끄고 HTTP처럼 적합하다고 확인된 프로토콜 범위에서만 활성화하는 편이 안전합니다.
포트 범위를 무한히 넓혀서는 안 됩니다. HTTP 스니핑은 명확한 웹 포트를 대상으로 하고, TLS는 주로 443과 서비스에서 사용하는 암호화 포트를 확인하며, QUIC은 UDP 443에 집중합니다. 모든 포트를 모든 프로토콜 분석기에 맡기면 불필요한 판단이 늘고 비표준 바이너리 프로토콜을 잘못 인식할 수 있습니다. 특수 포트를 사용하는 서비스가 있다면 먼저 로그에서 프로토콜과 포트를 확인한 뒤 범위를 추가하세요. 포트 범위를 넓힌다고 실제로 확인할 수 있는 정보가 늘어나는 것은 아니며, 분석 시도만 증가합니다.
스니핑과 Fake-IP의 관계
Fake-IP는 DNS를 통해 시작된 대부분의 연결에 도메인을 보존할 수 있으므로, 스니핑은 보완 경로에 가깝습니다. 앱이 시스템 DNS를 우회하거나 캐시된 IP에 직접 연결하거나 연결 정보가 매핑과 연결되지 않을 때 스니핑으로 도메인을 다시 얻을 수 있습니다. 두 기능을 동시에 켠다고 같은 작업을 중복 수행하는 것은 아닙니다. Fake-IP는 조회 단계에서 매핑을 만들고, 스니핑은 연결 단계에서 프로토콜 메타데이터를 관찰합니다. 규칙 매칭을 확인할 때는 로그에서 최종적으로 매핑 도메인, 스니핑 도메인, 원본 IP 중 무엇이 사용됐는지 살펴보세요.
스니핑을 끈 상태에서 특정 서비스가 항상 MATCH로 빠지고, 켠 뒤 도메인 규칙에 매칭된다면 원래 연결에 사용할 수 있는 도메인 정보가 없었다는 뜻입니다. 반대로 켠 뒤 잘못된 정책으로 전송된다면 스니핑된 도메인이 공유 CDN, 리디렉션 도메인 또는 서드파티 API에 해당하는지 확인하세요. 하나의 앱이 여러 도메인에 동시에 접속할 수 있으므로 대표 사이트 도메인만 보고 모든 연결을 판단해서는 안 됩니다. 로그 레벨을 잠시 높여 짧게 테스트한 다음 info로 되돌려 장시간 많은 연결 세부 정보가 기록되지 않게 하세요.
제외 목록과 호환성 경계
skip-domain은 재작성이나 분석에 적합하지 않다고 확인된 도메인을 제외할 때 사용합니다. 항목은 실제 장애 검증에서 도출해야 하며, 처음부터 넓은 목록을 한꺼번에 추가해서는 안 됩니다. 일부 장치 검색 및 푸시 서비스는 인증서 도메인, 연결 주소와 서비스 식별자가 완전히 일치하지 않는 방식으로 동작하므로 잘못된 재작성으로 연결이 반복될 수 있습니다. 제외 항목을 추가한 뒤에는 새 규칙에 따라 연결이 다시 만들어지도록 해당 앱을 재연결하세요.
| 로그에 나타나는 현상 | 설명 | 다음 단계 |
|---|---|---|
| 대상 IP만 표시됨 | 도메인을 얻지 못했거나 스니핑할 수 없는 프로토콜 | DNS 연결 방식, 프로토콜과 포트 범위 확인 |
| 도메인을 얻었지만 여전히 MATCH에 매칭됨 | 규칙에 해당 도메인이 없거나 앞선 규칙에 가로막힘 | 실제 도메인을 확인하고 규칙 위치 조정 |
| 재작성 활성화 후 연결 실패 | 대상이 원본 주소에 의존하거나 식별 결과가 재작성에 부적합함 | 전역 재작성을 끄거나 정확한 제외 항목 추가 |
| 브라우저는 정상인데 QUIC만 비정상 | UDP 경로, 노드 기능 또는 QUIC 스니핑 문제 | QUIC을 꺼서 비교하고 TUN의 UDP 처리 확인 |
스니핑 설정을 검증할 때는 규칙이 명확한 도메인 하나를 선택하세요. 먼저 스니핑을 끈 상태의 매칭 결과를 기록하고, 다시 켠 뒤 연결을 새로 만들어 비교합니다. DNS, 규칙 세트와 대상 정책을 동시에 변경하지 마세요. 어느 계층에서 변화가 생겼는지 판단할 수 없게 됩니다. 시스템 프록시 모드에서 브라우저만 테스트하면 브라우저가 이미 도메인을 프록시에 제공하는 경우가 많아 스니핑 차이가 작을 수 있습니다. 스니핑은 TUN 연결, 순수 IP 연결, 시스템 DNS 우회 환경에서 더 유용합니다.
도메인 스니핑은 규칙 설계를 대신할 수 없습니다. 도메인을 복원한 뒤에도 구체적인 규칙이 포괄적인 규칙보다 앞에 있어야 하며 해당 프록시 그룹도 존재해야 합니다. 앱이 동적 하위 도메인에 많이 접근한다면 완전한 도메인을 계속 추가하기보다 검증된 접미사 규칙이나 규칙 세트를 우선 사용하세요. 관련 용어는 용어 가이드에서 확인할 수 있으며 SNI, Fake-IP, TUN과 규칙 모드의 관계를 설명합니다.
Chapter 07 / Merge
로컬 오버라이드 및 다중 구독 병합
구독은 원격에서 관리되는 노드와 기본 설정을 제공하고, 로컬 오버라이드는 기기나 개인 환경에만 필요한 조정을 저장합니다. 두 내용을 같은 파일에서 직접 수정하면 다음 구독 업데이트에서 로컬 내용이 덮어써질 수 있고, 완전히 정적인 설정으로 복사하면 노드 업데이트를 잃게 됩니다. 더 나은 구조는 구독을 상위 입력으로 두고 포트, DNS, 프록시 그룹 추가, 규칙 우선 배치와 TUN 설정을 반복 적용 가능한 오버라이드 계층에 넣는 것입니다. 클라이언트마다 오버라이드 기능의 이름은 Merge, Mixin, Script 또는 전역 확장 등으로 다를 수 있지만, 업데이트 후 적용 설정을 다시 생성한다는 목표는 같습니다.
교체, 추가와 깊은 병합을 구분하세요
YAML 객체는 키 기준으로 병합할 수 있지만 배열은 의미가 다를 수 있습니다. dns.enable을 수정하면 보통 단일 필드만 교체하지만, rules는 규칙을 앞에 추가할지, 뒤에 추가할지, 배열 전체를 교체할지 명확히 해야 합니다. 병합기가 새 배열로 기존 배열을 직접 덮어쓰면 로컬 규칙 세 개만 포함한 오버라이드가 구독의 기존 규칙을 모두 없앨 수 있습니다. 클라이언트 내장 병합 기능을 사용하기 전에는 오버라이드 조각이 저장됐는지만 보지 말고 최종 적용 설정을 확인하세요.
prepend-rules:
- DOMAIN,router.local,DIRECT
- DOMAIN-SUFFIX,corp.example,DIRECT
append-rules:
- MATCH,전체 선택
override:
mode: rule
log-level: info
ipv6: false
위 구조는 “앞에 추가, 뒤에 추가, 교체”라는 세 가지 의도를 설명하기 위한 것입니다. 구체적인 키 이름은 클라이언트의 병합 구현에 따라 달라지므로 확인 없이 mihomo 기본 설정으로 바로 불러와서는 안 됩니다. mihomo가 최종적으로 받는 것은 완전한 설정 한 부입니다. 검증하려면 클라이언트가 생성한 런타임 설정을 열어 로컬 규칙이 예상 위치에 있는지, 프록시 그룹이 중복되지 않았는지, 최종적으로 MATCH가 하나만 남았는지 확인하세요. 클라이언트에 설정 검사 기능이 있다면 업데이트마다 한 번씩 실행하는 것이 좋습니다.
다중 구독 병합은 노드 계층 중심으로 구성하세요
여러 구독을 동시에 사용할 때는 보통 각각을 서로 다른 proxy-providers로 선언하고, 로컬 프록시 그룹에서 use로 불러오는 방식이 가장 안정적입니다. 여러 완전한 설정 파일을 직접 이어 붙이면 각 파일에 포트, DNS, 프록시 그룹과 규칙이 들어 있어 같은 키가 덮어쓰이고 같은 그룹이 충돌할 수 있으며, 최종 결과가 병합 도구의 구현에 따라 달라집니다. 노드 제공자는 노드 모음만 담당하고, 로컬 주 설정은 정책과 규칙을 통합해 역할을 분명히 유지하세요.
proxy-providers:
primary:
type: http
url: https://example.com/subscription/primary
path: ./providers/primary.yaml
interval: 86400
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 600
backup:
type: http
url: https://example.com/subscription/backup
path: ./providers/backup.yaml
interval: 86400
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 900
proxy-groups:
- name: 전체 선택
type: select
use:
- primary
- backup
proxies:
- DIRECT
예시의 구독 주소는 구조를 보여 주기 위한 것이므로 실제 사용 시 자신의 유효한 주소로 바꾸고, 접근 인증 정보가 포함된 링크를 문서, 스크린샷 또는 공유 저장소에 공개하지 마세요. 두 provider는 서로 다른 캐시 경로를 사용해야 합니다. 상태 확인 간격은 기기와 노드 수에 맞춰 조정할 수 있지만, 모바일에서는 많은 노드를 높은 빈도로 조회하지 않는 것이 좋습니다. 상위 노드 이름이 중복되면 화면에서 출처를 구분하기 어려우므로, 병합 계층에서 클라이언트가 지원하는 접두사 기능을 사용하거나 provider별로 독립된 지역 그룹에 넣으세요. 긴 목록에 바로 섞어 넣는 방식은 피하는 편이 좋습니다.
업데이트 실패와 설정 드리프트
다중 구독 환경에서 흔한 문제는 특정 설정을 불러오지 못하는 것이 아니라, 시간이 지나면서 기대한 상태에서 조금씩 벗어나는 것입니다. 상위 공급원이 노드 이름을 바꾸면 필터 표현식이 무효화될 수 있고, 특정 지역이 삭제되면 프록시 그룹이 빈 그룹이 될 수 있으며, 같은 이름의 노드가 추가되면 수동 선택이 다른 출처를 가리킬 수 있습니다. 업데이트 후에는 provider 상태, 프록시 그룹 구성원 수의 적정성, 핵심 서비스 규칙이 여전히 존재하는 그룹을 가리키는지 확인하세요. 감시 조건으로 임의의 고정 노드 수를 사용하지 말고 “그룹이 비어 있는지”, “참조 대상이 존재하는지”, “핵심 요청이 매칭되는지”에 집중하세요.
여러 기기에서 동기화할 때 클라이언트 전체 데이터 디렉터리를 그대로 동기화하는 것은 권장하지 않습니다. 데스크톱과 모바일은 권한, 경로, TUN 인터페이스 이름, 캐시 위치가 서로 다릅니다. 동기화하기에 적합한 것은 구독 진입점, 로컬 주 설정 템플릿, 규칙 세트와 오버라이드 로직이며, 기기 전용 항목은 각 클라이언트에 남겨 두세요. WebDAV, 구독 배포와 수동 가져오기의 차이는 Clash 다중 기기 설정 동기화 방법에서 더 확인할 수 있습니다.
| 내용 | 원격 관리에 적합 | 로컬 보관에 적합 |
|---|---|---|
| 노드 모음 | 구독 또는 proxy-provider | 임시 테스트 노드 |
| 공용 규칙 세트 | rule-provider | 소수의 기기 및 내부 네트워크 예외 |
| 프록시 그룹 골격 | 관리되는 주 설정 | 수동 선택 상태 및 기기별 차이 |
| TUN, 포트, 권한 관련 항목 | 일반적으로 플랫폼 간 직접 동기화하지 않음 | 기기와 운영체제별로 관리 |
Chapter 08 / Controller
외부 제어 패널 및 운영 관리
mihomo는 외부 제어 인터페이스를 제공하며, 클라이언트 화면과 브라우저 제어 패널은 이를 통해 프록시 그룹을 읽고 노드를 전환하고 연결을 확인하며 provider를 새로고침하고 로그를 살펴볼 수 있습니다. 제어 인터페이스는 실행 중인 커널을 관리할 뿐 설정 파일을 대신하지는 않습니다. 패널에서 프록시를 임시로 전환하면 즉시 적용되지만, 규칙 추가, DNS 조정, TUN 매개변수 변경은 설정을 수정하고 다시 불러와야 합니다. 제어 인터페이스를 설정 편집기가 아니라 실행 상태에 접근하는 창구로 이해하는 편이 정확합니다.
리스닝 주소, 키와 접근 범위
external-controller: 127.0.0.1:9090
secret: "your-password"
external-ui: ./ui
external-ui-name: dashboard
로컬에서만 사용할 때는 제어 주소를 127.0.0.1에 바인딩해야 합니다. 0.0.0.0으로 설정하면 다른 네트워크 인터페이스의 연결도 허용하므로, 로컬 네트워크에서 관리해야 하고 방화벽을 구성한 경우에만 사용하세요. secret은 인터페이스 인증에 사용되며 직접 생성한 별도 값을 사용해야 합니다. 구독 접근 정보나 다른 계정과 공유하지 마세요. 패널 페이지와 제어 인터페이스를 서로 다른 위치에 배치할 수 있지만, 브라우저가 인터페이스 주소에 접근할 수 있어야 하며 프로토콜, 보안 컨텍스트와 교차 출처 조건도 충족해야 합니다.
원격 관리를 위해 제어 포트를 공용 네트워크에 직접 노출해서는 안 됩니다. 신뢰할 수 있는 로컬 네트워크에서 접근하거나, 먼저 관리되는 보안 터널을 통해 기기 네트워크에 들어가는 방식이 더 안전합니다. 집의 라우터에서 실행 중인 Clash 상태만 확인하면 된다면 허용 출발지 주소를 제한하고 방화벽 규칙을 유지하세요. 제어 인터페이스로 출구를 전환하고 연결을 종료하며 실행 정보를 읽을 수 있으므로 접근 범위는 라우터 관리 페이지와 같은 수준으로 신중하게 관리해야 합니다.
연결 페이지와 로그를 함께 활용하는 방법
연결 목록에는 보통 출처, 대상, 프로토콜, 규칙, 정책 체인과 트래픽 상태가 표시됩니다. 특정 앱을 점검할 때는 먼저 관찰 범위를 비우거나 대상을 기준으로 필터링한 뒤 요청을 다시 발생시키세요. 정책 체인은 요청이 어떤 서비스 그룹으로 들어가 최종적으로 어떤 노드에 도달했는지 보여 주고, 규칙 필드는 어떤 규칙이 매칭을 완료했는지 알려 줍니다. 페이지는 열리지 않는데 연결 목록에 기록이 전혀 없다면 문제가 커널에 트래픽이 들어오기 전에 발생한 것이므로 시스템 프록시, TUN 라우팅 또는 앱 자체의 프록시 설정으로 돌아가 확인해야 합니다.
일상적으로는 로그 레벨을 info로 유지하는 것이 좋습니다. DNS, 핸드셰이크 또는 스니핑 세부 정보를 확인해야 할 때만 잠시 debug로 전환하고 한 번 재현한 뒤 즉시 되돌리세요. 상세 로그를 장시간 켜 두면 출력량이 늘고 실제 오류가 정상 기록에 묻힐 수 있습니다. 로그를 공유하기 전에는 구독 주소, 내부 도메인, 대상 주소와 인증 필드를 확인하고 장애가 발생한 시간대의 관련 부분만 추출하세요.
provider 새로고침 및 정책 상태
제어 패널에서는 보통 프록시 provider와 규칙 provider를 수동으로 새로고침할 수 있습니다. 새로고침 버튼은 해당 리소스의 업데이트만 실행하며 전체 설정을 다시 불러오는 작업은 아닙니다. 프록시 provider를 업데이트하면 새 노드가 이를 참조하는 프록시 그룹에 들어가지만 현재 연결이 모두 자동으로 이동하지는 않습니다. 규칙 provider를 업데이트하면 새 요청부터 새 규칙으로 매칭되며 기존 장기 연결은 이전 정책을 유지할 수 있습니다. 업데이트 결과를 확인할 때는 테스트 연결을 새로 만들고 provider의 마지막 오류 상태를 확인하세요. 버튼의 회전 표시가 끝났는지만 보아서는 안 됩니다.
선택한 정책을 저장하려면 profile.store-selected와 클라이언트 데이터 디렉터리 권한이 필요합니다. 재시작할 때마다 기본 노드로 돌아간다면 먼저 이 필드가 최종 설정에 있는지 확인하고, 클라이언트가 실행 디렉터리에 쓸 수 있는지도 점검하세요. 여러 설정이 같은 그룹 이름을 사용하면 저장된 상태 때문에 전환 후 결과가 기본 설정과 다르게 보일 수도 있습니다. 테스트할 때는 이름이 명확한 새 그룹을 만들어 저장 기능이 정상인지 확인한 뒤 이전 상태를 처리하세요.
| 패널 기능 | 적합한 용도 | 대체할 수 없는 작업 |
|---|---|---|
| 정책 전환 | 즉시 출구 선택 및 비교 테스트 | 프록시 그룹 구조 설계 |
| 연결 확인 | 규칙, 정책 체인과 프로토콜 확인 | 시스템 계층 패킷 캡처 및 라우팅 점검 |
| Provider 새로고침 | 노드 모음 또는 규칙 리소스 업데이트 | 전체 설정 다시 로드 |
| 로그 관찰 | 조회, 연결과 규칙 오류 확인 | 장기 성능 결론 |
반복 가능한 유지 관리 순서
일상적인 관리는 네 단계로 고정할 수 있습니다. 먼저 구독과 provider를 업데이트하고 모든 리소스가 로드됐는지 확인합니다. 다음으로 “전체 선택”과 핵심 서비스 그룹에 여전히 사용 가능한 구성원이 있는지 확인합니다. 이어서 도메인 요청 하나와 TUN이 필요한 앱 하나로 규칙 체인을 점검합니다. 마지막으로 평소 로그 레벨로 되돌리고 현재 정상 작동하는 설정을 내보냅니다. 업데이트 후 문제가 생기면 변경 범위를 먼저 비교하세요. 노드만 바뀌었다면 provider와 프록시 그룹을 확인하고, 규칙 세트만 바뀌었다면 매칭 순서를 확인합니다. 클라이언트 업데이트나 시스템 네트워크 변경 뒤에는 권한과 라우팅을 우선 점검하세요.
제어 패널에 연결할 수 없을 때는 먼저 커널이 계속 실행 중인지 확인한 뒤 제어 주소, 포트 사용 여부와 키를 점검하세요. 브라우저에서 로컬 패널로 원격 기기의 인터페이스에 접속하는 경우 주소가 브라우저가 실행되는 기기의 127.0.0.1로 잘못 입력되지 않았는지도 확인해야 합니다. 클라이언트에 자체 제어 페이지가 내장되어 있다면 내장 진입점을 우선 사용하세요. 현재 포트와 인증 정보를 자동으로 처리하는 경우가 많습니다. 클라이언트를 다시 선택해야 한다면 선택 가이드에서 플랫폼별 차이를 확인하고, 설치 파일은 모두 다운로드 페이지에서 받으세요.
다음 단계
한 번에 하나의 변수만 조정하세요
현재 문제에 해당하는 장에서 변경 하나만 선택하고, 다시 불러온 뒤 로그와 연결 페이지로 결과를 확인하세요. 기본 작업으로 돌아가야 한다면 빠른 시작 튜토리얼을 확인하고, 전문 용어를 대조하려면 용어 가이드를 여세요. 클라이언트에는 연결됨으로 표시되지만 네트워크가 끊겼다면 단계별 점검 목록으로 단절 지점을 찾으세요.