• mihomo
  • 로그 · 규칙 · 네트워크 스택

Clash Meta
문제 해결 가이드

증상에 따라 연결 경로를 점검하세요. 먼저 로컬 포트를 확인한 다음 규칙, DNS, 원격 연결을 살펴보고 한 번에 하나씩만 변경하세요.

처음 설치하거나 구독을 가져오는 방법은 입문 가이드를 따르세요. 이 페이지는 설정을 마친 뒤 문제가 발생한 경우를 위한 장별 문제 해결 안내서입니다. 문제가 해결되면 튜토리얼로 돌아가 연결을 다시 확인하세요. 클라이언트마다 메뉴 이름은 다를 수 있습니다. 여기서 말하는 ‘설정’, ‘연결’, ‘로그’, ‘설정 메뉴’는 각 클라이언트의 해당 기능을 뜻하며, 실제 동작 여부는 적용된 설정과 커널 로그를 기준으로 판단하세요.

인터넷에 연결되지 않음: 로컬 연결부터 확인

기존 네트워크와 프록시 경로를 먼저 구분하세요

클라이언트 연결을 끊고 시스템 프록시를 끈 다음 TUN이 종료됐는지 확인하세요. 이후 원래 직접 접속할 수 있었던 웹사이트를 열어 보세요. 여전히 접속되지 않으면 규칙을 더 수정하지 말고 Wi-Fi 인증, 케이블, 라우터, 시스템 네트워크 상태부터 확인하세요. 호텔이나 학교 네트워크는 웹페이지 인증을 먼저 요구할 수 있습니다. 인증을 마치지 않으면 프록시 서버가 정상이어도 연결되지 않습니다. 기존 네트워크가 복구되면 클라이언트를 다시 시작하고 정상 작동이 확인된 설정 하나만 불러오세요.

클라이언트를 종료한 뒤에도 인터넷이 끊긴다면 시스템에 로컬 주소를 가리키는 프록시 설정이 남아 있는지 확인하세요. 프록시 프로그램은 종료됐는데 앱이 해당 주소로 계속 요청을 보내면 연결 거부가 반복될 수 있습니다. Windows에서는 ‘설정 → 네트워크 및 인터넷 → 프록시’에서 수동 프록시를 확인하고, macOS에서는 현재 네트워크 서비스의 ‘세부사항 → 프록시’를 확인하세요. 값을 바꾸기 전에 원래 설정을 기록하세요. 회사 기기의 자동 구성 주소는 관리 정책으로 배포될 수 있으므로 임의로 삭제하지 마세요.

커널 실행 및 포트 수신 상태 확인

클라이언트 로그를 열고 가장 최근 시작 기록부터 확인하세요. 설정 파싱 실패, 포트 충돌, 권한 부족으로 인해 화면은 실행 중처럼 보여도 커널이 프록시를 제공하지 않을 수 있습니다. address already in use가 표시되면 클라이언트를 두 개 실행했거나 커널 프로세스가 남아 있는지 확인하세요. 포트 번호만 바꾸는 것으로는 해결되지 않습니다. 시스템 프록시와 터미널 환경 변수에서 이전 포트를 계속 사용하면 포트 충돌이 주소 불일치 문제로 바뀔 뿐입니다.

mixed-port는 HTTP와 SOCKS가 함께 사용하는 로컬 포트이며 노드 서버의 포트가 아닙니다. 다음 예시는 현재 설정을 확인하기 위한 일부 구성이므로 완전한 구독을 대체하지 않습니다. 실행 포트가 7890인지 확인한 뒤 프록시 주소를 명시한 명령으로 테스트하세요. 실제 포트가 다르면 명령의 주소도 맞춰야 합니다. 기존 네트워크에서 접속 가능한 웹사이트를 대상으로 로컬 진입점을 먼저 확인하세요. 대상 사이트 자체의 제한은 테스트 결과와 구분해야 합니다.

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
curl -I --connect-timeout 10 --max-time 20 --proxy http://127.0.0.1:7890 https://example.com

연결 기록으로 중단 지점 찾기

명령 실행 직후 로컬 연결에 실패하면 포트가 수신 중이 아니거나 로컬 보안 정책이 차단했을 가능성이 큽니다. 연결 기록에 요청이 나타난 뒤 실패할 때 규칙과 출구를 확인하세요. Windows PowerShell에서는 별칭에 따라 매개변수 동작이 달라지지 않도록 curl.exe를 명시하는 것이 좋습니다. 유효한 HTTP 응답을 받았다면 요청이 어떤 HTTP 서비스에는 도달한 것입니다. 응답 코드가 성공이 아니더라도 프록시가 실행되지 않는다는 뜻은 아닙니다.

연결 화면에서 대상 도메인을 검색하고 적용된 규칙, 정책 그룹, 최종 출구를 확인하세요. 규칙은 순서대로 적용되므로 앞쪽의 넓은 규칙이 뒤쪽의 구체적인 규칙보다 먼저 일치할 수 있습니다. 선택한 정책 그룹 안에 사용할 수 없는 프록시가 지정돼 있다면 바깥 그룹만 바꿔서는 복구되지 않습니다. 비교를 위해 잠시 전역 모드로 전환하고 정상 작동이 확인된 동일한 출구를 직접 지정해 볼 수 있습니다. 테스트가 끝나면 규칙 모드로 되돌리고, 잘못된 트래픽 분기를 전역 모드로 영구적으로 가리지 마세요.

프록시를 명시한 요청은 정상인데 브라우저에서 실패한다면 시스템 프록시 섹션을 확인하세요. 로그에 도메인 이름 확인 오류가 있으면 DNS 섹션을, 특정 출구만 실패하면 노드 시간 초과 섹션을 확인하세요. 테스트마다 대상, 모드, 출구, 결과를 기록하세요. 여러 사이트와 노드를 번갈아 시험하면 결과를 비교하기 어렵습니다.

노드 시간 초과: DNS·연결·핸드셰이크 나눠 확인

속도 테스트 실패가 모든 요청의 실패를 뜻하지는 않습니다

클라이언트의 지연 시간 측정은 보통 지정한 프록시를 거쳐 테스트 주소에 요청을 보내며, 해당 탐색 요청의 결과를 보여 줍니다. 서버 포트에 연결할 수 있는지만 단순히 측정하는 것이 아닙니다. 테스트 주소에 접속할 수 없거나 예상한 응답을 받지 못하거나 서버가 잦은 테스트를 제한하면 시간 초과로 표시될 수 있습니다. 먼저 같은 출구로 실제 필요한 웹사이트에 접속하고 연결 로그를 확인하세요. 실제 접속이 정상이라면 구독을 바로 삭제하지 말고 테스트 주소와 측정 간격을 확인하세요.

실패 범위를 단일 출구, 같은 서비스 제공업체의 모든 출구, 모든 제공업체의 출구로 나눠 보세요. 하나만 실패하면 해당 서버와 설정값을 먼저 확인하세요. 한 그룹이 동시에 실패하면 계정 상태, 구독 갱신, 서버 점검 여부를 확인하세요. 모든 출구가 실패하면 로컬 네트워크, DNS, 시스템 시간, 방화벽을 다시 확인하세요. 휴대폰 핫스팟은 다른 네트워크와 비교할 때 유용하지만, 네트워크를 바꾼 뒤에는 연결을 새로 설정해야 합니다. 이전 연결의 실패가 새 네트워크에서도 이어진다고 볼 수 없습니다.

오류가 발생한 단계에 따라 로그 읽기

lookup 또는 no such host는 대개 서버 도메인 이름 확인 문제를 가리킵니다. connection refused는 대상이 연결을 거부했다는 뜻이며, 포트가 열려 있지 않거나 서비스 설정이 맞지 않을 때 흔히 발생합니다. 연결 시간 초과는 제한 시간 내에 특정 단계가 완료되지 않았다는 뜻일 뿐, 계정이 만료됐다는 증거는 아닙니다. 로그가 TLS 또는 프로토콜 핸드셰이크 단계까지 진행됐다면 DNS를 계속 바꾸기보다 인증, SNI, 전송 방식, 시스템 시간을 확인하세요.

로그 단서먼저 확인할 항목성급히 단정하지 말 것
서버 도메인 이름 확인 실패노드 도메인 확인용 DNS와 직접 연결 네트워크노드 인증 정보 오류
연결 거부서버 포트와 수신 상태로컬 규칙 순서 오류
TLS 인증서 오류시간, 인증서 체인, 서버 이름인증서 검증을 끄면 해결된다는 판단
핸드셰이크 후 연결 종료프로토콜 설정, 인증, 서버 측 제한시간 제한을 늘리면 반드시 해결된다는 판단

프록시를 직접 관리하는 경우 type, 서버 주소, 포트, 인증 정보, 전송 계층 설정을 하나씩 확인하세요. TLS 서버 이름이 연결 주소와 다를 수 있으며 WebSocket 경로와 Host 값도 임의로 바꿔 쓸 수 없습니다. 제공업체의 mihomo 설정을 기준으로 대소문자와 필드 계층을 그대로 유지하세요. 구독 변환 후 알 수 없는 필드나 지원되지 않는 프로토콜 오류가 발생하면 클라이언트 이름만 보고 호환성을 판단하지 말고 실제 커널을 확인하세요.

프로토콜 기능과 네트워크 제한 구분

일부 출구는 UDP를 사용하므로 일반 TCP 웹사이트에 접속된다고 해서 해당 출구의 전송 경로까지 정상이라고 볼 수 없습니다. 반대로 TCP 프록시가 정상인데 게임이 실패한다면 앱이 UDP를 사용하거나 프록시가 해당 트래픽을 지원하지 않거나 정책 그룹이 예상한 출구를 선택하지 않았을 수 있습니다. 먼저 일반 HTTPS 요청으로 기준을 확인한 뒤 UDP가 필요한 앱을 별도로 테스트하세요. 두 가지 요구 사항을 하나의 지연 시간으로 판단하지 마세요.

시스템 날짜와 시간대, 자동 시간 설정 상태를 확인하세요. 시간이 맞지 않으면 인증서가 아직 유효하지 않거나 만료된 것으로 처리될 수 있습니다. 특정 Wi-Fi에서만 인증서 오류가 발생한다면 인증 포털이나 네트워크 검사 장비도 원인일 수 있습니다. skip-cert-verify를 만능 해결책으로 사용하지 마세요. 연결의 신뢰 경계를 바꾸는 설정일 뿐 서버 이름, 인증서 체인, 인증 매개변수 문제를 해결하지는 않습니다.

제공업체에 문의할 때는 오류가 발생한 시간과 시간대, 네트워크 종류, 프로토콜 이름, 민감 정보를 가린 오류 로그를 전달하세요. 구독 전체 주소, QR 코드, 비밀번호가 포함된 설정은 보내지 마세요. 네트워크를 바꾸면 해결된다면 접속 경로와 관련된 문제일 가능성이 있습니다. 같은 출구가 여러 기기와 네트워크에서 모두 실패할 때 서버 측 점검을 요청할 근거가 더 확실해집니다. 시간 제한을 늘리면 느린 응답을 확인할 수는 있지만, 수신 중이 아닌 포트나 잘못된 인증이 해결되지는 않습니다.

구독 실패: 요청과 설정 생성 확인

다운로드 실패와 가져오기 실패를 구분하세요

구독 갱신은 주소 요청, 응답 수신, 콘텐츠 파싱, 실행 설정 생성의 여러 단계로 이루어집니다. 오류가 네트워크 문제인지, HTTP 상태 오류인지, YAML 파싱 오류인지 먼저 확인하세요. 주소에 연결할 수 없는 문제와 콘텐츠를 파싱할 수 없는 문제는 서로 다릅니다. 전자는 네트워크, 도메인, 접근 권한을 확인하고 후자는 형식과 클라이언트 호환성을 확인하세요. 원인을 확인하지 않은 채 같은 구독을 계속 추가하면 이름과 갱신 상태가 비슷한 설정이 여러 개 생겨 잘못 선택하기 쉽습니다.

주소를 복사할 때 쿼리 매개변수를 포함한 전체 문자열이 유지됐는지 확인하세요. 메신저가 공백, 줄바꿈, 줄임표를 넣었을 수도 있습니다. 구독 URL에는 접근 자격 증명이 포함되는 경우가 많으므로 공개 스크린샷, 문의 게시물, 온라인 변환 사이트에 올리지 마세요. 브라우저에서 열리더라도 올바른 콘텐츠라는 뜻은 아닙니다. 로그인, CAPTCHA, 트래픽 소진 안내가 웹페이지로 반환될 수 있습니다. 로컬에서 응답 유형과 시작 부분을 확인해 HTML이 아니라 클라이언트가 지원하는 설정인지 판단하세요.

응답으로 서버와 로컬 문제 구분

HTTP 401 또는 403이면 인증 권한, 계정 상태, 서버 접근 정책을 확인하세요. 404는 주소가 만료됐거나 경로가 제대로 복사되지 않았을 수 있습니다. 429는 요청이 너무 잦다는 뜻이므로 수동 갱신을 중단하고 기다리세요. 서버 오류가 발생하면 현재 사용할 수 있는 설정을 보존하고 나중에 다시 시도하거나 제공업체에 문의하세요. 이런 상태 코드는 로컬 포트만 바꿔서 해결할 수 없습니다. 한 번의 갱신 실패만으로 캐시된 설정을 삭제할 필요도 없습니다.

구독 주소에 프록시를 통해서만 접속할 수 있는데 현재 설정에 사용 가능한 출구가 없다면 갱신이 서로 의존하는 상황이 됩니다. 클라이언트의 직접 연결 갱신 또는 프록시 연결 갱신 옵션을 먼저 시도하고 이번 요청이 어떤 경로를 사용했는지 기록하세요. 필요하다면 해당 주소에 접속 가능한 네트워크로 전환하세요. 이전 설정을 보존한 채 사용 가능한 출구로 먼저 연결해 갱신할 수도 있습니다. 아직 가져오지 않은 구독을 유일한 네트워크 진입점으로 설정하지 마세요.

YAML과 최종 병합 결과 확인

들여쓰기 오류가 발생하면 로그에 표시된 줄 번호와 주변 내용을 먼저 살펴보세요. YAML은 공백으로 계층을 표현하므로 탭, 전각 콜론, 짝이 맞지 않는 따옴표로 파싱에 실패할 수 있습니다. 구문 분석에 성공해도 자료형이 잘못됐을 수 있습니다. 예를 들어 목록을 문자열로 쓰거나 불리언 값을 잘못된 계층에 넣으면 커널을 불러올 때 오류가 날 수 있습니다. 최근 수동 변경을 먼저 되돌리고 필요한 부분을 단계별로 복원하세요. 파일 전체를 한꺼번에 다시 작성하지 마세요.

mode: rule
proxy-groups:
  - name: 출구 선택
    type: select
    proxies:
      - DIRECT
rules:
  - MATCH,출구 선택

위 예시는 목록과 들여쓰기 구조를 확인하기 위한 것이며 직접 연결 출구만 포함합니다. 실제 구독의 프록시 그룹 이름은 규칙에서 참조하는 이름과 공백 및 대소문자까지 정확히 일치해야 합니다. 로그에 프록시나 정책 그룹을 찾을 수 없다고 표시되면 원본 구독만 보지 말고 생성된 실행 설정을 확인하세요. 클라이언트는 다운로드 후 오버라이드, 병합, 스크립트 처리를 계속할 수 있으므로 후처리 단계에서 문제가 생겼을 수도 있습니다.

proxy-providers는 프록시 소스를 제공하고 rule-providers는 규칙 모음을 제공합니다. 두 항목은 콘텐츠 형식이 다릅니다. 규칙 제공자는 behavior와 파일 내용도 확인해야 합니다. 도메인 목록, IP 목록, classical 규칙은 필드 하나만 바꿔 서로 대체할 수 없습니다. 원격 리소스마다 별도의 경로를 사용해 여러 제공자가 같은 캐시 파일을 덮어쓰지 않도록 하세요.

‘오버라이드 비활성화 → 원본 구독 갱신 → 로드 여부 확인 → 오버라이드를 하나씩 다시 활성화’ 순서로 원인을 찾으세요. 갱신이 끝나면 현재 활성 설정, 프록시 그룹 구성원, 규칙 수가 적절한지 확인하고 연결을 새로 만들어 검증하세요. 여러 기기를 동기화할 때는 구독 소스와 기기별 설정을 구분해야 합니다. 포트와 TUN 권한은 그대로 복사하기 어려우므로 자세한 내용은 기기 간 설정 동기화 비교를 참고하세요.

속도 저하: 대역폭·지연 시간·부하 구분

재현 가능한 비교 조건부터 설정하세요

속도 저하는 웹페이지 첫 화면 로딩 지연, 동영상 버퍼링, 낮은 다운로드 속도, 조작 지연 등 서로 다른 현상을 가리킬 수 있습니다. 하나의 기준으로 판단하지 마세요. 기기, 네트워크, 대상, 출구를 고정한 뒤 변경 전후를 비교하세요. 웹사이트를 처음 열 때만 느리고 이후 전송은 정상이라면 DNS, 연결 설정, 핸드셰이크를 먼저 확인하세요. 다운로드 내내 느릴 때는 가용 대역폭, 서버 부하, 대상 사이트의 제한을 살펴보세요. 모든 노드를 반복해서 측정하는 것보다 증상을 기록하는 편이 유용합니다.

먼저 직접 접속할 수 있는 리소스로 로컬 네트워크의 기준 속도를 확인한 뒤 프록시를 거쳐 같은 리소스에 접속하세요. 프록시가 필요한 대상이라면 사용 가능한 두 출구를 비교하세요. 테스트 중에는 시스템 업데이트, 클라우드 동기화, 기타 대용량 작업을 일시 중지해 여러 기기의 대역폭 공유로 인한 오판을 방지하세요. Wi-Fi 신호, 라우터 부하, 모바일 네트워크 혼잡은 프록시보다 앞단의 문제이므로 클라이언트를 바꿔도 해결되지 않습니다.

지연 시간 측정은 처리량 순위가 아닙니다

지연 시간이 낮은 출구라고 해서 처리량이 높거나 모든 웹사이트에 적합한 것은 아닙니다. 자동 선택 정책은 대개 테스트 요청을 기준으로 동작하며 지속적으로 다운로드 대역폭을 측정하지 않습니다. 특정 웹사이트만 느리다면 해당 사이트의 CDN, 계정 제한, 출구에서 대상까지의 경로를 확인하세요. 모든 대상이 느리다면 접속 네트워크와 서버 전반의 상태를 살펴보세요. 대용량 파일 다운로드 한 번의 결과를 모든 앱의 사용 경험에 확대 적용하지 마세요.

연결 기록에서 실제 트래픽이 거친 정책 그룹을 확인하세요. 규칙에서 자동 그룹을 선택했더라도 자동 그룹 안에서 다시 다른 선택 그룹을 참조할 수 있습니다. 화면에 표시된 상위 그룹 이름이 최종 출구를 뜻하지는 않습니다. 정책을 변경해도 이미 설정된 장시간 연결은 이전 경로를 계속 사용할 수 있으므로 대상 앱 연결을 닫거나 해당 연결만 끊고 다시 시도하세요. 중요한 다운로드나 원격 세션 중에 모든 연결을 지우면 문제 해결 과정에서 추가 중단이 발생할 수 있습니다.

DNS·프로토콜·TUN 부하 확인

새 도메인을 열 때마다 잠시 멈춘다면 DNS 요청이 여러 번 시간 초과된 뒤 다른 경로로 재시도되는지 확인하세요. 업스트림을 여러 개 설정한다고 자동으로 더 빨라지지는 않습니다. 하나가 연결되지 않거나 부트스트랩 DNS 설정이 잘못됐거나 불안정한 출구로 질의가 전송되면 새 연결이 늦어질 수 있습니다. 우선 현재 네트워크에서 사용할 수 있는 DNS 경로 하나로 기준을 확인한 뒤 필요한 분기를 추가하세요. 캐시는 반복 조회에만 영향을 주며 최초 조회 경로 문제를 해결하지 못합니다.

브라우저가 HTTP/3를 먼저 시도했지만 출구나 현재 네트워크의 UDP 경로가 불안정해 TCP로 전환되면 처음에는 멈칫하다가 나중에 회복되는 것처럼 보일 수 있습니다. 비교를 위해 해당 앱에서 QUIC를 일시적으로 끌 수 있지만, 음성 통화, 게임, 일부 프로토콜은 UDP에 의존하므로 UDP를 모두 영구 차단하는 방식은 최적화가 아닙니다. 진단 중에는 연결 유형과 대상 포트를 함께 살펴 느린 요청이 실제로 UDP를 사용하는지 확인하세요.

TUN은 더 많은 트래픽을 처리하므로 켜면 시스템 프록시가 포착하지 못한 백그라운드 트래픽이 새로 드러날 수 있습니다. 보안 소프트웨어, 다른 VPN, 가상 네트워크 어댑터와 경로가 충돌할 수도 있습니다. 같은 대상을 ‘명시적 HTTP 프록시’와 ‘TUN 연결’로 각각 비교하세요. 전자는 정상이고 후자만 느리다면 구독을 바꾸기보다 라우팅과 네트워크 스택을 먼저 확인하세요. stack을 변경하기 전에 현재 커널과 플랫폼의 지원 여부를 확인하고 원래 값을 기록해 두세요.

작은 요청은 정상이지만 큰 응답이 멈춘다면 경로 MTU나 중간 네트워크 장비를 의심할 수 있습니다. 다만 먼저 대상의 속도 제한과 패킷 손실을 배제하세요. MTU는 실제 터널 인터페이스에 맞춰 조정하고 변경 전후를 비교해야 합니다. 임의의 값을 모든 네트워크 어댑터에 적용하지 마세요. 방화벽을 반복해서 끄는 것도 속도 개선 방법이 아닙니다. 실제 차단 기록을 확인한 뒤 클라이언트와 관련된 프로그램이나 인터페이스 규칙만 조정하세요.

문제 해결이 끝나면 재현 가능한 기록을 남기세요. 같은 대상과 시간대에서 두 출구, 두 가지 접속 방식으로 측정한 결과와 TUN 사용 여부를 기록하면 됩니다. 특정 서버 경로에서 문제가 계속 발생한다면 해당 정보를 제공업체에 전달하는 것이 더 효과적입니다. 근거 없이 캐시를 비우거나 소프트웨어를 다시 설치하거나 동시 연결 수를 늘리는 방법을 기본 속도 개선 절차로 삼지 마세요.

DNS 문제: 조회 경로와 출구 확인

어느 구성 요소가 DNS 조회를 요청하는지 확인하세요

DNS 오류는 커널에서만 발생하지 않습니다. 시스템 리졸버, 브라우저 보안 DNS, 앱 자체 리졸버, mihomo DNS가 동시에 작동할 수 있습니다. 실패한 요청이 클라이언트에 들어왔는지 확인한 다음 로그에서 이름 확인 오류를 살펴보세요. 브라우저는 열리는데 터미널에서 실패한다면 두 환경의 DNS 경로가 다를 수 있습니다. 터미널에서는 조회되는데 브라우저에서 실패한다면 앱의 암호화 DNS에 접속할 수 없는 경우일 수 있습니다. 조회 도구 하나의 결과만으로 모든 앱의 상태를 판단할 수 없습니다.

도메인에 접속할 때 프록시를 명시한 HTTP 요청은 보통 대상 이름을 프록시가 처리할 수 있습니다. SOCKS는 로컬에서 이름을 확인하는 방식과 원격에서 확인하는 방식을 구분해야 합니다. 아래 명령은 socks5h를 사용해 도메인 이름 확인을 프록시 측에 맡기므로 앱의 로컬 DNS 조회와 비교할 수 있습니다. 명령은 정상인데 앱에서 실패한다면 모든 시스템 DNS를 바로 바꾸기보다 앱의 이름 확인 방식을 확인하세요. 명령의 포트는 실제 혼합 포트와 일치해야 합니다.

curl -I --connect-timeout 10 --max-time 20 --proxy socks5h://127.0.0.1:7890 https://example.com

fake-ip의 정상 동작 이해

enhanced-mode: fake-ip는 조건에 맞는 도메인에 가상 주소를 반환하고 커널이 도메인과 연결의 대응 관계를 유지하도록 합니다. 198.18.0.0/16 범위의 주소가 보인다고 해서 곧바로 DNS 오염으로 판단하지 마세요. 중요한 점은 해당 주소로 향하는 트래픽도 같은 커널이 처리하는지 여부입니다. 앱이 가상 주소를 받은 뒤 프록시를 우회하거나 커널이 재시작된 후 오래된 매핑을 사용하면 연결 문제가 생길 수 있습니다.

관련 앱을 종료하고 커널을 다시 시작한 뒤 이번 문제와 관련된 시스템 또는 앱 DNS 캐시를 지우고 다시 시도하세요. Windows에서는 ipconfig /flushdns를 사용할 수 있습니다. 다른 운영체제에서는 실제 DNS 서비스에 맞는 방법을 사용하세요. 캐시의 출처를 확인하지 않은 채 클라이언트 데이터 디렉터리 전체를 삭제하지 마세요. 로컬 네트워크 기기, 프린터, 특정 인증 도메인에 호환성 문제가 있을 때는 모든 도메인을 제외하지 말고 해당 도메인만 fake-ip 필터링 대상으로 지정하는 방법을 검토하세요.

dns:
  enable: true
  listen: 127.0.0.1:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - https://1.1.1.1/dns-query

이 설정은 DNS 일부만 보여 주며 업스트림 주소는 현재 네트워크에서 접속 가능해야 합니다. 1053 포트에서 수신한다고 해서 시스템이 자동으로 해당 서비스를 사용하는 것은 아니며 모든 DNS 요청을 자동으로 처리하지도 않습니다. 클라이언트의 DNS 가로채기 기능을 사용하거나 조회 진입점을 직접 지정해야 합니다. nslookup example.com 127.0.0.1은 로컬 53번 포트를 확인하므로 위 예시의 1053번 포트를 검증하지 못합니다. 시스템에 dig가 설치돼 있다면 아래 명령으로 포트를 지정하세요.

dig @127.0.0.1 -p 1053 example.com A

부트스트랩 DNS와 프록시 출구 간 의존 관계 방지

업스트림 주소가 도메인 형식의 DoH 주소라면 업스트림에 연결하기 전에 먼저 해당 주소를 조회해야 합니다. 프록시 서버도 도메인 주소를 사용하면 노드 도메인 조회가 필요합니다. default-nameserver의 부트스트랩 조회 기능과 proxy-server-nameserver의 프록시 노드 도메인 조회 기능을 구분하세요. 아직 연결되지 않은 노드를 거쳐야만 노드 도메인을 조회할 수 있도록 설정하지 마세요. 모든 조회를 검증되지 않은 하나의 출구로 강제로 보내는 것도 피하세요.

회사 도메인과 가정용 로컬 네트워크 이름은 내부 DNS에서만 조회될 수 있습니다. 공용 업스트림을 설정한 뒤 이 이름이 조회되지 않아도 공용 DNS 서비스의 문제라는 뜻은 아닙니다. 내부 기록이 없는 서버로 요청이 전송됐을 수 있습니다. 내부 DNS 경로를 유지하고 적절한 도메인 규칙으로 분기하세요. 내부 네트워크 대역이 프록시로 잘못 전달되는지도 확인하세요. 설정을 바꾸기 전에 기존 네트워크에서 제공한 DNS를 기록하고, 특히 회사 기기의 관리 설정은 덮어쓰지 마세요.

‘DNS 누출’ 여부는 기대한 조회 경로를 기준으로 판단해야 합니다. 테스트 페이지에 표시된 재귀 DNS 리졸버는 해당 테스트 도메인의 최종 조회 위치를 보여 줄 뿐, 다른 연결이 프록시를 우회한다는 직접적인 증거는 아닙니다. 어떤 도메인을 어떤 경로로 조회해야 하는지 먼저 정하고 브라우저 보안 DNS, TUN의 DNS 가로채기, 연결 기록을 함께 확인하세요. 암호화 DNS는 조회 전송을 보호하지만 지정한 프록시 출구를 사용하도록 자동 보장하지 않습니다.

시스템 프록시가 작동하지 않음: 앱 연결 방식 확인

시스템 프록시는 모든 네트워크 트래픽을 가로채지 않습니다

시스템 프록시는 앱에 제공되는 연결 설정이며 실제 사용 여부는 앱과 네트워크 라이브러리에 따라 다릅니다. 브라우저는 정상인데 명령줄 도구, 게임, 스토어 앱이 실패해도 반드시 규칙 오류인 것은 아닙니다. 프록시 주소를 명시한 명령으로 커널 진입점을 먼저 확인한 뒤 대상 앱이 시스템 설정을 읽는지 살펴보세요. 어떤 앱은 HTTP 또는 SOCKS 주소를 별도로 입력해야 하고, 어떤 앱은 환경 변수를 사용하며, 일부는 TUN을 통해 처리하는 편이 낫습니다. 하나의 설정으로 모든 프로세스가 프록시를 사용한다고 가정하지 마세요.

Windows의 사용자 프록시, 자동 프록시 스크립트, WinHTTP 설정은 서로 다른 진입점입니다. netsh winhttp show proxy로 WinHTTP 상태를 확인할 수 있지만 현재 브라우저가 사용하는 설정을 보여 주는 것은 아닙니다. 앱 하나를 고치려고 모든 시스템 서비스에 프록시를 설정하지 마세요. 서비스 계정, 업데이트 구성 요소, 사용자 세션마다 필요한 네트워크가 다를 수 있습니다. 실패한 프로그램이 어떤 네트워크 라이브러리를 사용하는지 파악한 뒤 적절한 설정 방법을 선택하세요.

로컬 주소·포트·환경 변수 확인

로컬 앱은 보통 127.0.0.1과 실제 수신 포트를 사용합니다. 시스템 프록시에 이전 포트가 남아 있거나 SOCKS 전용 입력란에 HTTP 주소를 넣으면 연결되지 않습니다. allow-lan: false여도 같은 기기의 루프백 연결은 가능합니다. 하지만 다른 기기에서 해당 기기 자신의 127.0.0.1을 컴퓨터 주소로 사용할 수는 없습니다. 로컬 네트워크에서 공유해야 하는 경우에만 수신 주소, 방화벽, 신뢰 경계를 추가로 확인하세요.

터미널 환경 변수는 새로 실행한 하위 프로세스에 전달됩니다. 클라이언트에서 포트를 바꿔도 이미 열려 있는 터미널에는 이전 값이 남아 있을 수 있습니다. 시스템 프록시를 꺼도 직접 설정한 환경 변수가 자동으로 삭제되지는 않습니다. 다음 예시는 Unix 계열 셸의 현재 세션에서 비교하기 위한 것으로 영구 설정을 변경하지 않습니다. 기존 변수를 확인하고 출처를 기록한 뒤 테스트 값을 설정하세요. 복구할 때는 셸 시작 파일, 개발 도구 설정, 프로젝트 스크립트에서 프록시 값을 다시 주입하는지도 확인해야 합니다.

env | grep -i proxy
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
curl -I --max-time 20 https://example.com
unset http_proxy https_proxy

여기서 https_proxy 값이 http://로 시작하는 것은 HTTPS 대상의 연결을 위해 앱이 로컬 HTTP 프록시에 접속한 뒤 HTTPS 터널을 만든다는 뜻입니다. 대상 통신이 암호화되지 않는다는 뜻은 아닙니다. 도구마다 환경 변수의 대소문자와 우선순위 처리 방식이 다르며 ALL_PROXY와 NO_PROXY도 동작에 영향을 줄 수 있습니다. 확인할 때는 이런 변수도 살펴보고 지나치게 넓은 우회 도메인이나 네트워크 대역이 있는지 확인하세요.

UWP·컨테이너·TUN 환경 확인

Windows의 일부 스토어 앱은 루프백 연결이 제한돼 있어 시스템 프록시가 올바르더라도 로컬 프록시 포트에 연결하지 못할 수 있습니다. 먼저 일반 데스크톱 앱이 같은 포트로 정상 연결되는지 확인한 뒤 해당 앱에 루프백 예외를 추가하거나 TUN을 사용하는 방안을 검토하세요. 모든 앱에 한꺼번에 예외를 적용하지 마세요. 명령과 적용 범위는 UWP 루프백 제한 문제 해결을 참고하세요. 이 문제는 원격 프록시 인증을 변경할 필요가 없습니다.

컨테이너, 가상 머신, WSL은 별도의 네트워크 환경을 사용하므로 내부의 루프백 주소가 호스트를 가리키지 않을 수 있습니다. 현재 네트워크 모드에서 호스트에 연결 가능한 주소를 찾고 방화벽과 수신 범위를 확인하세요. 로컬 프록시를 모든 인터페이스에 바로 공개하지 마세요. 같은 네트워크의 다른 기기가 공유 프록시를 사용할 수 있습니다. 꼭 공개해야 한다면 신뢰할 수 있는 접속자만 허용하고 클라이언트가 지원하는 접근 제어를 설정하세요.

TUN은 가상 인터페이스와 라우팅을 통해 트래픽을 처리하며 보통 추가 권한이나 서비스 구성 요소가 필요합니다. 활성화 후 로그에서 장치 생성, 경로 설치, DNS 가로채기 상태를 확인하세요. VPN 두 개가 동시에 기본 경로를 수정하거나 가상 머신 대역과 터널 대역이 겹치면 특정 대상에 접속할 수 없게 될 수 있습니다. 다른 트래픽 가로채기 프로그램을 중지해 비교한 뒤 복구되면 명시적인 경로를 통해 함께 사용할 수 있는지 살펴보세요. 네트워크 어댑터를 계속 재설치하지 마세요.

마지막으로 대상 앱에서 새 요청을 보내고 연결 화면에서 프로세스 또는 대상, 적용된 규칙, 출구를 확인하세요. 웹사이트에 표시된 출구가 바뀌었다는 사실은 해당 웹사이트의 연결 경로가 정상이라는 것만 증명합니다. 복구 후 브라우저, 명령줄, 이전에 실패한 앱을 각각 테스트하세요. 클라이언트를 종료한 뒤 시스템 프록시 설정이 복구되는지도 확인해 중지된 포트를 가리키는 설정이 남지 않도록 하세요.

클라이언트 충돌: UI·커널·설정 분리

어느 구성 요소가 종료됐는지 먼저 확인

그래픽 인터페이스, 백그라운드 서비스, mihomo 커널은 서로 다른 구성 요소입니다. 창이 사라져도 트래픽이 계속 통과한다면 인터페이스만 문제가 생겼을 수 있습니다. 창은 남아 있는데 연결이 모두 끊겼다면 커널이 종료됐는지 확인하세요. 시작 중, 설정 가져오기 중, TUN 활성화 중, 일정 시간 실행한 뒤 중 언제 문제가 발생했는지 기록하고 해당 시각의 로그를 확인하세요. ‘갑자기 꺼짐’이라는 설명만으로는 파싱 오류, 권한 문제, 프로세스 충돌, 시스템 종료를 구분하기 어렵습니다.

처음 문제가 발생했다고 바로 데이터를 지우지 마세요. 클라이언트를 종료하고 설정 디렉터리, 오버라이드 파일, 필요한 로그를 백업한 뒤 백그라운드에 남은 프로세스가 있는지 확인하세요. 인터페이스를 반복해서 열면 두 번째 커널이 실행돼 포트 충돌이 추가로 발생하고 원래 문제가 가려질 수 있습니다. 클라이언트에 ‘로그 폴더 열기’ 또는 ‘진단 정보’ 기능이 있다면 해당 기능을 우선 사용하세요. 디렉터리 경로는 플랫폼과 클라이언트마다 다르므로 다른 프로그램의 경로를 그대로 적용하지 마세요.

최소 설정으로 커널 확인

커널 실행과 구독 콘텐츠를 따로 확인하세요. 아래 설정은 로컬에서만 수신하고 직접 연결 규칙을 사용해 프로그램이 실행되는지 확인하기 위한 것입니다. 실제 프록시 설정을 대체하지 않습니다. 별도의 테스트 파일로 저장하고 원본 설정을 덮어쓰지 마세요. 최소 설정에서는 안정적으로 실행되고 전체 구독에서 실패한다면 프록시 제공자, 규칙 제공자, DNS, TUN을 하나씩 다시 추가해 문제를 일으키는 항목을 찾으세요.

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
rules:
  - MATCH,DIRECT

mihomo를 단독으로 사용할 경우 먼저 설정 테스트 명령을 실행할 수 있습니다. 아래 예시는 현재 디렉터리에 커널과 테스트 설정이 있다고 가정합니다. 그래픽 클라이언트 사용자는 테스트를 위해 커널을 별도로 내려받지 않아도 됩니다. 테스트 명령이 통과해도 설정을 파싱하고 검사할 수 있다는 뜻일 뿐, 원격 리소스 다운로드나 프록시 연결까지 보장하지 않습니다. 외부 규칙 파일의 경로, 상대 경로, 실행 권한은 실제 실행 환경에서 확인해야 합니다.

# Linux 또는 macOS
./mihomo -t -f ./config.yaml

# Windows PowerShell
.\mihomo.exe -t -f .\config.yaml

아키텍처·권한·업그레이드 흔적 확인

설치 파일이 운영체제와 프로세서 아키텍처에 맞는지 확인하세요. 파일을 다운로드할 수 있다고 현재 시스템에서 실행할 수 있는 것은 아닙니다. 명령줄 커널은 그래픽 클라이언트 설치 프로그램이 아닙니다. 일반 사용자는 먼저 설치 파일 페이지에서 Clash Plus를 선택한 다음 플랫폼에 맞춰 다른 클라이언트도 비교할 수 있습니다. 여러 클라이언트의 커널 파일과 설정 디렉터리를 서로 복사하지 마세요. 인터페이스가 예상하는 제어 인터페이스와 실행 매개변수가 다를 수 있습니다.

TUN을 켜거나 서비스를 설치한 뒤에만 종료된다면 관리자 권한 승인, 백그라운드 서비스 상태, 보안 소프트웨어 차단 기록을 먼저 확인하세요. macOS에서는 필요한 네트워크 구성 요소를 허용하라는 시스템 안내에 따라야 합니다. Windows에서는 서비스 설치가 성공했는지 확인하고 Linux에서는 실제 실행 사용자와 장치 권한을 살펴보세요. 설정 디렉터리 전체에 재귀적으로 모든 권한을 열거나 특정 서비스 권한 문제를 가리기 위해 모든 작업을 계속 최고 권한으로 실행하지 마세요.

인터페이스가 실행된 뒤 빈 화면만 표시된다면 렌더링 환경이나 앱 캐시 문제일 수 있습니다. 커널 로그가 정상이라면 프록시 프로토콜을 바꾸지 마세요. 클라이언트를 완전히 종료한 뒤 다시 실행하고, 지원되는 렌더링 호환 옵션이 있다면 하나씩 시험하세요. 인터페이스 캐시를 초기화하기 전에 데이터를 백업하고 설정까지 삭제되는 작업인지 확인하세요. 시스템 로그의 앱 충돌 기록을 보면 그래픽 구성 요소나 기본 실행 환경 문제인지 판단하는 데 도움이 됩니다.

오래 실행한 뒤 종료된다면 임의의 ‘정상 메모리 사용량’을 기준으로 삼지 말고 시스템 메모리 압박, 디스크 공간, 로그 증가를 확인하세요. 재현하는 동안에만 디버그 로그를 켜고 끝나면 info로 되돌리세요. 많은 연결을 장기간 기록하면 디스크 공간을 차지할 뿐 아니라 민감한 접속 흔적도 남습니다. 특정 원격 규칙 모음을 활성화했을 때만 문제가 발생한다면 민감 정보를 제거한 최소 재현 설정을 보관하고 발생 절차를 기록하세요.

기존 클라이언트의 유지보수가 중단됐다면 같은 아카이브 파일을 반복해서 설치하기보다 다른 클라이언트로 옮기는 편이 장기적으로 적절합니다. Clash for Windows와 ClashX Meta라는 아카이브 이름만으로 설정이 다른 클라이언트에 그대로 적용된다고 볼 수 없습니다. 구독, 사용자 지정 규칙, 오버라이드 로직을 각각 옮기고 연결을 확인한 뒤 기존 소프트웨어를 삭제하세요. 절차는 mihomo 커널 클라이언트로 마이그레이션을 참고하세요.

모바일 문제: VPN·백그라운드·네트워크 전환

Android: VPN 서비스 상태부터 확인

Android 클라이언트는 보통 시스템 VPN 서비스를 통해 트래픽을 처리합니다. 같은 사용자나 프로필에서 다른 VPN, 일부 로컬 필터링 도구, 기업 보안 앱이 이 기능을 사용 중일 수 있습니다. 다른 트래픽 가로채기 앱을 먼저 종료한 뒤 Clash Plus, Clash Meta for Android 또는 FlClash에서 다시 연결하고 시스템 VPN 표시와 권한 상태를 확인하세요. 앱 첫 화면의 버튼 색상만으로 백그라운드 서비스가 계속 실행 중이라고 판단하지 마세요.

특정 앱만 실패한다면 앱별 분기 목록을 확인하세요. 제외 목록에 추가된 앱은 예상한 대로 프록시를 거치지 않습니다. 선택한 앱만 프록시를 사용하는 모드에서는 선택하지 않은 앱도 처리되지 않습니다. 업무용 프로필과 개인 프로필은 앱과 VPN 환경이 다를 수 있으므로 개인 프로필의 연결이 정상이라고 업무용 프로필에서도 같은 경로를 사용한다고 볼 수 없습니다. 먼저 문제가 발생한 앱이 어느 프로필에 속하는지 확인하고 회사 정책 조정이 필요한지 판단하세요.

화면 잠금 후 연결 끊김: 절전 제한과 라우팅 상태 구분

화면이 켜져 있을 때는 정상이고 잠근 뒤 연결이 끊긴다면 VPN 서비스가 계속 실행 중인지 먼저 확인한 다음 백그라운드 활동, 백그라운드 데이터, 자동 시작을 제한하는 시스템 설정을 살펴보세요. Android 제조사마다 설정 경로가 다를 수 있습니다. ‘설정 → 앱 → 해당 클라이언트 → 배터리’에서 백그라운드 실행 권한을 찾고 모바일 데이터 제한도 확인하세요. 한 번에 하나씩 변경하고 화면을 잠근 뒤 다시 테스트하세요. 모든 절전 기능을 한꺼번에 끄면 실제로 필요한 예외를 찾기 어렵습니다.

시스템에서 상시 VPN 또는 VPN을 통하지 않는 연결 차단을 켠 경우, 서비스가 종료되면 기기 전체가 오프라인처럼 보일 수 있습니다. 이는 노드가 갑자기 실패했다기보다 차단 정책과 서비스 상태가 함께 작용한 결과일 수 있습니다. 임시로 네트워크를 복구하기 전에 해당 옵션의 보호 목적을 이해하고 시스템 VPN 설정에서 조정한 뒤 클라이언트를 복구해 다시 확인하세요. 전체 점검 절차는 Android 백그라운드 및 배터리 최적화 문제 해결을 참고하세요.

배터리 사용량이 높아도 앱별 순위만 보고 판단하지 마세요. VPN 프로세스는 다른 앱의 터널 트래픽을 처리하므로 시스템 사용량 통계에 일부 네트워크 소비가 VPN 앱으로 집계될 수 있습니다. 비슷한 사용 시간대의 화면 켜짐 시간, 데이터 전송 활동, 네트워크 종류를 비교한 다음 지나치게 잦은 상태 확인, 구독 갱신, 재연결이 있는지 살펴보세요. 유휴 상태에서도 로그가 계속 쌓이면 모든 DNS 기능을 끄기보다 반복 요청의 출처를 먼저 찾으세요.

iOS: 터널과 온디맨드 연결 확인

iOS 사용자는 설치 파일 페이지에서 Clash Plus의 App Store 페이지로 이동할 수 있으며 공식 사이트는 clashplus.io입니다. 연결에 문제가 있으면 시스템 VPN 설정과 앱의 현재 설정이 일치하는지 확인하고 다른 네트워크 확장이 트래픽을 처리하는지도 살펴보세요. 앱을 백그라운드로 전환했다고 터널이 종료되는 것은 아닙니다. 시스템 VPN 상태와 새 요청의 결과를 함께 확인하세요.

온디맨드 연결을 활성화하면 네트워크가 바뀐 뒤 시스템이 터널을 자동으로 다시 만들 수 있습니다. 수동으로 연결을 끊은 직후 다시 연결되더라도 조작이 반영되지 않은 것은 아닐 수 있으므로 현재 온디맨드 규칙과 적용 네트워크를 확인하세요. Wi-Fi에서는 정상이고 셀룰러에서는 실패한다면 앱의 셀룰러 데이터 권한을 먼저 확인한 뒤 현재 네트워크에서 구독 주소와 출구에 접속할 수 있는지 살펴보세요. 휴대폰 네트워크를 전환하면 기존 연결의 원본 주소가 바뀌므로 일부 장시간 연결은 다시 설정해야 합니다.

네트워크 전환·인증 포털·로컬 네트워크 접속

Wi-Fi에서 셀룰러 네트워크로 전환한 뒤 시스템 네트워크가 안정될 때까지 기다리고 대상 요청을 새로 보내세요. 여전히 실패한다면 설정을 삭제하지 말고 VPN을 다시 연결하세요. 공용 Wi-Fi의 인증 페이지는 로컬 네트워크나 특정 도메인에 의존할 수 있습니다. 필요한 경우 프록시를 잠시 중지하고 인증을 마친 뒤 다시 켜세요. 시스템이 터널 외부 트래픽을 항상 차단한다면 앞서 설명한 VPN 정책도 확인해 터널이 연결되기 전에 인증 요청이 차단되지 않도록 하세요.

휴대폰 화면 미러링, 프린터, 홈 서버 연결이 실패하면 로컬 네트워크 주소가 원격 프록시로 잘못 전송되는지, VPN 설정에서 필요한 로컬 접속을 허용하는지 확인하세요. 프린터 한 대 때문에 모든 트래픽을 직접 연결로 바꾸지 마세요. 대상 로컬 IP 주소와 도메인을 기록하고 범위를 최소화한 규칙을 사용하세요. 앱이 기기 검색 프로토콜을 사용하는 경우 TCP 대상 하나만 규칙에 추가해도 충분하지 않을 수 있으므로 로컬 브로드캐스트나 멀티캐스트 동작도 고려해야 합니다.

모바일 문제를 재현할 때는 운영체제, 접속 네트워크, 화면 잠금 전후 상태, VPN 유지 여부, 실패한 앱의 범위를 기록하세요. 설정 전체를 공개해 도움을 요청하지 마세요. 복구한 뒤 화면이 켜진 상태의 접속, 짧은 화면 잠금, Wi-Fi와 셀룰러 전환, 로컬 네트워크 접속을 차례로 테스트하세요. 기본 개념은 문제 해결에서 확인하고 설정을 다시 가져오려면 입문 가이드의 설정 단계로 돌아가세요.