Android에서 Clash 클라이언트 안정적으로 실행하기: VpnService 권한 및 배터리 절전 예외 설정

Android용 Clash의 핵심 두 가지를 정리합니다. VpnService 권한 팝업의 의미와 실패 원인, 제조사별 절전 기능이 백그라운드 프록시를 종료하는 이유, 예외 등록 및 배터리 최적화 해제 경로를 안내합니다.

먼저 세 가지 실행 계층을 구분하세요: 코어, VpnService, 백그라운드 프로세스

Android의 Clash 계열 클라이언트는 보통 서로 연동되는 세 부분으로 구성됩니다. 규칙 매칭과 연결 전달을 담당하는 Clash Meta(mihomo) 코어, Android 시스템 인터페이스를 통해 가상 네트워크를 만드는 VpnService, 그리고 화면·알림·설정 관리를 담당하는 앱 프로세스입니다. 노드가 사용 가능하다는 표시만으로는 코어가 특정 테스트를 완료했다는 뜻일 뿐입니다. 상태 표시줄에 VPN 표시가 나타나야 시스템이 지정한 트래픽을 해당 앱에 전달하고 있다는 의미입니다.

VpnService는 Android가 제공하는 로컬 VPN 인터페이스입니다. 클라이언트가 권한을 얻으면 TUN 가상 네트워크 카드를 만들고, 시스템은 앱 트래픽을 이 가상 네트워크 카드에 기록합니다. 이후 mihomo가 규칙에 따라 직접 연결, 프록시 또는 차단을 결정합니다. 이 과정은 기존 기업용 VPN 서버에 연결하는 것과 다릅니다. 가상 네트워크 카드는 로컬 기기에 있으며, 실제 외부 연결은 클라이언트가 설정에 지정된 프록시 노드를 통해 만듭니다.

확인 항목 정상 상태 이상 발생 시 의미
클라이언트 실행 버튼 실행 중이거나 중지할 수 있는 메뉴가 표시됨 코어가 아직 시작되지 않았거나 이미 종료됨
시스템 VPN 표시 상태 표시줄 또는 빠른 설정에서 확인 가능 VpnService가 생성되지 않았거나 권한이 취소되었거나 다른 VPN으로 대체됨
상시 알림 연결 상태, 업·다운로드 속도 또는 중지 버튼이 표시됨 포그라운드 서비스가 실행되지 않아 백그라운드 유지 능력이 저하될 수 있음
로그 연결, 규칙 매칭 및 DNS 기록이 계속 추가됨 로그 증가가 멈추면 대개 프로세스가 일시 중지되었거나 종료된 상태임

VPN 모드와 로컬 포트는 서로 다른 기능입니다

설정에서 자주 사용하는 Mixed 포트는 7890이며, 외부 제어 포트는 보통 127.0.0.1:9090, DNS 수신 포트는 1053으로 설정할 수 있습니다. 이 포트는 수동 프록시, 제어 인터페이스 또는 DNS 전달에 사용됩니다. Android VPN 모드를 활성화하면 대부분의 앱 트래픽을 TUN이 처리하므로 각 앱에 127.0.0.1:7890을 따로 입력할 필요가 없습니다. 시스템 Wi-Fi 프록시와 VPN 모드를 동시에 켜면 트래픽이 중복 전달될 수 있으므로, 문제를 확인할 때는 먼저 한 가지 방식만 남기세요.

VpnService 권한 팝업의 의미와 올바른 처리 방법

클라이언트에서 처음 VPN 모드를 시작하면 Android가 시스템에서 표시하는 연결 요청 창을 띄웁니다. 보통 “이 앱이 VPN 연결을 설정하려고 합니다”라는 안내와 함께 네트워크 트래픽을 앱이 확인할 수 있다는 경고가 표시됩니다. “확인”을 누르면 시스템이 이번 VpnService 사용 권한을 해당 앱에 부여합니다. 이 권한 창은 구독 로그인 화면이 아니며 클라이언트가 노드를 선택해 주지도 않습니다. 앱이 가상 네트워크 카드를 만들 수 있는지만 결정합니다.

표준 실행 순서

  1. 먼저 정상적으로 해석되는 구독 또는 로컬 설정을 가져온 뒤 설정 업데이트를 완료합니다.
  2. 클라이언트 홈에서 설정과 프록시 그룹을 선택하고, 최소 한 개의 노드에서 지연 시간 테스트가 완료되는지 확인합니다.
  3. “VPN 모드”, “서비스 모드” 또는 이와 비슷한 이름의 실행 스위치를 켭니다.
  4. 시스템에 VPN 연결 요청이 표시되면 “확인”을 누르고, 다른 앱으로 전환해 팝업을 가리지 마세요.
  5. 상태 표시줄에 VPN 표시가 나타날 때까지 기다린 뒤 직접 연결 사이트와 프록시 규칙이 필요한 사이트를 각각 방문합니다.
  6. 클라이언트 로그에서 요청이 각각 DIRECT와 대상 프록시 정책에 매칭되는지 확인합니다.

Android는 일반적으로 하나의 사용자 공간에서 일반 VPN 연결 하나만 활성 상태로 유지할 수 있습니다. WireGuard, 기업용 VPN, 광고 차단기, 방화벽 및 다른 프록시 클라이언트가 이 자리를 사용할 수 있습니다. Clash 계열 클라이언트를 시작하면 기존 VPN이 시스템에서 끊길 수 있으며, 반대로 다른 VPN을 시작해도 현재 VpnService 권한이 취소됩니다. 업무 프로필은 별도의 Android 사용자 공간에서 관리되므로 개인 공간의 VPN이 업무 프로필 앱까지 반드시 처리하는 것은 아닙니다.

권한 팝업이 나타나지 않을 때 해결 방법

  • 기존 VPN 확인: 「설정」→「네트워크 및 인터넷」→「VPN」으로 이동해 현재 연결을 끊은 다음 클라이언트로 돌아가 서비스를 시작합니다. 시스템에 따라 메뉴가 「추가 연결 설정」→「VPN」으로 표시될 수도 있습니다.
  • 항상 사용 설정 확인: 기존 VPN의 설정 버튼을 열고 “항상 켜진 VPN”과 “VPN 없이 연결 차단”을 끕니다. 두 번째 옵션은 “VPN 연결 없을 때 연결 차단”으로 표시되기도 합니다.
  • 권한 요청 다시 표시: 먼저 클라이언트에서 서비스를 중지한 다음 시스템 VPN 화면에서 해당 앱이 남긴 VPN 설정을 삭제하고 다시 시작합니다.
  • 사용자 공간 확인: 앱 복제, 게스트 모드 및 업무 프로필은 각각 별도의 권한을 사용합니다. 클라이언트를 설치한 공간에서 연결 요청을 승인해야 합니다.
  • 재부팅 후 재시도: 시스템 VPN 서비스에 만료된 세션이 남아 있을 때가 있습니다. 실행 버튼을 반복해서 누르는 것보다 휴대전화를 재부팅하는 편이 점유 상태를 정리하기 쉽습니다.

화면을 잠근 뒤 연결이 끊기는 이유: Doze, 앱 대기 및 제조사 관리

Android의 절전 기능은 단일 스위치가 아닙니다. 기본 시스템에는 Doze, 앱 대기 버킷, 배터리 최적화 및 백그라운드 실행 제한이 포함됩니다. 제조사 시스템은 여기에 자동 시작, 연결된 앱 시작, 잠금 화면 정리 및 백그라운드 고사용량 허용 설정을 추가할 수 있습니다. 클라이언트가 포그라운드 서비스로 표시되더라도 화면을 잠근 뒤 네트워크가 제한되거나 프로세스가 정지될 수 있으며, 메모리 압박이 커지면 프로세스가 종료될 수도 있습니다.

일반적인 증상은 화면이 켜져 있을 때는 정상적으로 사용되지만, 화면을 잠근 뒤 5~20분이 지나면 메시지가 늦게 도착하는 것입니다. 화면을 다시 켜면 몇 초 안에 네트워크가 복구됩니다. VPN 표시는 남아 있지만 클라이언트 로그 업데이트가 멈추고 앱을 다시 열어야 복구되는 경우도 있습니다. 전자는 백그라운드 네트워크 제한에 가깝고, 후자는 대개 프로세스 정지, 서비스 회수 또는 코어 종료와 관련됩니다.

재현 가능한 잠금 화면 테스트

아래 기록은 판단 방법을 설명하기 위한 예시이며 모든 기기의 고정된 배터리 소모량을 의미하지 않습니다. 테스트 기기는 Pixel 8, Android 15이고 Wi-Fi 신호는 약 -48 dBm였습니다. Clash Meta for Android 2.11.14를 사용했으며 규칙 모드와 TUN 모드를 켰습니다. 화면을 30분 동안 끄고, 다른 기기에서 60초마다 테스트 기기로 메시지를 한 번씩 보냈습니다.

시스템 설정 30분 동안의 연결 상태 메시지 도착 지연 배터리 변화
배터리 사용량을 “제한됨”으로 설정 약 11분 후 백그라운드 일시 중지 발생 최대 약 6분 40초 1% 감소
배터리 사용량을 “최적화”로 설정 VPN은 유지되며 간헐적으로 짧은 지연 발생 최대 약 18초 1% 감소
배터리 사용량을 “제한 없음”으로 설정 30분 동안 연결 유지 최대 약 4초 2% 감소

테스트의 핵심은 배터리 1% 차이를 비교하는 것이 아니라 “제한됨” 상태가 분 단위 지연을 일으키는지 확인하는 데 있습니다. 실제 소비 전력은 셀룰러 신호, 노드 RTT, 규칙 수, DNS 요청 및 다른 앱의 활동에 영향을 받습니다. 클라이언트 화면의 순간 속도만 보지 말고 자신의 기기에서 Wi-Fi 잠금 화면 30분 테스트와 셀룰러 네트워크 잠금 화면 30분 테스트를 각각 진행하는 것이 좋습니다.

제조사별 배터리 절전 예외 설정 경로

메뉴 이름은 시스템 버전과 지역에 따라 조금씩 다를 수 있습니다. 아래 경로는 2025~2026년에 널리 사용되는 버전을 기준으로 했습니다. 메뉴를 찾을 수 없다면 시스템 설정에서 “배터리 최적화”, “백그라운드 활동”, “자동 시작” 또는 클라이언트 앱 이름을 검색하세요. 설정을 마친 뒤 클라이언트 서비스를 다시 시작하고 잠금 화면 테스트를 진행해야 합니다.

Pixel 및 순정 Android에 가까운 기기

  1. 「설정」→「앱」→「모든 앱 보기」→ Clash 클라이언트를 선택합니다.
  2. 「앱 배터리 사용량」을 열고 백그라운드 사용량을 「제한 없음」으로 변경합니다.
  3. 「설정」→「네트워크 및 인터넷」→「데이터 절약 모드」→「제한 없는 데이터」로 이동해 데이터 절약 모드에서도 클라이언트가 인터넷에 연결되도록 허용합니다.
  4. 「설정」→「알림」에서 클라이언트 알림이 허용되어 있고 실행 상태 알림이 유지되는지 확인합니다.

Samsung One UI

  1. 「설정」→「애플리케이션」→ 클라이언트 선택 →「배터리」에서 「제한 없음」을 선택합니다.
  2. 「설정」→「배터리」→「백그라운드 사용 제한」→「자동으로 절전 모드로 전환하지 않는 앱」으로 이동해 클라이언트를 추가합니다.
  3. “깊은 절전 앱” 목록을 확인하고 클라이언트가 포함되어 있다면 먼저 삭제합니다.
  4. 「설정」→「연결」→「데이터 사용량」→「앱의 데이터 사용 허용」으로 이동해 백그라운드 데이터가 허용되어 있는지 확인합니다.

샤오미 HyperOS 및 MIUI

  1. 「설정」→「앱 설정」→「앱 관리」→ 클라이언트 선택 →「배터리 절약」에서 「제한 없음」을 선택합니다.
  2. 「설정」→「앱 설정」→「권한 관리」→「자동 시작 관리」로 이동해 클라이언트의 자동 시작을 허용합니다.
  3. 최근 작업 화면에서 클라이언트 카드를 길게 누른 뒤 잠금을 선택해 한 번에 정리할 때 종료될 가능성을 낮춥니다.
  4. 클라이언트의 「데이터 사용량」에서 WLAN, 모바일 데이터 및 백그라운드 데이터를 허용합니다.

OPPO, OnePlus 및 realme

  1. 「설정」→「앱」→「앱 관리」→ 클라이언트 선택 →「배터리 사용량 관리」로 이동합니다.
  2. “백그라운드 실행”을 허용하고 해당 앱의 자동 최적화를 끄거나 “제한 없음”을 선택합니다.
  3. 「설정」→「앱」→「자동 시작」으로 이동해 클라이언트의 자동 시작을 허용합니다.
  4. 최근 작업에서 클라이언트를 잠가 “모두 지우기”를 실행해도 서비스가 중지되지 않도록 합니다.

vivo 및 iQOO

  1. 「설정」→「배터리」→「백그라운드 배터리 관리」→ 클라이언트를 선택하고 백그라운드 고사용량을 허용합니다.
  2. 「설정」→「앱 및 권한」→「권한 관리」→「자동 시작」으로 이동해 클라이언트의 자동 시작을 허용합니다.
  3. 최근 작업 화면에서 클라이언트를 잠급니다.
  4. 초절전 모드가 켜져 있다면 해당 모드를 종료한 뒤 VPN 서비스를 다시 시작합니다.

Huawei 및 Honor

  1. 「설정」→「앱 및 서비스」→「앱 실행 관리」로 이동해 클라이언트를 찾고 자동 관리를 끕니다.
  2. “자동 시작”, “연결된 앱 시작” 및 “백그라운드 활동”을 수동으로 허용합니다.
  3. 「설정」→「배터리」→「기타 배터리 설정」에서 절전 중 네트워크 연결 옵션을 확인합니다.
  4. 최근 작업 화면에서 클라이언트를 잠그고 실행 상태 알림을 유지합니다.

TUN, DNS 및 앱 우회 설정 함께 사용하기

Android 클라이언트는 보통 화면에서 TUN 매개변수를 생성하므로 설정 파일의 같은 이름을 가진 필드가 최종 제어권을 갖지 않을 수 있습니다. 클라이언트에 따라 “VPN 서비스”, “TUN 모드”, “서비스 모드”가 별도 스위치로 제공되기도 합니다. YAML을 수정하기 전에 먼저 클라이언트 설정을 확인하세요. 같은 항목을 화면과 설정 파일에서 동시에 지정하면 화면의 값이 우선 적용될 수 있습니다.

mixed-port: 7890
external-controller: 127.0.0.1:9090

tun:
  enable: true
  stack: mixed
  auto-route: true
  strict-route: true

dns:
  enable: true
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip

이 설정은 일반적인 구조를 보여 주는 예시이며, 모든 Android 클라이언트에서 수동 입력이 필요한 것은 아닙니다. auto-route는 라우팅을 자동으로 설정하고, strict-route는 TUN을 우회하는 트래픽을 줄입니다. 일부 모바일 클라이언트는 라우팅을 자체적으로 관리하므로 클라이언트 로그와 실제 트래픽 테스트를 기준으로 판단해야 합니다.

앱별 프록시 설정의 두 가지 방식

  • 선택한 앱만 프록시 사용: 어떤 앱을 Clash로 전달할지 명확한 경우에 적합합니다. 새로 설치한 앱은 자동으로 추가되지 않으므로 목록을 주기적으로 확인해야 합니다.
  • 선택한 앱 우회: 기본적으로 대부분의 앱을 처리하고 은행 앱, 로컬 네트워크 화면 공유 앱 또는 VPN에 민감한 앱만 제외하는 방식입니다. 일상적인 관리 부담이 더 적습니다.

앱이 VPN 대상에서 제외되면 해당 앱의 DNS와 연결도 mihomo를 우회할 수 있습니다. 문제를 확인할 때 웹 출구 IP만 비교하지 말고, 클라이언트 로그에 해당 앱이 요청한 도메인과 연결이 표시되는지도 확인하세요. Android의 “프라이빗 DNS”는 암호화된 DNS를 사용합니다. 일부 클라이언트는 TUN 계층에서 이를 처리할 수 있지만, 특정 조합에서는 DNS 해석 시간 초과가 발생할 수 있습니다. “IP 주소는 연결되지만 도메인이 열리지 않는” 경우 「설정」→「네트워크 및 인터넷」→「프라이빗 DNS」로 이동해 “자동”으로 변경하고 비교 테스트를 진행해 보세요.

연결 끊김 점검 순서: 시스템 상태부터 규칙 로그까지

노드, DNS, TUN 및 절전 설정을 동시에 변경하면 원인을 찾기 어려워집니다. 더 효율적인 방법은 한 번에 한 계층만 확인하고 연결이 끊긴 시간을 기록하는 것입니다. 아래 순서는 “시작 직후에는 정상이지만 화면을 잠그면 작동하지 않음”, “Wi-Fi 전환 후 복구되지 않음”, “VPN 표시는 있지만 웹페이지가 열리지 않음”에 적용할 수 있습니다.

  1. 시스템 VPN 확인: 상태 표시줄의 표시를 확인하고 「설정」→「VPN」으로 이동해 현재 연결이 실제로 대상 클라이언트에 속하는지 확인합니다.
  2. 코어 실행 상태 확인: 클라이언트 로그를 열고 현재 시간에도 새 기록이 추가되는지 확인합니다. 로그가 완전히 멈췄다면 먼저 백그라운드 유지 문제를 해결하세요.
  3. 네트워크 전환 후 재테스트: Wi-Fi를 끄고 셀룰러 네트워크로 20초간 기다린 다음 Wi-Fi를 다시 켭니다. 정상이라면 코어가 연결을 재구성합니다.
  4. 노드 확인: 현재 프록시 그룹에서 지연 시간 테스트를 한 번 실행합니다. 지연 시간 수치는 테스트 주소에 도달할 수 있다는 뜻일 뿐이므로 실제 웹페이지로도 확인해야 합니다.
  5. DNS 확인: 알려진 IP 주소와 도메인에 각각 접속합니다. 도메인만 실패한다면 프라이빗 DNS, Fake IP 및 DNS 수신 상태를 확인하세요.
  6. 규칙 확인: 로그에서 대상 도메인을 찾아 최종적으로 DIRECT, 프록시 그룹 또는 REJECT 중 어디에 매칭되었는지 확인합니다.
  7. 충돌 기능 끄기: 다른 VPN, 광고 차단기, 방화벽 및 시스템 Wi-Fi 수동 프록시를 일시적으로 중지합니다.
  8. 서비스 재시작: 클라이언트를 중지하고 5초간 기다린 뒤 다시 시작합니다. 그래도 실패하면 시스템 VPN 기록을 삭제하고 권한을 다시 부여하세요.

자주 발생하는 세 가지 증상 빠르게 판단하기

증상 우선 확인할 항목 해결 방향
화면을 잠근 뒤 약 10분 후 메시지 지연 배터리 최적화, 백그라운드 데이터, 자동 시작 제한 없음으로 설정하고 백그라운드 예외 목록에 추가
시작 후 VPN 표시가 없음 VpnService 권한 및 다른 VPN 점유 중인 연결을 끊고 권한을 다시 부여
VPN 표시는 있지만 도메인 접속 실패 DNS, 프라이빗 DNS, Fake IP 프라이빗 DNS를 자동으로 설정해 비교하고 DNS 해석 로그 확인
Wi-Fi에서 모바일 네트워크로 전환한 뒤 연결 끊김 네트워크 전환 후 연결 재구성 20초간 기다리고 필요하면 서비스를 다시 시작
특정 앱 하나만 프록시를 사용하지 않음 앱별 프록시 및 앱 우회 목록 포함 범위를 조정하고 해당 앱을 다시 실행

안정적인 실행을 위한 최종 체크리스트

  • 시스템 VPN 화면에는 현재 사용할 연결만 남아 있으며, 다른 항상 켜진 VPN이 연결을 가로채지 않습니다.
  • 클라이언트 배터리 사용량이 “제한 없음” 또는 제조사 시스템에서 이에 해당하는 옵션으로 설정되어 있습니다.
  • 자동 시작, 백그라운드 활동 및 백그라운드 데이터 권한이 모두 허용되어 있습니다.
  • 실행 상태 알림이 켜져 있고 알림에서 서비스가 계속 실행 중인지 확인할 수 있습니다.
  • 시스템 Wi-Fi 수동 프록시가 TUN 모드와 중복으로 활성화되어 있지 않습니다.
  • 앱별 프록시 목록이 예상과 일치하며 새로 설치한 앱이 필요에 따라 추가되거나 제외되어 있습니다.
  • 화면을 30분간 잠근 뒤에도 VPN 표시가 남아 있고 메시지 지연이 허용 가능한 수준입니다.
  • Wi-Fi와 셀룰러 네트워크를 서로 전환한 뒤 약 20초 안에 연결이 복구됩니다.
  • 로그에서 직접 연결과 프록시 요청이 올바른 정책에 매칭되는 것을 확인할 수 있으며, 지연 시간 테스트 결과에만 의존하지 않습니다.

Android에서 안정성을 좌우하는 핵심은 두 가지입니다. 시스템이 클라이언트의 VpnService 생성과 지속적인 권한 유지를 허용해야 하며, 백그라운드 정책이 포그라운드 서비스와 mihomo 코어의 실행을 계속 허용해야 합니다. 먼저 권한 점유 문제를 해결하고, 다음으로 배터리 예외 목록을 설정한 뒤, 마지막으로 노드·DNS·규칙 계층을 점검하면 대개 문제를 훨씬 빠르게 찾을 수 있습니다.

Clash 클라이언트 다운로드 플랫폼별 제공 버전 확인