01 · DECISION MODEL
프로토콜 선택은 이름의 신구보다 제약 조건부터 확인
프로토콜, 전송 방식, 클라이언트는 서로 다른 세 계층입니다
Clash 클라이언트에서 노드 이름을 보더라도 이름만으로 기술 조건을 알 수 있는 경우는 드뭅니다. 실제 연결 동작을 결정하는 것은 프로토콜 유형, 전송 방식, 암호화 또는 인증 매개변수와 서버 측 구현입니다. SS, VMess, Trojan, VLESS, Hysteria2, TUIC는 프로토콜 계층에 속하고, TCP, WebSocket, gRPC, HTTP/2, QUIC 등은 전송 또는 운반 계층에 속합니다. Clash Plus, Clash Verge Rev, FlClash, Clash Nyanpasu, Clash Meta for Android 등은 그래픽 클라이언트입니다. 그래픽 클라이언트는 설정 가져오기, 정책 전환, 코어 호출을 담당하며 특정 프로토콜을 실제로 인식할 수 있는지는 클라이언트에 포함된 코어와 설정 파싱 능력에 달려 있습니다.
따라서 ‘특정 클라이언트가 구독 가져오기를 지원한다’고 해서 ‘구독에 포함된 모든 노드를 실행할 수 있다’는 뜻은 아닙니다. 구독 자체는 정상적으로 다운로드되고 파싱되더라도 일부 노드가 현재 코어에서 인식하지 못하는 전송 매개변수를 사용할 수 있습니다. TCP 연결은 성립하지만 인증 필드, TLS 호스트 이름 또는 UDP 설정이 일치하지 않아 핸드셰이크가 완료되지 않는 경우도 있습니다. 선택할 때는 서버가 제공하는 전체 매개변수에서 출발해 클라이언트와 코어가 해당 필드를 지원하는지 확인해야 하며, 노드 이름의 프로토콜 약어만 비교해서는 안 됩니다.
재사용 가능한 판단 기준은 다섯 가지 축으로 구성됩니다
첫 번째는 네트워크 경로입니다. 안정적인 유선 또는 Wi-Fi 환경에서는 복잡한 혼잡 제어를 지나치게 중시할 필요가 없으며, 구조가 단순한 TCP 프로토콜이 문제를 추적하기 쉽습니다. 지연 변동이 크고 무작위 패킷 손실이 발생하거나 기지국을 자주 전환하는 모바일 네트워크에서야 QUIC 기반 프로토콜의 연결 마이그레이션과 손실 복구 설계가 더 큰 가치를 발휘합니다. 두 번째는 기기 리소스입니다. 데스크톱에서는 처리량과 호환성이 중요하지만, 휴대전화에서는 지속적인 깨우기, 백그라운드 유지, 상태 점검과 발열도 고려해야 합니다. 라우터와 소형 서버는 CPU 아키텍처, 메모리와 동시 연결 수의 제약을 받습니다.
세 번째는 트래픽 유형입니다. 웹 탐색은 짧은 연결과 DNS 조회가 많고, 동영상과 대용량 파일은 지속적인 처리량을 중시하며, 음성 통화·실시간 협업·게임은 UDP 트래픽을 만들어 최대 대역폭보다 지연 변동에 민감합니다. 네 번째는 서버 측을 얼마나 제어할 수 있는지입니다. 이미 만들어진 구독만 사용할 수 있다면 매개변수가 완전하고 클라이언트가 안정적으로 인식하는 노드를 우선해야 합니다. 서버와 클라이언트를 함께 조정할 수 있을 때만 혼잡 제어, 인증서, ALPN, UDP 릴레이 같은 세부 옵션을 비교하는 것이 적절합니다. 다섯 번째는 유지 관리 비용입니다. 매개변수가 많을수록 업그레이드, 마이그레이션과 여러 클라이언트 간 재사용 과정에서 필드 차이가 생기기 쉽습니다. 관찰하기 쉽고 되돌릴 수 있는 설정이 이론상 더 빠르지만 원인을 찾기 어려운 조합보다 일상적인 사용에 적합한 경우가 많습니다.
| 판단 기준 | 먼저 확인할 질문 | 흔한 오해 |
|---|---|---|
| 네트워크 경로 | 패킷 손실, 지연 변동, NAT 변경이 자주 발생하는가 | 한 번의 속도 측정만으로 장기 사용할 프로토콜을 결정 |
| 기기 리소스 | 장시간 백그라운드에서 실행되는가, CPU와 배터리에 제약이 있는가 | 데스크톱 결과를 그대로 휴대전화에 적용 |
| 트래픽 유형 | 주로 짧은 연결인가, 지속 다운로드인가, 실시간 UDP인가 | 최대 처리량만 비교 |
| 호환 범위 | 코어, 구독 변환 결과와 서버 측 필드가 일치하는가 | 가져오기에 성공했으니 모든 노드를 사용할 수 있다고 판단 |
| 유지 관리 비용 | 안정적인 폴백 항목과 명확한 오류 로그가 있는가 | 실험용 매개변수를 한꺼번에 너무 많이 추가 |
기준선을 먼저 세운 뒤 대안을 비교
신뢰할 수 있는 선택은 6가지 프로토콜을 동시에 측정하는 데서 시작하지 않습니다. 먼저 매개변수가 완전하고 안정적으로 실행되는 노드 하나를 기준선으로 정하고, 클라이언트·코어·네트워크·DNS·테스트 대상을 고정한 채 프로토콜 노드만 바꿉니다. 연결 설정 시간, 지속 전송, 네트워크 전환 후 복구, 백그라운드 재연결과 로그 오류를 관찰해야 하며 속도 측정 페이지의 순간 수치만 기록해서는 안 됩니다. 모바일에서는 최소한 전면에서 연속 사용, 화면을 끈 백그라운드 유지, Wi-Fi와 모바일 네트워크 전환을 각각 테스트해야 합니다. 세 상태의 스케줄링 방식이 서로 다르기 때문입니다.
규칙 모드와 직접 연결 결과도 비교 기준으로 남겨야 합니다. 특정 웹사이트가 느려진 이유는 규칙이 리소스를 다른 정책 그룹으로 보냈기 때문일 수도 있고 DNS가 다른 주소를 반환했기 때문일 수도 있어 프로토콜 자체의 문제라고 단정할 수 없습니다. 먼저 동일한 대상이 실제로 테스트 노드를 거치는지 확인한 뒤 결론을 내려야 합니다. 선택의 목표는 추상적인 의미에서 ‘가장 빠른 프로토콜’을 찾는 것이 아니라 현재 경로와 기기, 유지 관리 조건에서 오류가 적고 복구 과정이 명확하며 장기 변동을 감당할 수 있는 조합을 찾는 것입니다.
02 · TCP FAMILIES
SS, VMess, Trojan, VLESS의 설계상 선택
SS: 간결한 구조와 명확한 암호화 방식
Shadowsocks는 보통 SS라고 줄여 부릅니다. 핵심 방식은 비교적 가벼운 프로토콜 구조로 프록시 트래픽을 전달하고, 사전 공유 비밀번호와 지정한 암호화 방식으로 데이터를 보호하는 것입니다. 최신 설정에서는 현재 코어가 지원하는 AEAD 방식을 사용하고 서버와 클라이언트의 암호화 방식, 비밀번호, 포트를 완전히 일치시켜야 합니다. SS는 필드가 적어 구독 가져오기와 클라이언트 간 마이그레이션이 비교적 간단하며, 로그에 나타난 실패 원인도 포트·비밀번호·암호화 방식·네트워크 도달 가능성을 차례로 확인하며 추적하기 쉽습니다.
필드가 적다고 모든 SS 노드의 성능이 같은 것은 아닙니다. 서버 구현, 암호화 알고리즘의 하드웨어 가속, UDP 릴레이, 플러그인 매개변수와 기본 네트워크가 결과에 영향을 줍니다. 일부 구독에는 추가 운반 계층을 제공하는 plugin과 plugin-opts가 포함됩니다. 현재 코어가 지정된 플러그인을 지원하지 않으면 server, port, cipher, password가 모두 올바르더라도 노드를 사용할 수 없습니다. 리소스가 제한된 라우터에서는 SS가 이해하기 쉬운 출발점인 경우가 많지만, 암호화 비용은 목표 아키텍처에서 테스트해야 하며 데스크톱 프로세서 결과만으로 추정해서는 안 됩니다.
VMess: 다양한 인증, 시간 및 전송 옵션
VMess는 V2Ray 생태계에서 시작했으며, 설정에는 사용자 식별자, alterId, 암호화 옵션, 네트워크 전송과 TLS 등의 필드가 자주 포함됩니다. 과거 설정에서는 다양한 alterId 값이 보이며, 최신 서버 배포는 더 단순한 조합을 사용하는 경우가 많지만 클라이언트는 이전 구독과의 호환성을 위해 파싱 필드를 유지할 수 있습니다. VMess 인증은 시간 상태에 민감하므로 기기 시간이 크게 어긋나면 인증 실패가 발생할 수 있습니다. 문제를 확인할 때 주소와 사용자 식별자뿐 아니라 시스템 시간이 정상적으로 동기화되는지도 확인하세요.
VMess의 실제 복잡성은 여러 전송 방식을 조합할 수 있다는 점에서 비롯됩니다. TCP, WebSocket, HTTP, gRPC는 경로, 리버스 프록시와 서버 설정에 서로 다른 요구 사항이 있습니다. WebSocket 설정에서는 path와 Host를 확인하고, gRPC에서는 service-name을 확인해야 합니다. TLS를 활성화했다면 servername, 인증서 검증과 ALPN도 점검해야 합니다. 구독 변환 도구가 잘 사용되지 않는 전송 필드를 누락하는 경우가 있어 노드 이름과 기본 정보는 정상인데 핸드셰이크만 계속 실패할 수 있습니다. 이런 문제는 프록시 모드를 계속 바꾸기보다 변환 전후의 단일 노드 설정을 필드별로 비교해 해결해야 합니다.
Trojan: TLS 운반과 인증서 매개변수가 핵심
Trojan은 보통 표준 TLS 연결을 통해 데이터를 전달하며, 인증의 핵심은 비밀번호입니다. 설정 자체는 복잡해 보이지 않지만 TLS 관련 필드가 연결 성립 여부를 결정합니다. server는 실제 연결 주소이고 servername 또는 SNI는 TLS 핸드셰이크의 호스트 이름입니다. 두 값은 같을 수도 있고 다를 수도 있습니다. 도메인으로 연결한다면 DNS 해석, 인증서 유효성, 호스트 이름 일치가 모두 충족되어야 합니다. 구독이 도메인을 IP로 바꾸면서 올바른 servername을 유지하지 않으면 TCP에는 도달하지만 TLS 검증이 실패하는 경우가 흔합니다.
일부 사용자는 인증서 오류를 우회하려고 바로 skip-cert-verify를 활성화하지만, 이는 도메인·인증서 체인·시스템 시간 문제를 가릴 수 있습니다. 더 안정적인 순서는 먼저 기기 시간을 확인하고, servername이 인증서 이름과 일치하는지 검사한 다음, 서버 인증서 체인과 네트워크 경로를 확인하는 것입니다. 인증서 검증이 실패한 이유를 명확히 알고 그 위험을 받아들일 때만 검증 정책을 조정해야 합니다. Trojan은 WebSocket이나 gRPC 같은 운반 방식도 사용할 수 있습니다. 문제 해결 순서는 VMess와 비슷하게 TLS를 먼저 확인하고 path, Host 또는 service-name을 점검한 뒤 UDP와 정책 그룹 동작을 확인합니다.
VLESS: 프로토콜 계층 부담을 줄이고 전송 계층에 보안을 의존
VLESS 역시 V2Ray 계열에서 시작했지만 설계상 VMess와 같은 암호화 메커니즘을 프로토콜 계층에서 제공하지 않으며, 일반적으로 TLS 또는 다른 보안 전송에 기밀성과 신원 검증을 의존합니다. 사용자 식별자로 인증하고, uuid, flow, network, tls, servername과 전송 방식에 따른 추가 필드를 흔히 사용합니다. 프로토콜 계층의 처리가 더 직접적이어서 유연한 전송 조합이 필요한 배포에 자주 사용되지만, ‘필드가 가볍다’고 해서 보안 전송을 생략해도 된다는 뜻은 아닙니다.
VLESS 설정의 호환성 문제는 확장 기능에 집중됩니다. flow, Reality, 클라이언트 지문, 전송 세부 사항, UDP 동작에 대한 지원 시점은 코어마다 다릅니다. mihomo는 여러 VLESS 확장을 지원하지만 실제로 사용할 수 있는 필드는 현재 코어 문서와 실행 로그를 기준으로 확인해야 합니다. 구독에 알 수 없는 필드가 있으면 파서가 이를 무시할 수도 있고 노드 전체를 거부할 수도 있습니다. 오류가 발생하지 않고 무시되는 경우에는 노드가 가져와진 것처럼 보여 실행 단계에서 실패하므로 더 발견하기 어렵습니다. 다른 클라이언트로 마이그레이션하기 전에는 핵심 확장 기능이 변환 과정에서 사라지지 않았는지 확인하세요.
proxies:
- name: "SS baseline"
type: ss
server: example.com
port: 443
cipher: aes-128-gcm
password: "your-password"
udp: true
위 예시는 SS 노드의 최소 구조만 보여 주며 필드 관계를 파악하기 위한 것입니다. 실제 주소, 포트, 비밀번호와 암호화 방식은 서버 설정에서 가져와야 합니다. YAML은 들여쓰기에 민감하므로 목록 항목 아래 필드는 같은 계층을 유지해야 합니다. 비밀번호에 콜론, 샵 또는 기타 특수 문자가 포함되면 따옴표를 사용하세요. 설정 로드 실패와 연결 실패는 서로 다른 문제입니다. 전자는 YAML 문법과 필드 이름을 먼저 확인하고, 후자는 네트워크·인증·서버 상태를 확인해야 합니다.
03 · QUIC TRANSPORT
Hysteria2와 TUIC: 불안정한 경로를 위한 QUIC 방식
QUIC을 기반으로 선택하는 이유
기존 TCP 연결에서는 운영체제가 혼잡 제어와 재전송 상태를 관리하고, 프록시 프로토콜은 그 위에서 애플리케이션 데이터를 전달합니다. QUIC은 UDP 위에 구축되어 신뢰성 있는 전송, 암호화 핸드셰이크와 다중 스트림 관리를 사용자 공간에서 구현합니다. 서로 다른 논리 스트림 간의 상호 차단을 줄이고 연결 마이그레이션도 더 유연하게 처리할 수 있습니다. 휴대전화가 Wi-Fi에서 모바일 네트워크로 전환되거나 외부 주소가 바뀌고 짧은 패킷 손실이 발생할 때, 잘 구현된 QUIC은 TCP와 TLS 연결 전체를 다시 수립하는 것보다 빠르게 복구할 가능성이 있습니다.
이 기능이 항상 이득을 보장하는 것은 아닙니다. 일부 네트워크는 UDP를 제한하거나 속도를 조절하며, 기업 네트워크·방화벽·공용 핫스팟은 관련 포트를 직접 차단할 수도 있습니다. QUIC은 사용자 공간에서 처리되므로 CPU를 사용하고 타이머, 확인 응답과 연결 유지를 위한 활동을 발생시킵니다. 저사양 기기나 장시간 백그라운드에서 실행되는 휴대전화에서는 단순한 TCP 노드보다 리소스 비용이 높을 수 있습니다. Hysteria2 또는 TUIC이 적합한지 판단하려면 먼저 UDP 경로가 안정적인지 확인하고, 이상적인 네트워크에서 한 번 측정한 대용량 파일 속도가 아니라 실제 업무에서의 복구와 변동을 비교해야 합니다.
Hysteria2: 처리량 중심과 혼잡 제어
Hysteria2는 QUIC을 사용하며 패킷 손실과 지연이 큰 경로를 고려해 전송 제어를 설계합니다. 설정에는 일반적으로 서버 주소, 인증 정보, TLS 호스트 이름과 함께 선택적인 대역폭, 난독화 또는 인증서 검증 설정이 포함됩니다. mihomo에서 흔히 사용하는 노드 유형은 hysteria2입니다. 인증 필드는 구독에 따라 password 또는 auth로 표시될 수 있으므로 설정 출처별 명칭을 파서가 올바르게 매핑해야 합니다. 연결에 실패하면 UDP 도달 불가, TLS 실패, 인증 실패를 먼저 구분해야 하며 세 문제의 해결 방향은 완전히 다릅니다.
Hysteria2의 대역폭 관련 매개변수를 기기 속도 측정 상한으로 임의 입력해서는 안 됩니다. 혼잡 제어는 경로 용량에 맞춰 전송 속도를 조절하므로 선언값이 너무 크면 큐잉·패킷 손실·지연 변동이 증가하고, 너무 작으면 사용 가능한 처리량이 제한됩니다. 서비스 제공자가 완성된 구독을 생성했다면 먼저 해당 매개변수를 그대로 유지하세요. 양쪽 서버를 직접 관리하고 지속적인 테스트 환경이 있을 때만 조정하는 것이 좋습니다. 동영상 다운로드 같은 지속 트래픽에서는 일정 시간 동안의 평균 속도와 버퍼 안정성을 관찰하고, 음성 또는 상호작용 업무에서는 최대 속도보다 지연 변동, 재전송과 네트워크 전환 복구를 우선 확인해야 합니다.
TUIC: 저지연 연결과 UDP 운반
TUIC 역시 QUIC 위에 구축되며 설정에는 uuid, password, server, port, sni, alpn, udp-relay-mode와 혼잡 제어 옵션이 자주 포함됩니다. 서버 세대와 코어 구현에 따라 필드 조합이 다를 수 있으므로 이전 구독을 가져올 때는 인증 구조를 특히 확인해야 합니다. uuid와 password 중 하나만 남아 있거나 ALPN이 서버와 일치하지 않으면 핸드셰이크 또는 인증 단계에서 연결이 종료됩니다. 로그에 인증서 호스트 이름 문제가 나타나면 먼저 sni를 확인하고, 즉시 시간 초과가 발생하면 UDP 포트와 네트워크 경로를 우선 검증하세요.
TUIC은 UDP 업무에 직접적인 장점이 있지만 모든 애플리케이션을 반드시 TUN으로 처리해야 한다는 뜻은 아닙니다. 시스템 프록시는 HTTP 또는 SOCKS를 지원하는 애플리케이션을 주로 포괄하고, TUN은 더 넓은 IP 트래픽을 인계받습니다. 브라우저와 일반적인 데스크톱 애플리케이션만 프록시를 사용한다면 시스템 프록시가 리소스와 문제 해결 비용이 대체로 낮습니다. 게임, 명령줄 프로그램 또는 시스템 프록시를 읽지 않는 애플리케이션을 처리해야 할 때 TUN을 고려하세요. 프로토콜 선택과 트래픽 인계 방식은 독립적인 변수이므로 TUIC을 선택했다고 모든 네트워크 인계 기능을 기본 활성화해서는 안 됩니다.
| 항목 | Hysteria2 | TUIC | 확인할 핵심 |
|---|---|---|---|
| 기본 전송 | QUIC / UDP | QUIC / UDP | 네트워크가 대상 UDP 포트를 허용하는가 |
| 인증 | 일반적으로 비밀번호 또는 인증 문자열 | 일반적으로 UUID와 비밀번호 | 구독 변환에서 모든 필드를 유지하는가 |
| TLS | SNI, 인증서 검증, ALPN | SNI, 인증서 검증, ALPN | 호스트 이름과 시스템 시간이 올바른가 |
| 튜닝 | 대역폭 선언과 혼잡 제어 | 혼잡 제어와 UDP 릴레이 방식 | 먼저 기본값을 유지한 뒤 단일 변수로 테스트 |
QUIC 노드의 표준 문제 해결 순서
첫 단계에서는 같은 네트워크에서 이미 작동하는 TCP 노드를 테스트해 DNS, 규칙과 클라이언트 전반이 정상인지 확인합니다. 두 번째 단계에서는 현재 네트워크가 대상 UDP 포트를 제한할 가능성이 있는지 확인합니다. 다른 Wi-Fi나 모바일 네트워크로 바꿔 비교할 수 있지만 노드 매개변수는 동시에 변경하지 마세요. 세 번째 단계에서는 코어 로그를 읽습니다. 시간 초과는 대개 네트워크 도달 가능성을, TLS 오류는 SNI·인증서·시간을, 인증 실패는 비밀번호와 사용자 식별자를 가리킵니다. 네 번째 단계에서는 클라이언트에 해당 노드 유형을 지원하는 mihomo 코어가 포함되어 있는지 확인하고, 구독 변환 과정에서 ALPN·혼잡 제어·UDP 필드가 유지되었는지 검사합니다.
Hysteria2 또는 TUIC이 특정 네트워크에서 계속 실패하고 TCP 프로토콜은 안정적이라면 억지로 매개변수를 조정할 필요가 없습니다. SS, Trojan 또는 VLESS over TCP 노드를 폴백 전략으로 남겨 두는 편이 실용적입니다. 프로토콜 선택은 네트워크마다 다른 정책 그룹을 사용할 수 있어야 합니다. 가정용 Wi-Fi에서는 검증된 QUIC 노드를 선택하고, 제한된 공용 네트워크에서는 TCP 노드로 자동 또는 수동 전환할 수 있습니다. 이렇게 하면 모든 환경을 하나의 설정으로 덮으려 하지 않고 네트워크 경로의 차이를 설정에 명시적으로 반영할 수 있습니다.
04 · PERFORMANCE
연결 속도, 리소스 사용량과 모바일 배터리
연결 설정 시간과 지속 처리량은 같은 지표가 아닙니다
웹페이지 로딩 속도는 DNS, TCP 또는 QUIC 핸드셰이크, TLS, 서버 처리와 페이지 리소스 수가 함께 결정합니다. 프로토콜 핸드셰이크가 가벼워도 이 중 일부 시간만 줄일 수 있습니다. DNS가 느리거나 페이지가 여러 도메인에 연결해야 한다면 단일 연결의 장점이 체감 성능으로 이어지지 않을 수 있습니다. 지속 다운로드는 경로 용량, 혼잡 제어와 서버 출구에 더 크게 좌우됩니다. 짧은 연결 테스트는 여러 대상을 반복 방문해 캐시 영향을 줄이고, 지속 전송 테스트는 충분한 시간 동안 진행하며 속도 안정성, 주기적인 0 속도 발생 여부와 네트워크 전환 후 복구를 관찰해야 합니다.
다중화도 신중하게 이해해야 합니다. 여러 논리 연결을 더 적은 수의 하위 연결에 넣으면 반복 핸드셰이크를 줄일 수 있지만, 하위 연결에 혼잡이나 중단이 발생했을 때 영향 범위도 커집니다. TCP의 다중화는 여전히 단일 TCP 연결의 패킷 손실 복구 영향을 받을 수 있고, QUIC의 다중 스트림 설계는 스트림 간 차단을 줄이는 대신 사용자 공간의 상태 관리 비용을 늘립니다. 짧은 요청이 많을 때는 다중화가 효과적일 수 있지만 소수의 장시간 대용량 연결에서는 이득이 뚜렷하지 않을 수 있습니다. 기본적으로 끄거나 켜는 것을 절대적인 결론으로 보지 말고 애플리케이션 유형에 따라 테스트해야 합니다.
CPU, 메모리와 암호화 비용
SS의 리소스 사용량은 암호화 방식, 프로세서 명령어 집합과 동시 연결 수에 따라 달라집니다. 하드웨어 가속을 지원하는 데스크톱 프로세서는 일반적인 AEAD 알고리즘을 효율적으로 처리할 수 있고, 일부 저전력 아키텍처는 다른 알고리즘에 더 적합할 수 있습니다. Trojan, VMess over TLS, VLESS over TLS는 모두 TLS 처리 비용을 부담하며, 실제 비용은 전송 계층에서 WebSocket, gRPC 또는 추가 다중화를 사용하는지에도 영향을 받습니다. Hysteria2와 TUIC은 암호화 외에도 사용자 공간에서 QUIC의 확인 응답, 재전송, 혼잡과 스트림 상태를 관리해야 합니다.
메모리 사용량은 보통 프로토콜 이름 하나만으로 결정되지 않습니다. 연결 수, 규칙 규모, DNS 캐시, TUN 라우팅, 로그 수준과 provider 수가 단일 노드 간 차이보다 더 크게 나타날 수 있습니다. 라우터에서 메모리 압박이 발생하면 먼저 불필요한 규칙 집합을 줄이고, 지나치게 긴 provider 체인을 단축하며, 상세 로그의 지속 기록을 제한한 뒤 프로토콜을 비교하세요. 데스크톱에서는 시작 직후 수치만 기록하지 말고 장시간 실행 후 계속 증가하는지 관찰해야 합니다. 비정상적인 증가가 발생하면 설정 구조와 재현 절차를 보존하는 것이 특정 프로토콜이 ‘메모리를 더 많이 사용한다’고 단정하는 것보다 원인 파악에 유용합니다.
모바일 배터리 소모는 깨우기 빈도가 좌우합니다
휴대전화 배터리 사용량은 암호화 계산뿐 아니라 무선 모듈과 CPU가 깨어나는 빈도에 더 크게 좌우됩니다. 잦은 노드 상태 점검, 짧은 DNS 캐시, 지속적인 로그 기록, 백그라운드 속도 측정과 과도하게 적극적인 연결 유지는 깨우기 횟수를 늘립니다. 매번 처리량이 작더라도 장시간 누적되면 대기 시간이 크게 줄어듭니다. QUIC 기반 노드는 NAT 매핑을 유지하기 위해 연결 유지 패킷을 보낼 수 있고, TUN 모드는 더 많은 시스템 트래픽을 처리해야 합니다. 기기에 백그라운드 애플리케이션이 많다면 이러한 요인이 겹칩니다.
최적화는 프로토콜을 바꾸기 전에 전역 동작부터 조정하는 순서가 적절합니다. 장애 발견에 필요한 합리적인 간격으로 상태 점검 주기를 설정하고 여러 provider가 동시에 고빈도로 탐색하지 않게 하세요. 실제 사용하는 정책 그룹만 남기고, 디버깅이 끝나면 일반 로그 수준으로 되돌리며, 모든 트래픽을 인계받을 필요가 없으면 시스템 프록시를 우선 사용하세요. LAN 연결 스위치도 실제 요구 사항에 맞는지 확인해야 합니다. 이러한 조정을 마친 뒤 같은 시간대에 TCP와 QUIC 노드를 비교하세요. 테스트 중에는 화면 밝기, 애플리케이션 활동과 네트워크 유형을 비슷하게 유지해야 시스템 스케줄링 차이가 프로토콜 차이를 가리지 않습니다.
| 사용 상태 | 주요 비용 발생 원인 | 관찰할 항목 | 우선 조정할 내용 |
|---|---|---|---|
| 전면 웹 탐색 | DNS, 짧은 연결, 규칙 매칭 | 첫 바이트 시간과 실패 재시도 | DNS와 규칙 적중 |
| 동영상 또는 다운로드 | 지속적인 암호화, 혼잡 제어 | 평균 처리량과 버퍼 안정성 | 노드 경로와 프로토콜 기준선 |
| 화면 잠금 상태의 백그라운드 | 연결 유지, 상태 점검, 애플리케이션 깨우기 | 대기 배터리 소모와 재연결 빈도 | 점검 간격과 로그 수준 |
| TUN 인계 | 시스템 전체 트래픽 처리, DNS 매핑 | CPU 깨우기와 비정상 애플리케이션 트래픽 | 라우팅 범위와 제외 항목 |
재현 가능한 테스트 기록 만들기
테스트 표에는 최소한 기기, 운영체제, 클라이언트, 코어, 네트워크 유형, 인계 방식, DNS 모드, 노드 프로토콜과 테스트 시간을 기록해야 합니다. 한 번에 하나의 변수만 바꾸세요. 예를 들어 규칙 모드와 시스템 프록시를 고정하고 SS와 Hysteria2 노드만 교체한 뒤, 다음 라운드에서 노드를 고정하고 시스템 프록시와 TUN을 비교합니다. 매 라운드 성공률과 오류 유형도 함께 기록해야 합니다. 연결 5회 중 2회가 시간 초과라면 성공했을 때 속도가 아무리 높아도 자동 선택 그룹의 유일한 노드로는 적합하지 않습니다.
모바일 배터리는 최소 한 번의 평소 사용 주기 전체를 관찰하고, 시스템 배터리 화면에서 클라이언트의 전면 및 백그라운드 활동을 확인해야 합니다. 몇 분간의 짧은 실행만으로는 대기 상태의 연결 유지 비용을 판단할 수 없습니다. 배터리 소모가 비정상적이면 먼저 모든 능동 상태 점검을 중지하고 상세 로그를 끈 뒤 하나씩 복원해 깨우기의 원인을 찾을 수 있습니다. 백그라운드 실행과 절전 정책에 대한 추가 단계는 Clash 모바일 배터리 소모가 빠를 때 해결 방법을 참고하세요.
05 · CORE FAMILY
원본 Clash, Clash Meta, mihomo의 계열 관계
원본 Clash가 설정 구조의 기반을 마련했습니다
원본 Clash는 널리 사용되는 YAML 설정 모델을 만들었습니다. proxies는 노드를 정의하고, proxy-groups는 선택·자동 측정·폴백을 구성하며, rules는 순서대로 트래픽을 매칭하고, proxy-providers와 rule-providers는 외부 출처에서 콘텐츠를 불러옵니다. 시스템 프록시, mixed-port, DNS와 규칙 모드 등의 개념도 여러 클라이언트에서 공통으로 사용하는 인터페이스의 기반이 되었습니다. 많은 구독과 튜토리얼이 이 구조를 따르므로 원본 코어의 유지 관리가 중단된 뒤에도 설정 의미는 생태계 호환성을 이해하는 출발점으로 남아 있습니다.
원본이 지원하는 프로토콜과 확장 범위는 제한적입니다. 이후 등장한 VLESS, Reality, Hysteria2, TUIC과 더 풍부한 DNS, TUN, 규칙 기능이 원본 코어에서 작동한다고 가정해서는 안 됩니다. 설정 파일이 SS, VMess, Trojan과 기본 규칙만 사용한다면 호환성이 높아 보일 수 있지만 Meta 확장 필드를 추가하는 순간 어떤 코어가 필요한지 명확히 해야 합니다. 설정의 계열을 판단할 때는 파일명이 config.yaml인지보다 노드 type, DNS 확장 옵션, TUN 필드와 규칙 유형을 확인해야 합니다.
Clash Meta의 확장 프로토콜과 네트워크 기능
Clash Meta는 Clash 설정 모델을 기반으로 프로토콜, 전송, DNS, TUN과 규칙 기능을 확장했으며, 일반적인 설정의 마이그레이션 비용을 낮추는 것도 목표로 삼았습니다. 여러 생태계에서 사용하는 노드 유형을 더 많이 지원해 하나의 코어로 SS, VMess, Trojan, VLESS, Hysteria2, TUIC 등 다양한 설정을 처리할 수 있습니다. 사용자에게 가장 눈에 띄는 변화는 구독에 새 프로토콜이 포함되어도 프로토콜별로 다른 코어를 설치할 필요가 줄어든다는 점입니다. 클라이언트 개발자는 비교적 통일된 제어 인터페이스를 바탕으로 정책·연결·로그 화면을 구성할 수 있습니다.
호환성에는 여전히 방향성이 있습니다. 기본 Clash 설정은 대체로 Meta 계열 코어로 옮기기 쉽지만, Meta 확장을 사용하는 설정이 원본 코어에서도 작동한다고 보장할 수는 없습니다. 필드 이름이 같더라도 기본값과 경계 동작은 구현의 발전에 따라 달라질 수 있습니다. 코어를 바꿀 때는 먼저 설정을 로드할 수 있는지 확인하고, 다음으로 DNS·규칙·UDP 동작을 검사한 뒤 각 노드 유형을 테스트하세요. 마이그레이션 전에 규칙 집합과 노드 형식을 동시에 바꾸면 문제가 코어 차이인지 설정 변경인지 판단할 수 없습니다.
mihomo는 현재 이어지는 이름입니다
mihomo는 Clash Meta 프로젝트가 이후 채택한 이름입니다. 많은 그래픽 클라이언트의 인터페이스는 여전히 Clash, Meta 또는 Clash Meta를 생태계 명칭으로 사용하지만 실제 내장 코어는 mihomo로 표시될 수 있습니다. 이 이름들을 볼 때는 프로젝트의 과거 명칭, 클라이언트 브랜드와 실제 코어 파일을 구분해야 합니다. Clash Plus, Clash Verge Rev, FlClash, Clash Nyanpasu 등의 클라이언트는 mihomo를 기반으로 인터페이스를 제공할 수 있고, Clash Meta for Android는 이름에 Meta를 유지합니다. 이름이 다르다고 설정 체계가 완전히 분리되는 것은 아니며 핵심은 코어 빌드와 지원 필드입니다.
설치 파일은 기기 플랫폼과 유지 관리 상태를 기준으로 선택해야 합니다. 이 사이트의 다운로드 페이지는 Clash Plus를 우선 추천하며 Windows, macOS, Android, iOS, Linux에서 사용할 수 있는 클라이언트도 함께 소개합니다. 명령줄, 서버 또는 라우터 환경에 익숙한 사용자는 mihomo 코어를 직접 사용할 수 있지만 설정, 서비스 시작, 로그와 업데이트를 직접 관리해야 합니다. 일반적인 데스크톱과 휴대전화 사용자는 그래픽 클라이언트를 사용하면 시스템 프록시, TUN 권한, 설정 업데이트와 정책 전환을 더 쉽게 처리할 수 있습니다. 구체적인 클라이언트 조합은 클라이언트 비교와 설치 파일 페이지에서 확인하세요.
| 코어 브랜치 | 포지션 | 프로토콜 범위 | 설정 마이그레이션 시 주의점 |
|---|---|---|---|
| 원본 Clash | 기본 설정 모델과 규칙 체계 | 기존 프로토콜과 기본 프록시 기능 | Meta 확장 필드 지원을 가정할 수 없음 |
| Clash Meta | 확장 프로토콜, DNS, TUN과 규칙 기능 | VLESS, Hysteria2, TUIC 등의 확장 지원 | 기본 설정은 쉽게 가져올 수 있지만 역방향 마이그레이션에서는 축소 필요 |
| mihomo | Meta 계열 프로젝트의 현재 계승판 | 다중 프로토콜과 확장 기능을 계속 지원 | 현재 문서에서 필드와 기본 동작 확인 |
클라이언트 버전과 코어 기능을 혼동하지 마세요
그래픽 클라이언트 업데이트는 인터페이스, 설정 관리 또는 시스템 통합만 바꿀 수도 있고 코어까지 함께 교체할 수도 있습니다. 코어 업데이트는 프로토콜 필드를 추가하거나 연결 문제를 수정하고 기본값을 조정할 수 있습니다. 호환성을 확인할 때는 “Clash가 작동하지 않는다”고만 하지 말고 두 항목을 모두 기록해야 합니다. 로그에는 보통 코어 이름이나 시작 정보가 표시되고, 클라이언트 정보 화면에서 코어 정보를 제공하기도 합니다. 같은 구독이 두 클라이언트에서 다르게 작동하면 먼저 코어 유형과 설정 파싱 결과를 비교한 뒤 시스템 프록시, TUN 권한과 DNS 설정을 비교하세요.
코어 파일을 수동으로 교체할 때는 주의해야 합니다. 그래픽 클라이언트에는 코어 파일명, 시작 매개변수, 제어 포트와 권한에 대한 고정된 규칙이 있을 수 있어 파일을 직접 덮어쓰면 시작되지 않거나 인터페이스가 코어에 연결되지 않을 수 있습니다. 클라이언트가 제공하는 코어 업데이트 기능을 사용하거나 독립 디렉터리에서 mihomo를 실행해 비교 테스트하는 편이 안전합니다. 서버에 독립 코어를 배포할 때는 서비스 관리자로 시작 순서와 자동 복구를 제어하고, 다시 로드하기 전에 설정 검사를 수행해 문법 오류로 기존 연결이 끊기지 않도록 해야 합니다.
mihomo -t -f config.yaml
mihomo -d ./profile
첫 번째 명령은 지정한 설정 파일을 검사하고, 두 번째 명령은 독립 작업 디렉터리에서 시작하는 예시입니다. 실제 실행 파일 이름과 경로는 플랫폼과 설치 방식에 따라 달라집니다. 설정 검사를 통과했다는 것은 문법과 알려진 필드를 읽을 수 있다는 뜻일 뿐, 모든 원격 노드에 연결할 수 있다는 의미는 아닙니다. 시작한 뒤에도 로그, 정책 그룹과 실제 요청으로 네트워크 동작을 확인해야 합니다.
06 · SUBSCRIPTIONS
구독 형식, 설정 호환성과 필드 보존
노드 링크, 노드 목록과 전체 설정
‘구독’은 서로 다른 세 가지 콘텐츠를 가리킬 수 있습니다. 첫 번째는 ss, vmess, trojan, vless 링크처럼 여러 프로토콜 링크로 구성된 노드 목록이며, 클라이언트나 변환 서비스가 링크를 Clash 노드로 파싱합니다. 두 번째는 이미 변환된 proxies 목록으로, 노드만 포함하고 전체 규칙과 DNS는 포함하지 않습니다. 세 번째는 노드 외에 proxy-groups, rules, rule-providers, dns, tun 등을 포함하는 완전한 Clash 또는 mihomo 설정입니다. 가져오기 전에 유형을 판단하면 전체 설정을 노드 provider로 잘못 처리하거나 구독 업데이트로 로컬 규칙을 덮어쓰는 일을 피할 수 있습니다.
노드 링크는 도구 간 전달에 적합하지만 모든 확장 매개변수가 통일된 방식으로 표현되는 것은 아닙니다. VLESS의 flow와 Reality 필드, Hysteria2의 대역폭·난독화 매개변수, TUIC의 인증·혼잡 제어 옵션은 링크 규격, 생성기 또는 변환기에 따라 누락될 수 있습니다. 전체 YAML은 더 많은 필드를 표현할 수 있지만 대상 코어에 대한 의존성도 명확합니다. 여러 mihomo 클라이언트 사이에서 복잡한 설정을 옮겨야 한다면 공유 링크로 반복 변환하는 것보다 YAML을 보존하는 편이 안정적입니다.
proxy-providers는 출처를 관리하며 프로토콜 변환과는 다릅니다
proxy-providers를 사용하면 mihomo가 파일 또는 URL에서 노드 집합을 불러오고 interval에 따라 업데이트할 수 있습니다. 노드 출처와 기본 설정을 분리한 뒤 여러 정책 그룹이 같은 provider를 참조하게 만들 때 적합합니다. provider의 health-check는 테스트 주소에 주기적으로 접속해 노드 사용 가능 여부를 판단하지만, 점검 빈도는 네트워크 요청과 모바일 배터리 소모에 영향을 줍니다. provider가 읽는 콘텐츠는 대상 코어가 파싱할 수 있어야 하며, 원격 응답이 호환되지 않는 형식이라면 provider에 넣는 것만으로 임의의 프로토콜 변환이 자동으로 이루어지지 않습니다.
proxy-providers:
primary:
type: http
url: "https://example.com/subscription.yaml"
path: ./providers/primary.yaml
interval: 21600
health-check:
enable: true
interval: 1800
url: "https://www.example.com/"
예시에 사용한 도메인은 구조를 보여 주기 위한 것입니다. url은 실제 구독 주소로 바꾸고 접근 자격 증명이 포함된 링크를 공개적으로 공유하지 마세요. path는 코어 작업 디렉터리의 캐시 파일을 가리키고, interval은 업데이트 주기입니다. health-check의 interval은 상태 점검 주기로 두 값의 의미가 다릅니다. 테스트 주소는 안정적이고 응답이 작으며 실제 네트워크 대상과 비교 가능한 것이 좋습니다. 여러 provider의 점검 주기를 짧게 설정하면 클라이언트가 백그라운드 연결을 계속 생성하므로 모바일에서는 특히 빈도를 조절해야 합니다.
변환 과정에서 확장 필드가 가장 쉽게 손실됩니다
구독 변환은 보통 원본 형식 파싱, 필드 매핑, 대상 YAML 생성의 세 단계로 진행됩니다. 기존 SS, VMess, Trojan의 일반적인 필드 매핑은 비교적 안정적이지만 플러그인, gRPC, Reality, 클라이언트 지문, Hysteria2, TUIC 확장 항목은 변환기 기능의 제약을 더 쉽게 받습니다. 변환 후에는 각 프로토콜에서 최소 한 개의 노드를 추출해 server, port, uuid 또는 password, network, tls, servername, alpn, flow, udp 등 핵심 필드를 비교하세요. 노드 수만 비교해서는 안 됩니다. 개수가 같아도 필드가 누락될 수 있습니다.
노드 이름도 관리에 영향을 줄 수 있습니다. 변환기가 중복 제거를 위해 노드 이름을 바꾸면 proxy-groups에서 이전 이름을 직접 사용한 설정은 로드 시 프록시를 찾지 못하는 오류가 발생합니다. providers로 노드 집합을 참조하면 이름 의존성을 줄일 수 있지만 규칙 대상과 정책 그룹 이름은 여전히 존재해야 합니다. 전체 설정을 마이그레이션할 때는 먼저 모든 규칙이 최종적으로 가리키는 정책 그룹을 확인하고, 다음으로 정책 그룹이 참조하는 노드나 provider를 확인해 rules에서 proxy-groups, proxies로 이어지는 참조 체계를 점검하세요.
YAML 문법이 올바르더라도 의미 오류가 발생할 수 있습니다
YAML 검사는 들여쓰기, 중복 구조와 유형 문제를 발견할 수 있지만 원격 주소, 비밀번호, SNI 또는 규칙 대상이 올바른지는 확인하지 못합니다. 흔한 의미 오류로는 일부 파서가 거부하는 문자열 형식의 포트, 일관되지 않은 불리언 값, 중복된 정책 그룹 이름, 존재하지 않는 그룹을 가리키는 규칙, 쓰기 권한이 없는 provider 경로, 서버가 지원하지 않는 UDP를 활성화한 노드가 있습니다. 먼저 코어 설정 검사를 실행한 뒤 시작하고, 첫 번째 provider 업데이트, DNS 초기화와 노드 핸드셰이크 로그를 관찰하세요.
서비스 제공자가 전체 구독을 관리하는 경우 로컬 수정은 다음 업데이트에서 덮어쓰일 수 있습니다. 장기간 유지할 규칙은 원격 캐시 파일을 직접 편집하지 말고 클라이언트가 지원하는 재정의·병합 또는 로컬 설정 계층에 배치해야 합니다. 클라이언트마다 재정의 기능의 명칭과 지원 범위가 다르므로 마이그레이션 전에 로컬 규칙을 내보내야 합니다. Clash Plus 같은 클라이언트가 설정 관리를 간소화할 수는 있지만 원격 구독, 생성된 실행 설정, 로컬 재정의라는 세 계층은 여전히 구분해야 하며 문제를 해결할 때 실제로 적용된 파일이 무엇인지 확인해야 합니다.
| 콘텐츠 형태 | 적합한 용도 | 주요 위험 | 마이그레이션 권장 사항 |
|---|---|---|---|
| 프로토콜 공유 링크 | 하나 또는 소수의 노드 전달 | 확장 필드 표현이 불완전함 | 가져온 후 핵심 매개변수 확인 |
| 노드 YAML | proxy-provider의 출처로 사용 | 정책 그룹과 규칙이 포함되지 않음 | 독립적인 기본 설정 유지 |
| 전체 설정 | 완전한 실행 환경 복제 | 특정 코어 확장에 의존 | 먼저 코어를 확인한 뒤 계층별로 마이그레이션 |
| 변환된 구독 | 서로 다른 형식의 생태계 연결 | 필드, 이름 또는 유형 손실 | 수량만 보지 말고 프로토콜별로 추출 점검 |
07 · USE CASES
기기와 네트워크 환경에 맞는 프로토콜 선택
데스크톱 업무와 일상적인 웹 탐색
Windows, macOS, Linux 데스크톱 환경은 일반적으로 처리 능력이 충분하므로 프로토콜 선택에서 안정성과 설정 유지 관리성을 우선해야 합니다. SS, Trojan, VMess 또는 VLESS 노드가 이미 안정적으로 작동한다면 새 프로토콜 이름이 등장했다는 이유만으로 바꿀 필요는 없습니다. 웹 탐색과 협업 소프트웨어는 짧은 연결, DNS와 TLS 요청이 중심이므로 규칙 정확도, 안정적인 DNS 응답과 올바른 시스템 프록시 포트가 프로토콜 간 작은 성능 차이보다 중요한 경우가 많습니다.
클라이언트는 이 사이트에서 모든 플랫폼에 Clash Plus를 우선 추천하며 Clash Verge Rev, FlClash, Clash Nyanpasu 등의 선택지도 제공합니다. GUI를 선택했다면 먼저 규칙 모드와 시스템 프록시로 기준선을 세우세요. 애플리케이션이 시스템 프록시를 읽지 않거나 더 넓은 트래픽을 처리해야 할 때만 TUN을 활성화합니다. 프로토콜 노드는 수동 선택 그룹과 자동 폴백 그룹으로 나누고, 일상적으로는 검증된 노드를 고정 사용하며 장애가 발생했을 때만 전환해 잦은 자동 측정으로 인한 연결 변동을 피하세요.
모바일 네트워크와 잦은 접속 지점 전환
Android와 iOS 기기는 화면 잠금, 백그라운드 제한, Wi-Fi와 모바일 네트워크 전환, NAT 매핑 변경 등을 겪습니다. 현재 네트워크가 UDP에 우호적이라면 Hysteria2 또는 TUIC을 네트워크 전환 복구와 실시간 UDP를 위한 후보로 사용할 수 있습니다. 공용 네트워크가 UDP를 자주 제한한다면 Trojan, VLESS over TCP, VMess 또는 SS를 폴백으로 남겨 두세요. 모바일에서는 많은 노드를 고빈도 자동 측정 그룹에 넣지 않는 것이 좋습니다. 노드가 많고 점검이 잦을수록 백그라운드 깨우기가 뚜렷해집니다.
테스트할 때는 전면 웹 탐색, 실시간 통신, 화면 잠금 후 복귀와 네트워크 전환을 각각 관찰해야 합니다. QUIC 노드가 네트워크 전환 후 빠르게 복구되지만 화면 잠금 대기 중 배터리 소모가 늘어난다면 상태 점검 주기를 늘리고 정책 그룹을 줄이며 연결 유지 설정을 확인하세요. 그래도 적합하지 않으면 TCP 노드를 기본으로 사용하고 QUIC 노드는 실시간 업무나 특정 네트워크에만 남겨 두세요. 프로토콜은 기기에 영구적으로 고정할 필요가 없으며 사용 상태에 따라 정책 그룹으로 전환할 수 있습니다.
동영상, 대용량 파일과 지속 전송
지속 전송에서는 평균 처리량, 속도 변동과 장시간 연결 안정성을 확인해야 합니다. 패킷 손실이 큰 경로에서는 Hysteria2의 혼잡 제어가 처리량 유지에 유리할 수 있고, TUIC도 QUIC의 다중 스트림과 복구 기능을 활용할 수 있습니다. 그러나 서버 출구, 회선 용량과 대상 사이트의 제한이 여전히 상한을 결정합니다. 패킷 손실이 적고 안정적인 네트워크에서는 잘 설정된 SS, Trojan 또는 VLESS도 신뢰할 수 있는 결과를 낼 수 있으며 리소스 비용과 문제 해결 과정도 더 직접적입니다.
속도를 높이기 위해 다중화, 대역폭 선언 변경, TUN 전환과 DNS 변경을 동시에 수행하지 마세요. 먼저 인계 방식과 DNS를 고정하고 프로토콜 노드를 비교한 뒤, 노드를 정한 다음 다중화를 테스트하고 마지막으로 혼잡 매개변수를 조정하세요. 각 단계의 이전 결과를 보존하고 속도가 주기적으로 떨어질 때 패킷 손실, 재연결, 정책 그룹 전환 또는 DNS 업데이트가 함께 발생했는지 확인해야 합니다. 단일 변수 기록이 있어야 최적화 효과의 원인을 설명할 수 있습니다.
실시간 음성, 게임과 UDP 애플리케이션
실시간 업무는 지연 변동과 패킷 손실 복구에 민감하며 최대 대역폭은 보통 핵심 지표가 아닙니다. 먼저 애플리케이션 트래픽이 실제로 Clash를 거치는지 확인하세요. 일부 애플리케이션은 시스템 프록시를 사용하지 않으므로 TUN이나 애플리케이션 자체의 프록시 설정이 필요합니다. 그런 다음 노드에 udp: true가 선언되어 있고 서버가 UDP 릴레이를 지원하는지 확인합니다. Hysteria2와 TUIC은 QUIC 기반이므로 후보에 넣기 적합하지만 UDP 경로의 품질이 나쁘면 이들도 영향을 받습니다. SS, Trojan, VMess, VLESS의 UDP 지원 여부는 코어, 노드 설정과 서버 구현에 따라 달라집니다.
게임 환경에서는 웹 속도 측정만으로 노드를 선택해서는 안 됩니다. 실제 세션에서 연결 유지, 맵 전환 또는 매칭 재시작 시 연결이 끊기는지, NAT 변경 후 복구되는지를 관찰해야 합니다. TUN 인계 후 LAN 기기 검색, 인쇄 또는 화면 전송에 문제가 생기면 프로토콜을 바꾸기보다 사설 주소 규칙과 라우팅 제외 항목을 확인하세요. 실시간 업무용 정책 그룹은 검증된 소수의 노드만 사용해 세션 중 자동으로 출구가 바뀌지 않도록 하는 것이 좋습니다.
라우터, 서버와 저사양 기기
이런 기기는 우선 CPU 아키텍처, 메모리, 저장 장치 쓰기와 서비스 관리의 제약을 받습니다. 기본 SS 설정은 리소스 기준선을 세우기 쉬우며, Trojan 또는 VLESS over TLS는 TLS 운반이 필요한 경우의 후보가 될 수 있습니다. Hysteria2와 TUIC은 목표 하드웨어에서 사용자 공간 QUIC의 비용을 직접 테스트해야 합니다. 프로토콜 문서만으로 저사양 ARM이나 다른 아키텍처의 성능을 추정해서는 안 됩니다. 규칙 집합 규모, DNS 캐시와 동시 연결도 리소스를 사용하므로 필요하면 규칙과 provider를 줄이세요.
mihomo를 직접 실행할 때는 설정 검사, 시작, 로그 순환과 장애 복구를 서비스 관리에 포함해야 합니다. 라우터를 LAN 게이트웨이로 사용한다면 포워딩, 방화벽과 DNS도 올바르게 처리해야 하므로 데스크톱 시스템 프록시보다 문제 범위가 넓습니다. 같은 Wi-Fi에서 소수의 기기만 프록시를 사용하게 하려면 먼저 LAN 공유 프록시 설정을 읽고 mixed-port와 allow-lan으로 충분한지 평가한 다음 투명 인계를 배포할지 결정하세요.
| 환경 | 우선 후보 | 대안 방향 | 핵심 검증 |
|---|---|---|---|
| 데스크톱 웹과 업무 | 매개변수가 완전한 SS, Trojan, VMess, VLESS | Hysteria2 또는 TUIC | DNS, 짧은 연결 성공률, 시스템 프록시 |
| 모바일 네트워크 | 검증된 Hysteria2, TUIC 또는 안정적인 TCP 노드 | 여러 네트워크에서 사용할 수 있는 TCP 폴백 유지 | 네트워크 전환 복구, 백그라운드 배터리 소모, UDP 도달 가능성 |
| 지속 다운로드 | 경로가 안정적이고 평균 처리량이 높은 노드 | 혼잡 매개변수 조정보다 먼저 경로 변경 | 장시간 변동, 재연결과 서버 용량 |
| 실시간 UDP | Hysteria2, TUIC 또는 UDP 지원이 확인된 노드 | 소수의 고정 폴백 노드 | 지연 변동, 세션 유지, TUN 라우팅 |
| 저사양 기기 | 간단한 설정과 정리한 규칙 | 하드웨어에서 QUIC 직접 측정 | CPU, 메모리, 동시 연결과 로그 기록 |
08 · MIGRATION
프로토콜 테스트, 설정 마이그레이션과 장애 추적
마이그레이션 전에 복구 가능한 최소 설정 만들기
기존 클라이언트에서 Clash Plus, Clash Verge Rev, FlClash 또는 다른 mihomo 클라이언트로 옮길 때는 기존 클라이언트에서 작동하는 설정을 먼저 보존하고 즉시 삭제하지 마세요. 새 클라이언트에는 노드 하나 또는 provider 하나만 가져와 DIRECT, 단일 프록시, MATCH로 구성된 최소 규칙을 만들고 코어 시작, DNS와 시스템 프록시가 정상인지 확인합니다. 기준선이 통과된 뒤 전체 정책 그룹, 규칙 집합과 TUN을 추가하세요. 이렇게 하면 클라이언트 설치 문제, 코어 호환성 문제와 복잡한 설정 문제를 분리할 수 있습니다.
원본 Clash 설정을 mihomo로 가져오는 경우 대부분의 기본 필드는 계속 사용할 수 있지만 DNS와 TUN의 기본 동작은 확인해야 합니다. 반대로 마이그레이션할 때는 VLESS, Hysteria2, TUIC 등 원본이 지원하지 않는 노드와 Meta 확장 규칙을 삭제해야 합니다. 정책 그룹 참조도 함께 업데이트하지 않으면 존재하지 않는 대상을 가리켜 설정이 실패합니다. 일괄 수정은 항상 먼저 파일을 복사하고 코어 검사 명령으로 문법을 확인한 다음 실행 중인 설정을 교체해야 합니다.
단계별로 로그 읽기
시작 단계의 로그는 ‘설정을 로드할 수 있는가’에 답합니다. YAML 파싱, 알 수 없는 필드, provider 파일, 수신 포트와 TUN 권한을 중점적으로 확인하세요. 업데이트 단계의 로그는 ‘원격 콘텐츠를 가져와 파싱할 수 있는가’에 답하며 구독 요청, 반환 형식, 캐시 경로와 노드 수를 확인합니다. 연결 단계의 로그는 ‘대상 트래픽이 규칙에 적중하고 핸드셰이크를 완료하는가’에 답하며 규칙 대상, 노드 이름, DNS, 시간 초과, TLS와 인증 정보를 확인합니다. 서로 다른 단계를 섞으면 구독 업데이트 성공이 노드 핸드셰이크 성공을 의미한다고 판단하는 것처럼 오류가 발생합니다.
일반적인 dial tcp timeout은 정해진 시간 안에 TCP 연결이 완료되지 않았다는 뜻이며 주소에 도달할 수 없거나 포트가 차단되었거나 DNS 결과가 비정상적이거나 서버가 수신 대기하지 않는 경우 발생할 수 있습니다. connection refused는 대상이 명확히 연결을 거부했다는 뜻이므로 포트와 서비스 상태를 먼저 확인하세요. TLS 오류는 시스템 시간, servername과 인증서를 확인해야 하며 authentication failed는 비밀번호, UUID 또는 인증 문자열을 가리킵니다. QUIC 노드가 계속 시간 초과를 일으키면 먼저 네트워크를 바꿔 UDP 경로를 확인한 뒤 프로토콜 매개변수를 점검하세요. 더 많은 로그 문구와 확인 순서는 Clash 실행 로그 읽는 법에서 확인할 수 있습니다.
포트, 시스템 프록시와 TUN을 계층별로 확인
mixed-port는 HTTP와 SOCKS 진입점을 동시에 제공하는 데 자주 사용됩니다. 시스템 프록시를 켠 뒤 운영체제는 클라이언트가 실제로 수신 대기하는 주소와 포트를 가리켜야 합니다. 포트를 다른 프로그램이 사용 중이면 코어가 시작되지 않을 수 있으며, 인터페이스의 스위치가 켜져 있다고 수신 대기가 성공했다는 뜻은 아닙니다. 먼저 다른 프록시 도구를 끄고 로그의 수신 대기 오류를 확인하세요. LAN 공유에는 allow-lan, 방화벽과 올바른 수신 주소도 필요하며, 다른 기기에 내 컴퓨터의 로컬 주소만 입력해서는 안 됩니다.
TUN 모드는 더 낮은 계층에서 트래픽을 인계받으므로 시스템 권한, 가상 네트워크 카드 또는 관련 네트워크 확장이 필요합니다. 활성화한 뒤 네트워크가 되지 않으면 먼저 TUN을 끄고 시스템 프록시 기준선으로 돌아가세요. 시스템 프록시가 정상이라면 노드·구독·기본 DNS는 대체로 사용할 수 있으므로 TUN 권한, 라우팅 또는 DNS 가로채기 문제가 더 유력합니다. 그런 다음 TUN을 다시 활성화해 자동 라우팅, 인터페이스 선택, 사설 주소 제외와 DNS 모드를 차례로 확인하세요. TUN 장애가 발생했을 때 프로토콜 노드까지 동시에 바꾸면 유효한 비교 기준을 잃게 됩니다.
프로토콜 교체는 단일 변수 순서로 진행
VMess에서 VLESS로 전환하거나 Trojan에서 Hysteria2로 전환할 때는 대상 서버, 클라이언트, 규칙, DNS와 인계 방식을 최대한 동일하게 유지해야 합니다. 먼저 새 노드를 수동 선택 그룹에서 단독으로 연결할 수 있는지 확인한 뒤 자동 측정 또는 폴백 그룹에 추가하세요. 웹 탐색, 지속 다운로드, UDP 애플리케이션과 네트워크 전환 복구 네 가지 동작을 테스트하고 오류를 기록합니다. 새 프로토콜이 특정 업무에서만 더 나은 성능을 보인다면 전체 기본값을 한 번에 교체하지 말고 전용 정책 그룹을 구성하세요.
복잡한 프로토콜의 튜닝은 계층별로 진행해야 합니다. 첫 번째 라운드에서는 구독 기본값을 사용하고, 두 번째 라운드에서는 전송 관련 옵션만 조정하며, 세 번째 라운드에서 다중화·대역폭·혼잡 제어를 검토하고, 마지막으로 TUN과 DNS를 처리합니다. 매 라운드마다 이전 단계로 돌아갈 수 있어야 합니다. 조정 후 성능이 떨어지면 설정을 계속 추가하지 말고 가장 최근 변경 하나를 되돌리세요. 복구 가능성은 운영 설정의 중요한 속성으로, 코어 업데이트·클라이언트 전환·네트워크 변경 때 명확한 대안을 제공합니다.
mode: rule
mixed-port: 7890
allow-lan: false
log-level: info
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- GEOIP,LAN,DIRECT
- MATCH,PROXY
이 예시는 문제 해결에 사용하는 기본 구조를 보여 줍니다. 규칙 모드, 혼합 포트, LAN 스위치, 일반 로그 수준과 세 개의 규칙으로 구성되어 있습니다. 실제 설정에는 PROXY라는 이름의 정책 그룹 또는 프록시도 정의해야 합니다. 규칙은 순서대로 매칭되므로 명확한 도메인은 더 일반적인 GEOIP와 MATCH보다 앞에 배치해야 합니다. 로그에 대상이 DIRECT에 적중했다고 표시되면 프록시 프로토콜 핸드셰이크를 계속 조사할 것이 아니라 먼저 규칙 대상을 수정해야 합니다.
최종 선택 기록 작성
테스트를 마친 뒤 각 기본 노드에 프로토콜, 전송 방식, TLS 호스트 이름, 적합한 네트워크, UDP 지원 여부, 해당 provider와 폴백 노드를 기록하세요. 비밀번호 같은 민감한 정보는 저장하지 말고 문제 추적에 필요한 구조 정보만 남기면 됩니다. 모바일에서는 TUN 활성화 여부, 상태 점검 주기와 백그라운드 제한을 추가로 기록하고, 라우터에서는 코어 아키텍처, 서비스 시작 방식과 규칙 집합 출처를 기록하세요. 다음 클라이언트 또는 코어 업데이트 후 같은 기록을 기준으로 다시 테스트하면 감으로 다시 선택하는 것보다 신뢰할 수 있습니다.
최종 설정이 모든 프로토콜을 포함할 필요는 없습니다. 안정적인 TCP 노드 한두 개, 검증된 QUIC 노드 하나를 유지하고 명확한 정책 그룹으로 구성하면 대부분의 데스크톱과 모바일 환경에 대응할 수 있습니다. 노드가 너무 많으면 상태 점검, 이름 관리와 장애 추적 비용이 늘어납니다. 프로토콜 매뉴얼의 목적은 모든 기술을 동시에 활성화하라는 것이 아니라 각 방식이 해결하는 문제, 필요한 조건과 실패 시 돌아갈 경로를 이해하도록 돕는 것입니다.
기본 설정을 적용하기 전 점검 목록
- 코어가 mihomo로 명확히 지정되어 있고 클라이언트와 기기 플랫폼이 일치합니다.
- 가져오기와 변환 후에도 구독의 핵심 프로토콜 필드가 남아 있습니다.
- 서로 다른 네트워크에서 검증한 TCP 폴백 노드를 최소 하나 유지합니다.
- Hysteria2 또는 TUIC의 대상 UDP 포트에 도달할 수 있음을 확인했습니다.
- 시스템 프록시 기준선이 정상인 뒤 TUN을 활성화하고 문제를 확인합니다.
- 상태 점검 주기가 모바일 배터리와 장애 발견 요구 사항에 맞습니다.
- 규칙 대상, 정책 그룹, 노드와 provider 참조가 모두 서로 일치합니다.
- 설정 검사를 통과했으며 웹 탐색, 지속 전송, UDP와 네트워크 전환 테스트를 완료했습니다.