Android 클라이언트 사용 핵심: VpnService 권한 및 배터리 최적화 제외 설정

Android에서 VpnService 작동 방식과 권한 팝업 처리법을 설명하고, 주요 제조사별 백그라운드 유지 및 배터리 최적화 제외 경로를 안내해 프록시 끊김을 줄입니다.

먼저 VpnService, 프록시 포트, TUN 모드를 구분하기

Android의 Clash 계열 클라이언트는 일반적으로 시스템에서 제공하는 VpnService를 통해 앱 트래픽을 처리합니다. 여기서 ‘VPN’은 Android의 로컬 트래픽 진입점을 뜻합니다. 클라이언트가 가상 네트워크 인터페이스를 만들고 데이터를 Clash Meta(mihomo) 같은 코어에 전달하면, 코어는 설정에 따라 직접 연결, 차단 또는 프록시 노드 전달을 결정합니다. 상태 표시줄에 열쇠나 VPN 아이콘이 보여도 시스템 VPN 인터페이스가 연결된 상태일 뿐, 노드가 정상적으로 작동하거나 모든 도메인이 프록시를 거친다는 의미는 아닙니다.

이는 HTTP 또는 SOCKS 프록시를 직접 입력하는 방식과 다릅니다. 수동 프록시는 대개 프록시 설정을 지원하는 앱에만 적용되며, 자주 사용하는 수신 포트는 7890, 7891 또는 설정의 mixed-port입니다. 반면 VpnService는 일반 앱이 발생시키는 TCP, UDP, DNS 트래픽을 받을 수 있습니다. Android 클라이언트 화면의 ‘VPN 모드’, ‘서비스 모드’ 또는 ‘시작’ 버튼은 대부분 이 VpnService 연결을 제어합니다.

항목 적용 범위 대표적인 용도 흔한 오해
VpnService 시스템이 현재 VPN 앱에 전달하는 트래픽 Android 일상 사용에서 전체 트래픽 및 앱별 라우팅 아이콘이 보여도 노드 연결을 의미하지 않음
HTTP/SOCKS 포트 해당 포트에 직접 연결하는 앱 브라우저 디버깅, 로컬 네트워크 기기의 수동 프록시 모든 Android 앱이 시스템 프록시를 읽는 것은 아님
mihomo TUN 코어가 생성하거나 관리하는 가상 네트워크 트래픽 투명한 트래픽 처리, UDP 및 복잡한 라우팅 클라이언트가 이미 VPN을 관리 중이면 다른 진입점을 중복으로 켜면 안 됨
앱별 프록시 지정 앱 또는 제외 앱 은행, 게임, 스트리밍 앱을 각각 처리 ‘포함’과 ‘제외’를 잘못 선택하면 앱이 프록시를 우회함

TUN 설정과 클라이언트 스위치를 중복으로 사용하지 않기

일부 Android 클라이언트는 화면에서 VpnService를 통합적으로 생성하고 트래픽을 내장 코어로 자동 전달합니다. 다른 클라이언트는 설정의 tun 섹션을 직접 읽기도 합니다. 해당 클라이언트의 안내와 실행 로그를 기준으로 판단하세요. 시작 후 인터페이스 생성 실패, 주소 충돌 또는 라우팅 중복이 로그에 연속해서 나타나면 먼저 클라이언트 기본 서비스 모드로 되돌리고 여러 TUN 스위치를 동시에 켜지 마세요.

mixed-port: 7890
mode: rule
log-level: info
ipv6: true

tun:
  enable: true
  stack: mixed
  auto-route: true
  strict-route: true
  dns-hijack:
    - any:53

위 설정은 mihomo에서 자주 사용하는 필드를 보여 주는 예시이며, 모든 Android 클라이언트에서 직접 추가해야 하는 것은 아닙니다. 특히 strict-route, IPv6 및 DNS 하이재킹 정책은 시스템 버전, 코어 버전과 클라이언트 패키징 방식의 영향을 받습니다. 처음 문제를 확인할 때는 클라이언트가 생성한 기본 설정을 사용하고, 기본 연결이 정상임을 확인한 뒤 항목별로 수정하세요.

VpnService 권한 팝업을 올바르게 처리하기

서비스를 처음 시작하면 Android가 시스템에서 생성한 연결 요청을 표시하며, 일반적으로 ‘이 앱이 VPN 연결을 설정하려고 합니다’라는 내용이 나옵니다. 확인해야 앱이 VpnService.Builder를 호출해 가상 인터페이스를 만들 수 있습니다. 이 권한은 앱 단위 권한으로, 구독 권한이나 노드 계정 로그인과는 다릅니다. 권한을 거부해도 클라이언트는 설정을 불러오고 노드를 테스트할 수 있지만, 다른 앱의 트래픽을 처리할 수는 없습니다.

첫 연결 권장 순서

  1. 먼저 유효한 구독 또는 로컬 설정을 가져오고, 설정 구문 분석이 완료될 때까지 기다립니다.
  2. 클라이언트에서 정책 그룹과 사용 가능한 노드를 선택하세요. 측정 결과 없이 ‘자동 선택’ 상태에만 머물러서는 안 됩니다.
  3. ‘시작’, ‘연결’ 또는 ‘서비스 모드’를 누른 다음 시스템 팝업에서 ‘확인’을 선택합니다.
  4. 상태 표시줄에 VPN 아이콘이 나타나면 클라이언트 로그를 열어 코어가 로컬 포트를 수신 대기하고 네트워크 인터페이스 초기화를 완료했는지 확인합니다.
  5. 직접 연결되어야 하는 웹사이트와 프록시를 사용해야 하는 웹사이트를 각각 방문해 규칙 적중 기록을 확인하세요. 첫 화면의 지연 시간만 확인해서는 안 됩니다.

권한 팝업이 전혀 나타나지 않으면 먼저 화면 위에 플로팅 창, 시력 보호 오버레이, 자동 클릭 도구 또는 비밀번호 관리자의 오버레이가 떠 있는지 확인하세요. 일부 Android 버전은 다른 창에 가려진 보안 확인 버튼을 비활성화합니다. 관련 오버레이를 닫고 클라이언트로 돌아가 시작 버튼을 다시 누르면 됩니다. 버튼이 회색으로 비활성화되어 있다면 화면을 잠갔다가 다시 잠금 해제하거나, 최근 앱 화면에서 클라이언트를 제거한 뒤 다시 열어 보세요.

권한을 허용했는데도 연결되지 않을 때

배터리 최적화 제외가 프록시 안정성에 직접 영향을 주는 이유

화면이 꺼지면 Android는 점차 앱 대기 상태와 Doze 상태로 진입합니다. 시스템은 백그라운드 실행, 네트워크 접근, 예약 작업 및 프로세스 복원을 제한할 수 있습니다. VpnService는 일반적으로 포그라운드 서비스로 실행되고 상시 알림을 표시하지만, 제조사별 시스템이 백그라운드 정리, 자동 시작 및 배터리 관리 기능을 추가로 적용하기도 합니다. 그 결과 열쇠 아이콘이 사라지거나 클라이언트 프로세스가 종료되고, 네트워크 전환 후 터널을 다시 만들지 못하거나 알림은 남아 있지만 코어 프로세스가 응답하지 않을 수 있습니다.

배터리 최적화 제외는 앱을 계속 높은 부하로 실행하라는 뜻이 아니라, 화면이 꺼지거나 Wi-Fi와 모바일 네트워크가 전환될 때 필요한 포그라운드 서비스를 유지하도록 허용하는 설정입니다. 설정 후에도 실제 배터리 사용량을 확인해야 합니다. 정상적인 대기 중 배터리 소모량은 규칙 수, DNS 조회, 연결 활성도, UDP 세션 및 신호 품질의 영향을 받으므로 단일 비율만으로 클라이언트 이상 여부를 판단할 수 없습니다.

기본 Android 및 Pixel

Android 14와 Android 15의 일반적인 경로는 「설정」→「앱」→「모든 앱 보기」→클라이언트 선택→「앱 배터리 사용량」으로 이동한 뒤 ‘백그라운드 사용 허용’을 켜고, 선택 항목에서 ‘제한 없음’을 고르는 것입니다. 일부 버전에서는 「설정」→「앱」→클라이언트 선택→「배터리」→「제한 없음」으로 표시됩니다. 이어서 「설정」→「네트워크 및 인터넷」→「VPN」으로 이동해 이전의 항상 켜짐 설정이 현재 클라이언트를 대신하고 있지 않은지 확인하세요.

Samsung One UI

One UI 6과 One UI 7에서는 먼저 「설정」→「애플리케이션」→클라이언트 선택→「배터리」→「제한 없음」으로 이동하세요. 이어 「설정」→「디바이스 케어」→「배터리」→「백그라운드 사용 제한」→「자동으로 절전 모드로 전환하지 않을 앱」을 열고 클라이언트를 목록에 추가합니다. 이미 ‘초절전 앱’에 들어 있다면 먼저 목록에서 제거해야 합니다.

샤오미 HyperOS 및 MIUI

HyperOS의 일반적인 경로는 「설정」→「앱 설정」→「앱 관리」→클라이언트 선택→「배터리 절약」→「제한 없음」입니다. 그다음 「설정」→「앱 설정」→「권한 관리」→「백그라운드 자동 시작」으로 이동해 클라이언트의 자동 시작을 허용하세요. 구형 MIUI에서는 앱 세부 정보 화면에 ‘자동 시작’ 스위치가 바로 표시될 수도 있습니다. 최근 앱 화면의 잠금 아이콘은 수동으로 정리될 가능성을 낮출 뿐, 배터리 정책과 백그라운드 자동 시작 설정을 대신하지 못합니다.

OPPO, OnePlus 및 realme

ColorOS와 realme UI의 메뉴 이름은 버전에 따라 달라집니다. 일반적인 경로는 「설정」→「앱」→「앱 관리」→클라이언트 선택→「배터리 사용 관리」로 이동해 ‘백그라운드 활동 허용’을 켜는 것입니다. 이어 「설정」→「배터리」→「추가 설정」→「배터리 사용 최적화」 또는 「앱 배터리 사용 관리」에서 클라이언트를 ‘최적화하지 않음’으로 설정하세요. 일부 OnePlus 버전에서는 「설정」→「앱」→「특수 앱 액세스」→「배터리 최적화」 경로를 사용합니다.

vivo 및 iQOO

OriginOS의 일반적인 경로는 「설정」→「앱 및 권한」→「앱 관리」→클라이언트 선택→「배터리」 또는 「배터리 사용 관리」로 이동해 ‘백그라운드 고전력 사용’을 허용하는 것입니다. 또한 「설정」→「배터리」→「백그라운드 배터리 사용 관리」에서 클라이언트를 찾아 백그라운드 실행을 허용해야 합니다. 시스템 관리자가 ‘자동 시작’ 목록을 제공한다면 시스템이 프로세스를 정리한 뒤 클라이언트가 서비스를 복원할 수 있도록 허용하세요.

Huawei 및 Honor

HarmonyOS의 일반적인 경로는 「설정」→「앱 및 서비스」→「앱 실행 관리」입니다. 클라이언트를 찾아 자동 관리를 끄고 ‘자동 시작’, ‘연결된 시작’ 및 ‘백그라운드 활동’을 수동으로 허용하세요. Honor MagicOS의 해당 메뉴도 대개 앱 실행 관리 또는 배터리 최적화 화면에 있습니다. 설정을 마친 뒤 시스템 관리자의 ‘한 번에 최적화’를 실행해 이 권한을 다시 끄지 않도록 주의하세요.

시스템 핵심 설정 추가 확인 항목
Pixel / 기본 Android 앱 배터리 사용량→제한 없음 항상 켜짐 VPN
Samsung One UI 애플리케이션→배터리→제한 없음 자동으로 절전 모드로 전환하지 않을 앱 목록
샤오미 HyperOS 배터리 절약→제한 없음 백그라운드 자동 시작
ColorOS / realme UI 백그라운드 활동 허용 배터리 최적화하지 않음
OriginOS 백그라운드 고전력 사용 허용 백그라운드 배터리 사용 관리
HarmonyOS / MagicOS 앱 실행 수동 관리 자동 시작, 연결된 시작, 백그라운드 활동

제조사는 시스템 업데이트 후 메뉴 이름을 변경할 수 있습니다. 표에서 경로를 찾을 수 없다면 시스템 설정 상단에서 ‘배터리 최적화’, ‘백그라운드 활동’, ‘자동 시작’ 또는 ‘앱 실행 관리’를 검색하세요. 최종 목표는 세 가지입니다. 백그라운드 실행 허용, 과도한 배터리 최적화 제외, 시스템 재시작 또는 프로세스 정리 후 서비스 복원 허용입니다.

고정된 테스트 절차로 백그라운드 유지 확인하기

설정을 마친 뒤 2~3분만 지켜봐서는 안 됩니다. Android의 대기 제한은 화면이 꺼진 뒤 일정 시간이 지나야 뚜렷해지는 경우가 많고, 같은 Wi-Fi를 계속 사용하는 것보다 네트워크 전환에서 문제가 더 쉽게 드러납니다. 아래 30분 절차를 따라 각 단계에서 클라이언트 알림, VPN 아이콘, 로그 시간 및 실제 네트워크 결과를 기록하세요.

  1. Wi-Fi에 연결하고 클라이언트를 시작한 뒤 규칙 모드, 현재 노드 및 구독 설정이 모두 로드되었는지 확인합니다.
  2. 직접 연결 대상과 프록시 대상에 각각 접속하고, 로그에서 DIRECT와 해당 정책 그룹의 적중 기록을 확인합니다.
  3. 15분 동안 화면을 끄고 그동안 클라이언트를 열지 마세요. 잠금을 해제한 즉시 웹페이지와 메시지 동기화를 테스트합니다.
  4. Wi-Fi를 끄고 4G 또는 5G로 전환한 뒤 30초 동안 기다립니다. 서비스가 자동으로 연결을 다시 만드는지 확인하세요.
  5. 다시 15분 동안 화면을 끈 다음 Wi-Fi를 복원하고 DNS 조회와 새 TCP 연결이 모두 완료되는지 확인합니다.
  6. 최근 앱 화면에서 클라이언트를 밀어 닫은 뒤, 클라이언트 설계상 VPN이 계속 실행되는지 확인합니다. 일부 클라이언트는 밀어 닫기를 중지 명령으로 처리하므로 해당 앱의 안내를 기준으로 판단하세요.

지연 시간 수치가 실제 사용 가능성을 의미하지는 않음

노드 목록의 지연 시간 측정은 보통 지정된 URL에 요청을 보내므로, 해당 테스트 주소에 연결을 설정하는 데 걸린 시간만 보여 줍니다. 노드가 80ms로 표시되지만 웹페이지가 열리지 않는다면 DNS, UDP, 규칙 선택 또는 대상 사이트 연결 문제일 수 있습니다. 반대로 시간 초과로 표시되어도 브라우저가 작동한다면 테스트 URL이 노드나 네트워크에서 차단되었을 가능성이 있습니다. 끊김을 점검할 때는 연결 로그의 시간 순서를 확인하고, 네트워크 전환 전후에 코어 종료, 인터페이스 폐쇄, DNS 시간 초과 또는 정책 그룹에서 노드를 찾지 못한 기록이 있는지 중점적으로 살펴보세요.

프록시가 자주 끊길 때의 단계별 점검 목록

1단계: Android가 서비스를 종료하지 않았는지 확인

2단계: 코어 중지와 노드 장애 구분

로컬 로그 갱신이 멈추고 클라이언트 첫 화면에서 트래픽 통계를 읽지 못한다면 로컬 코어가 종료되었을 가능성이 있습니다. 로그에 연결 기록이 계속 남지만 시간 초과, 연결 거부 또는 TLS 핸드셰이크 실패가 반복된다면 노드, 회선 또는 구독 매개변수 문제일 가능성이 큽니다. 이때는 VpnService를 반복해서 재시작하기보다 같은 정책 그룹의 다른 노드로 전환하는 편이 진단에 더 도움이 됩니다.

구독을 업데이트한 뒤 갑자기 연결되지 않는다면 클라이언트가 설정을 다시 불러왔는지 확인하세요. 설정 파일의 정책 그룹이 존재하지 않는 노드 이름을 참조하면 규칙이 정책 그룹에 적중해도 사용할 출구가 없을 수 있습니다. 로그를 볼 때는 실제로 적중한 정책 그룹과 최종 노드를 확인해야 하며, 구독 화면에 표시된 노드 수만 확인해서는 안 됩니다.

3단계: DNS와 IPv6 확인

‘일부 앱은 정상인데 일부 도메인만 열리지 않는’ 경우에는 먼저 DNS를 확인하세요. Fake-IP 모드는 클라이언트가 DNS 요청을 정확히 처리하고 도메인과 가상 주소의 매핑을 유지해야 합니다. 시스템 비공개 DNS, 브라우저 보안 DNS 및 앱 내장 DoH가 예상 경로를 우회할 수 있습니다. Android의 「설정」→「네트워크 및 인터넷」→「비공개 DNS」를 일시적으로 ‘자동’으로 바꾼 뒤 클라이언트를 재시작하고 다시 테스트해 보세요.

IPv6도 별도로 확인해야 합니다. 모바일 네트워크는 IPv6 주소를 할당할 수 있지만 설정이나 노드가 IPv4만 안정적으로 지원할 수 있습니다. 처음부터 IPv6를 영구적으로 끄지는 마세요. 같은 네트워크와 같은 노드에서 각각 테스트하고 로그의 대상 주소 체계와 실패 유형을 확인한 뒤 설정의 ipv6, DNS 응답 정책 또는 TUN 라우팅을 조정할지 결정하세요.

4단계: 앱별 프록시 확인

Android 클라이언트에는 보통 ‘선택한 앱만 프록시’와 ‘선택한 앱 제외’라는 서로 반대되는 두 모드가 있습니다. 모드를 바꾼 뒤에는 VpnService 인터페이스를 만들 때 앱 목록의 허용 또는 차단 범위가 적용되므로 서비스를 다시 시작해야 합니다. 특정 앱 하나만 인터넷에 연결되지 않는다면 먼저 올바른 목록에 들어 있는지 확인하고, 해당 앱이 업무 프로필, 앱 복제본 또는 다른 Android 사용자에서 실행 중인지도 살펴보세요.

5단계: 네트워크 전환 후 가짜 연결 처리

Wi-Fi에서 모바일 네트워크로 전환하면 기존 연결이 사용하던 소스 주소가 더 이상 유효하지 않습니다. 클라이언트는 시스템의 네트워크 변화를 감지해 필요한 연결을 다시 만들어야 하지만, 일부 장시간 연결은 즉시 복구되지 않습니다. 먼저 30초 정도 기다린 뒤 새 웹페이지를 열어 보세요. 그래도 트래픽이 없으면 클라이언트에서 한 번 중지했다가 다시 시작합니다. 네트워크를 전환할 때마다 수동 재시작이 필요할 때만 백그라운드 제한, 시스템 VPN 설정 및 클라이언트 로그를 계속 확인해야 하며, 이를 노드 지연 시간 문제로 단정해서는 안 됩니다.

안정적인 실행에 필요한 최소 설정

Android에서 Clash 계열 클라이언트를 안정적으로 유지하는 데 모든 시스템 권한을 켤 필요는 없습니다. 최소 설정은 다음과 같습니다. VpnService 시스템 권한 허용, 활성 VPN 하나만 유지, 클라이언트의 백그라운드 실행 허용 및 과도한 배터리 최적화 제외, 필요할 때 자동 시작 활성화, 상시 알림과 포그라운드 서비스 정상 작동 확인, 화면 끄기와 Wi-Fi·모바일 네트워크 전환을 포함한 고정 절차로 검증하기.

설정은 먼저 단순하게 유지해야 합니다. 유효한 구독, 명확한 정책 그룹 하나, 읽기 쉬운 info 로그 수준과 클라이언트 기본 서비스 모드로 먼저 연결을 확인한 뒤 Fake-IP, 앱별 프록시, 사용자 지정 규칙 또는 TUN 매개변수를 추가하세요. 끊김이 잦을 때는 ‘시스템 프로세스→로컬 코어→노드 회선→DNS 및 라우팅→앱별 범위’ 순서로 점검하면 모든 문제를 배터리 설정 탓으로 돌리는 일을 피할 수 있습니다.

Clash 다운로드 플랫폼에 맞는 클라이언트 선택