VpnService 권한으로 허용되는 작업
Android용 Clash 클라이언트에서 프록시를 활성화하면 일반적으로 시스템이 제공하는 VpnService 인터페이스를 호출합니다. 그러면 시스템에 “연결 요청” 또는 “이 앱이 VPN 연결을 설정하려고 합니다”라는 팝업이 표시되고, 상태 표시줄에는 열쇠나 VPN 아이콘이 나타납니다. 이 권한은 구독 로그인 권한이나 기존 기업용 VPN 계정 인증이 아니라, 클라이언트가 기기 안에 로컬 가상 네트워크 인터페이스를 만들도록 허용하는 권한입니다.
가상 인터페이스가 만들어지면 Android는 선택한 앱의 IP 트래픽을 클라이언트로 전달합니다. Clash 코어는 설정의 rules, 정책 그룹과 노드를 기준으로 출구를 결정합니다. DIRECT에 해당하는 연결은 직접 접속하고, 프록시 정책에 해당하는 연결은 선택한 노드를 통해 전달하며, REJECT 요청은 차단합니다. 이 방식은 데스크톱의 TUN 모드와 유사하므로 브라우저, 메신저, 수동 프록시를 지원하지 않는 앱도 규칙 기반 분기에 포함할 수 있습니다.
권한 팝업에서 확인할 세 가지 핵심 사항
- 일반적으로 한 사용자 공간에서는 VPN 하나만 유지할 수 있습니다. 시스템에 회사 VPN, WireGuard, 광고 차단기 또는 다른 프록시 앱이 이미 연결되어 있으면 Clash를 시작할 때 기존 연결이 끊기거나 VPN이 다른 앱에서 사용 중이라는 메시지가 표시될 수 있습니다.
- 권한은 앱별로 기록됩니다. 처음 활성화할 때, 클라이언트를 다시 설치할 때, 앱 데이터를 삭제할 때 또는 서명이 다른 설치 패키지로 바꿀 때 시스템이 권한을 다시 요청할 수 있습니다.
- 시스템의 열쇠 아이콘은 정상적인 상태입니다. VpnService가 실행 중이라는 뜻일 뿐, 노드가 실제로 작동한다는 의미는 아닙니다. 노드 연결 상태는 지연 시간 테스트와 실제 웹페이지 접속으로 확인해야 합니다.
로컬 VPN과 원격 프록시 노드의 관계
Android 설정에서는 이 연결을 모두 “VPN”으로 분류하지만, VpnService 자체는 기기 내부에서 트래픽을 받는 역할만 합니다. 실제 원격 연결은 Clash 설정에 지정된 프록시 노드가 만듭니다. 즉 VPN 연결됨으로 표시된다는 것은 가상 인터페이스가 생성되었다는 뜻일 뿐입니다. 구독이 만료되었거나 노드가 시간 초과되었거나 DNS 설정이 잘못되었거나 규칙을 잘못 선택하면 앱은 여전히 인터넷에 접속하지 못할 수 있습니다.
일부 클라이언트는 “프록시 전용 모드” 또는 로컬 HTTP·SOCKS 포트도 제공합니다. 자주 쓰이는 포트는 HTTP 7890, SOCKS 7891, 혼합 포트 7890이며, 정확한 값은 설정 파일의 port, socks-port 또는 mixed-port를 기준으로 확인하세요. 수동 프록시는 해당 포트를 명시적으로 사용하는 앱에만 적용되고, VpnService 모드는 기기 전체의 트래픽 분기에 더 적합합니다. 트래픽 경로를 정확히 모르는 상태에서는 두 방식을 중복으로 활성화하지 마세요.
권한 팝업과 최초 연결을 올바르게 처리하는 방법
최초 실행 시 권장 순서
- 먼저 작동하는 구독 또는 로컬 YAML 설정을 가져온 뒤 설정 업데이트를 한 번 실행하세요.
- 프록시 또는 정책 그룹 화면으로 이동해 사용할 수 있는 노드를 선택하세요. 지연 시간 테스트에서 값이 나온다고 모든 웹사이트에 접속할 수 있는 것은 아니지만, 완전히 연결되지 않는 노드는 우선 제외할 수 있습니다.
- 클라이언트 홈 화면으로 돌아가 “서비스”, “연결” 또는 “시작” 스위치를 켜세요. 클라이언트에 따라 버튼 이름은 조금 다를 수 있습니다.
- 시스템에 VPN 연결 요청이 표시되면 앱 이름을 확인한 다음 “허용”을 선택하세요.
- 상태 표시줄에 VPN 아이콘이 나타날 때까지 기다린 뒤 일반 웹페이지와 프록시 규칙이 필요한 웹사이트에 각각 접속해 직접 연결과 프록시 경로를 확인하세요.
Clash Meta(mihomo) 코어를 사용하는 Android 클라이언트에서는 실행 방식이 “VPN 모드”, “TUN” 또는 “서비스 모드”로 표시될 수 있습니다. 명칭은 조금씩 다르지만 최종적으로 Android VpnService를 호출하면 시스템에 VPN 권한 요청이 표시됩니다. 일부 버전은 우회 앱, 선택한 앱만 프록시 적용, IPv6 라우팅, 시스템 DNS 제어도 설정할 수 있습니다. 최초 연결에서는 기본값을 유지하고 기본 연결이 정상임을 확인한 뒤 항목별로 조정하는 것이 좋습니다.
허용을 눌렀는데 바로 연결이 끊기는 경우
먼저 Android 시스템의 VPN 페이지를 열어 자동으로 다시 연결되는 다른 VPN이 있는지 확인하세요. 순정 Android 14·Android 15의 일반적인 경로는 「설정」→「네트워크 및 인터넷」→「VPN」입니다. 삼성 One UI는 보통 「설정」→「연결」→「기타 연결 설정」→「VPN」으로 이동합니다. 중국 제조사 시스템에서는 「설정」→「기타 연결」→「VPN」에 있을 수도 있습니다. 기존 연결을 끊은 뒤 Clash로 돌아가 서비스를 다시 시작하세요.
다른 VPN이 없다면 “항상 켜진 VPN”이 원인일 수 있습니다. 기존 VPN 옆의 설정 버튼을 눌러 “항상 켜진 VPN”과 “VPN 없이 연결 차단”을 끄세요. 후자는 VPN 잠금 또는 VPN 연결 없을 때 차단으로 표시되기도 합니다. 지정한 VPN이 정상적으로 연결되지 않으면 모든 네트워크를 차단하므로, 문제를 해결하는 동안에는 먼저 끄고 설정이 안정된 뒤 필요에 따라 다시 활성화하세요.
Android 13 이상에서 알림 권한 설정
Android 13부터 런타임 알림 권한이 도입되었습니다. VpnService 권한과 알림 권한은 서로 별개의 설정이지만, 클라이언트는 보통 포그라운드 서비스로 계속 실행되면서 지속적인 알림을 표시해야 합니다. 최초 실행 시 클라이언트의 알림 전송을 허용하면 실행 상태, 현재 업로드·다운로드 속도와 중지 버튼을 확인할 수 있습니다. 이전에 거부했다면 「설정」→「앱」→「Clash 클라이언트」→「알림」→“알림 허용”에서 다시 켤 수 있습니다.
알림이 꺼져 있어도 일부 시스템에서는 포그라운드 서비스가 계속 실행되지만 사용자가 상태를 바로 확인할 수 없습니다. 반면 일부 제조사 커스텀 시스템은 보이지 않는 백그라운드 작업을 더 적극적으로 제한합니다. 따라서 “화면을 잠근 뒤 몇 분 후 연결이 끊기는” 문제를 점검할 때는 알림 권한, 배터리 정책과 자동 시작 권한을 함께 확인해야 합니다.
배터리 최적화 예외가 프록시 안정성에 영향을 주는 이유
Clash Android가 연결된 동안에는 가상 네트워크 인터페이스, DNS 조회, TCP 또는 UDP 세션과 노드 하트비트를 계속 유지해야 합니다. 화면이 꺼지면 Android의 Doze 모드가 일반 백그라운드 작업을 지연하고, 중국 제조사 시스템은 앱 동결, 자동 정리와 백그라운드 배터리 관리까지 추가로 적용합니다. 클라이언트 프로세스가 동결되면 VPN 아이콘이 잠시 남아 있어도 새 연결이 만들어지지 않고, 이후 시스템이 VPN을 완전히 제거할 수 있습니다.
대표적인 증상과 판단 기준
| 증상 | 우선 확인할 항목 | 판단 방법 |
|---|---|---|
| 화면을 잠근 후 5~15분 뒤 연결 끊김 | 배터리 최적화, 백그라운드 활동 | 화면이 켜져 있을 때는 안정적이지만 화면을 끄면 일정 시간 후 작동 중지 |
| 최근 앱을 정리하면 즉시 연결 끊김 | 작업 잠금, 자동 시작 | 최근 앱을 정리하지 않으면 연결 정상 |
| 휴대전화를 재시작해도 복구되지 않음 | 부팅 시 시작, 자동 시작 | 클라이언트를 수동으로 열면 연결 가능 |
| 모바일 네트워크에서만 작동 중지 | 백그라운드 데이터, 데이터 절약 기능 | Wi-Fi에서는 정상이나 4G 또는 5G로 전환하면 전송 중지 |
| VPN 아이콘은 있지만 웹페이지 시간 초과 | 노드, DNS, 코어 상태 | 서비스를 재시작하면 잠시 복구되거나 노드를 바꾸면 복구 |
예외 목록에 추가하는 목적은 클라이언트가 리소스를 무제한으로 사용하게 하는 것이 아니라, 시스템이 지속적인 네트워크 서비스를 지연 가능한 일반 백그라운드 작업으로 오인하지 않도록 하는 데 있습니다. 정상적인 대기 상태에서의 실제 배터리 소모량은 노드 프로토콜, 신호 세기, 규칙 복잡도, DNS 모드와 트래픽 양의 영향을 함께 받습니다. 약한 4G 신호에서 연결을 유지하는 작업은 안정적인 Wi-Fi보다 배터리를 더 많이 사용할 수 있으므로, 시스템 배터리 화면의 일회성 사용량 순위만으로 판단해서는 안 됩니다.
일반 Android 설정 체크리스트
- 「설정」→「앱」→「Clash 클라이언트」→「앱 배터리 사용량」에서 “제한 없음” 또는 “백그라운드 활동 허용”을 선택하세요.
- 「설정」→「앱」→「특별한 앱 액세스」→「배터리 최적화」에서 “모든 앱”으로 전환하고 클라이언트를 찾아 “최적화하지 않음”을 선택하세요.
- 「설정」→「앱」→「Clash 클라이언트」→「모바일 데이터 및 Wi-Fi」에서 백그라운드 데이터를 허용하고, 필요하면 “데이터 무제한 사용”도 허용하세요.
- 클라이언트 알림을 켜고 포그라운드 서비스의 지속 알림을 유지하세요.
- 시스템에 자동 시작 또는 연결 시작 권한이 있다면 클라이언트의 자동 시작을 허용하세요.
- 최근 앱 화면에서 클라이언트를 잠가 한 번에 정리할 때 프로세스가 종료되지 않도록 하세요.
메뉴 이름은 Android 주요 버전과 제조사 시스템 업데이트에 따라 달라집니다. 메뉴를 찾지 못하면 시스템 설정 상단에서 “배터리 최적화”, “자동 시작”, “백그라운드 활동” 또는 “제한 없음”을 직접 검색하세요. 설정을 마친 뒤 최소 20분 동안 화면을 잠근 상태로 기다린 다음 Wi-Fi와 모바일 네트워크를 각각 테스트하세요. VPN 아이콘만 확인해서는 안 됩니다.
샤오미·화웨이·OPPO·vivo 등 시스템별 설정 경로
샤오미 HyperOS 및 MIUI
- 「설정」→「앱 설정」→「앱 관리」→Clash 클라이언트 선택→「배터리 절약」으로 이동해 “제한 없음”으로 설정하세요.
- 「설정」→「앱 설정」→「권한 관리」→「자동 시작 관리」로 이동해 해당 클라이언트를 켜세요.
- 최근 앱을 열고 클라이언트 카드를 위로 밀거나 길게 누른 뒤 자물쇠 버튼을 선택해 작업을 고정하세요. 데스크톱 제스처에 따라 카드를 아래로 끌어내린 뒤 잠금 버튼을 누르는 방식일 수도 있습니다.
- 앱 상세 정보의 「데이터 사용량」에서 WLAN, 모바일 데이터와 백그라운드 네트워크 사용이 모두 허용되었는지 확인하세요.
HyperOS 일부 버전에서는 배터리 절약 메뉴가 「설정」→「배터리 및 성능」→「앱별 배터리 절약」에 있습니다. 화면을 잠근 뒤에도 시스템이 서비스를 종료한다면 이 페이지에서 대상 앱이 “제한 없음”인지 다시 확인하고 해당 앱의 백그라운드 활동 일시 중지 옵션을 끄세요.
화웨이 HarmonyOS 및 EMUI
- 「설정」→「앱 및 서비스」→「앱 실행 관리」로 이동하세요.
- Clash 클라이언트를 찾아 “자동 관리”를 끄세요.
- 표시되는 수동 관리 항목에서 “자동 시작 허용”, “연결 시작 허용”과 “백그라운드 활동 허용”을 켜세요.
- 「설정」→「배터리」→「기타 배터리 설정」으로 이동해 절전 중 네트워크 연결 관련 옵션을 확인하세요.
- 「설정」→「모바일 네트워크」→「데이터 사용량 관리」→「앱 네트워크 사용」에서 클라이언트의 모바일 데이터와 WLAN 사용을 허용하세요.
“자동 시작 허용”만 켜고 “백그라운드 활동 허용”을 켜지 않으면 클라이언트가 화면을 잠근 뒤 동결될 수 있습니다. 세 권한을 함께 확인해야 합니다. 시스템 관리자가 원클릭 최적화를 실행한 뒤 배터리 사용 경고를 다시 표시할 수도 있으므로, 시스템 업데이트 후에는 앱 실행 관리 설정을 다시 점검하는 것이 좋습니다.
OPPO ColorOS 및 원플러스 OxygenOS
- 「설정」→「앱」→「앱 관리」→클라이언트 선택→「배터리 사용량 관리」로 이동하세요.
- “포그라운드 활동 허용”, “백그라운드 활동 허용”과 “자동 시작 허용”을 켜세요. 일부 버전에서는 “앱 자동 시작 허용”으로 표시됩니다.
- 「설정」→「배터리」→「기타 설정」→「배터리 사용 최적화」로 이동해 클라이언트를 찾고 “최적화하지 않음”을 선택하세요.
- 최근 앱에서 클라이언트 카드 오른쪽 위 메뉴를 누르고 “잠금”을 선택하세요.
- 앱의 「데이터 사용량」 페이지에서 백그라운드 모바일 데이터를 허용하세요.
ColorOS의 “배터리 사용량 자동 최적화”는 앱을 오랫동안 사용하지 않으면 백그라운드 권한을 다시 제한할 수 있습니다. 며칠 간격으로 연결 끊김이 반복된다면 구독을 계속 삭제하고 가져오기보다 먼저 배터리 관리가 여전히 백그라운드 활동 허용으로 설정되어 있는지 확인하세요.
vivo OriginOS 및 Funtouch OS
- 「설정」→「앱 및 권한」→「권한 관리」→「자동 시작」으로 이동해 클라이언트를 켜세요.
- 「설정」→「배터리」→「백그라운드 배터리 사용 관리」로 이동해 클라이언트를 선택하고 “백그라운드 고배터리 사용 허용”으로 설정하세요.
- 최근 앱을 열고 클라이언트 카드를 찾아 “잠금”을 선택하세요.
- 「i 관리자」→「데이터 관리」→「네트워크 관리」에서 WLAN, 데이터 네트워크와 백그라운드 네트워크 사용을 허용하세요.
“백그라운드 고배터리 사용 허용”은 vivo 시스템에서 특히 중요한 항목입니다. 성능 모드처럼 들리지만 실제로는 화면을 잠근 뒤에도 지속 실행되는 네트워크 서비스가 계속 작동하도록 허용하는 설정입니다. 자동 시작만 설정하면 실행 중인 VpnService가 백그라운드 정책에 의해 중지될 수 있습니다.
荣耀 MagicOS
- 「설정」→「앱」→「앱 실행 관리」로 이동하세요.
- 클라이언트의 자동 관리를 끄고 자동 시작, 연결 시작과 백그라운드 활동을 수동으로 켜세요.
- 「설정」→「배터리」→「기타 배터리 설정」으로 이동해 절전 중 네트워크 연결 설정을 확인하세요.
- 앱 상세 정보의 「데이터 사용량」에서 백그라운드 데이터를 허용하세요.
MagicOS의 앱 실행 관리 방식은 일부 EMUI 버전과 유사합니다. 시스템을 업그레이드한 뒤 서비스가 자주 종료된다면 이 페이지를 다시 열어 수동 관리 상태를 확인하세요. 시스템 이전이나 앱 재설치로 기본 정책이 복원될 수 있습니다.
삼성 One UI
- 「설정」→「배터리」→「백그라운드 사용 제한」→「자동으로 절전 상태로 전환하지 않는 앱」으로 이동해 Clash 클라이언트를 추가하세요.
- 「설정」→「애플리케이션」→클라이언트 선택→「배터리」로 이동해 “제한 없음”을 선택하세요.
- 「설정」→「연결」→「데이터 사용」→「앱에서 모바일 데이터를 사용하도록 허용」으로 이동해 백그라운드 데이터를 사용할 수 있는지 확인하세요.
- 「설정」→「연결」→「기타 연결 설정」→「VPN」에서 항상 켜진 다른 VPN이 없는지 확인하세요.
앱별 프록시·DNS·백그라운드 연결 끊김 연계 점검
먼저 앱별 적용 범위를 확인하세요
많은 Android 클라이언트는 “선택한 앱 우회” 또는 “선택한 앱만 프록시”를 설정할 수 있습니다. 두 모드는 의미가 서로 반대입니다. 전자는 목록에 있는 앱이 직접 인터넷에 연결되고, 후자는 목록에 있는 앱의 트래픽만 VpnService로 전달됩니다. 브라우저는 접속되는데 특정 앱만 계속 직접 연결된다면 먼저 해당 앱이 제외되었는지 확인하고, 곧바로 규칙 파일을 수정하지 마세요.
시스템 구성 요소도 로그인과 푸시에 영향을 줍니다. 예를 들어 일부 앱은 외부 브라우저에서 OAuth 로그인을 완료합니다. 메인 앱은 프록시를 사용하지만 브라우저가 우회되면 로그인 페이지와 콜백이 서로 다른 네트워크를 사용할 수 있습니다. 문제를 해결할 때는 일시적으로 앱별 필터를 끄고 모든 앱을 VPN에 포함하세요. 정상 작동을 확인한 뒤 우회 목록에 앱을 하나씩 추가하면 됩니다.
VPN은 연결되었지만 도메인이 열리지 않는 경우
먼저 IP 주소와 도메인을 각각 테스트하세요. 노드 지연 시간은 확인되고 IP 연결은 정상인데 도메인 요청만 시간 초과된다면 DNS를 중점적으로 확인해야 합니다. mihomo 코어를 사용할 때 자주 확인하는 설정 항목은 dns.enable, nameserver, fallback, enhanced-mode와 fake-ip-range입니다. YAML 들여쓰기는 일관되어야 하며 목록 항목 앞의 하이픈도 빠뜨리면 안 됩니다.
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 1.1.1.1
- 8.8.8.8
이 내용은 필드 구조만 보여 주는 예시이며, 모든 네트워크에서 같은 DNS 조합을 고정해 사용해야 한다는 뜻은 아닙니다. 구독 제공자가 완성된 DNS 구성을 제공한다면 해당 설정을 우선 유지하세요. Android의 “비공개 DNS”도 클라이언트의 DNS 제어와 충돌할 수 있습니다. 이름 해석에 문제가 생기면 「설정」→「네트워크 및 인터넷」→「비공개 DNS」로 이동해 “자동”으로 바꾼 뒤 비교 테스트를 진행하세요.
시스템 정보로 프로세스 종료 여부 확인하기
컴퓨터에서 디버깅할 수 있다면 ADB로 VPN과 프로세스 상태를 확인할 수 있습니다. 먼저 개발자 옵션에서 USB 디버깅을 켠 다음 아래 명령을 실행하세요. Android 버전에 따라 출력 필드는 달라질 수 있으므로 현재 VPN 패키지명, 포그라운드 서비스와 프로세스가 여전히 존재하는지를 중점적으로 확인합니다.
adb shell dumpsys connectivity
adb shell dumpsys activity services
adb shell dumpsys deviceidle
adb shell pidof 클라이언트 패키지명
화면을 잠그기 전 pidof에서 프로세스 번호가 반환되지만 화면을 잠근 뒤 빈 값이 반환된다면 일반적으로 시스템이 프로세스를 종료한 것입니다. 프로세스와 VPN 인터페이스는 존재하지만 트래픽이 더 이상 증가하지 않는다면 노드 세션, DNS 또는 코어 로그를 확인해야 합니다. 로그의 timeout은 대개 연결 시간 초과를 의미하고, 설정 구문 분석 오류가 나타나면 YAML의 필드와 들여쓰기를 다시 확인하세요.
안정적인 실행을 위한 설정과 일상 점검
권한과 예외 목록 설정을 마친 뒤 정해진 절차로 한 번 테스트해 보세요. Wi-Fi에 연결해 서비스를 시작하고 웹페이지에 접속합니다. 화면을 20분간 잠근 뒤 다시 테스트합니다. 4G 또는 5G로 전환해 30초간 기다린 후 테스트합니다. 최근 앱에서 클라이언트로 돌아와 서비스 상태와 트래픽 카운터가 계속 갱신되는지 확인합니다. 네 단계가 모두 정상이라면 VpnService, 백그라운드 권한과 네트워크 전환이 기본적으로 안정적이라는 뜻입니다.
유지해야 할 권장 시스템 권한
- VPN 연결 권한: 로컬 가상 네트워크 인터페이스를 생성하는 데 사용됩니다.
- 알림 권한: 포그라운드 서비스 상태와 실행 제어를 표시하는 데 사용됩니다.
- 백그라운드 활동 및 배터리 최적화 제외: 화면이 잠긴 동안 연결을 유지하는 데 사용됩니다.
- 자동 시작 권한: 시스템 재시작 후 클라이언트 설정에 따라 서비스를 복구하는 데 사용됩니다.
- 백그라운드 데이터 권한: 모바일 네트워크와 데이터 절약 모드에서도 계속 네트워크에 연결하는 데 사용됩니다.
불안정할 때 모든 옵션을 한꺼번에 바꾸지 마세요
한 번에 변수 하나만 조정하고 테스트 시간을 기록하세요. 먼저 다른 VPN을 끈 다음 배터리를 “제한 없음”으로 설정하고 화면 잠금 테스트를 진행합니다. 그래도 연결이 끊기면 자동 시작과 작업 잠금을 켜세요. 네트워크는 정상인데 특정 웹사이트만 이상하다면 규칙과 DNS를 점검하고 시스템 권한을 계속 추가하지 마세요. 이렇게 해야 백그라운드 프로세스 종료, 노드 장애와 설정 오류를 구분할 수 있습니다.
클라이언트 업데이트, 시스템 주요 버전 업그레이드 또는 재설치 후에는 VPN 권한, 알림, 배터리 정책과 자동 시작 상태를 다시 확인해야 합니다. Android가 일부 권한을 유지할 수도 있고 새 앱으로 간주해 다시 관리할 수도 있습니다. 구독 업데이트는 일반적으로 시스템 권한을 바꾸지 않지만 프록시 그룹 이름, DNS 영역과 규칙 순서를 변경할 수 있습니다. 업데이트 후 특정 앱에서만 문제가 생긴다면 먼저 설정 변경 사항을 비교하세요.
안정적인 전체 구성은 네 가지로 요약할 수 있습니다. 현재 Clash 클라이언트만 시스템 VPN을 사용하게 하고, 포그라운드 서비스 알림을 허용하며, 클라이언트를 배터리 및 백그라운드 실행 예외 목록에 추가하고, Wi-Fi·모바일 네트워크·화면 잠금 환경을 각각 검증하는 것입니다. VPN 아이콘은 시작점일 뿐이며, 지속적인 전송과 올바른 트래픽 분기, 안정적인 이름 해석이 최종 확인 기준입니다.