Clash TUN 모드란: 가상 네트워크 카드가 전체 트래픽을 처리하는 원리와 활성화 방법

TUN 모드가 가상 네트워크 카드를 통해 시스템 계층에서 전체 트래픽을 처리하는 방식을 설명하고, 시스템 프록시 모드의 사각지대와 비교하며, 플랫폼별 활성화 단계와 드라이버 권한 부여 주의사항, 흔한 충돌 해결법을 정리합니다.

DOC-01

시스템 프록시 모드의 커버리지 한계

대다수 사용자가 Clash를 처음 접할 때 사용하는 방식은 시스템 프록시 모드입니다. 이 모드의 작동 방식은 다음과 같습니다: 클라이언트가 로컬 HTTP/SOCKS5 포트를 열고, 운영체제나 브라우저가 해당 포트를 프록시 설정에 기록하며, 애플리케이션이 요청을 보낼 때 이 설정을 읽어 트래픽을 로컬 포트로 전달하고, Clash가 이를 처리합니다. 이 경로는 두 가지 전제에 의존합니다—애플리케이션이 시스템 프록시 설정을 읽을 수 있어야 하고, 애플리케이션이 사용하는 프로토콜이 프록시 지원 범위 안에 있어야 합니다.

문제는 바로 이 두 전제에서 발생합니다. 일부 명령줄 도구, 일부 게임 클라이언트, 자체 네트워크 스택을 내장한 일부 애플리케이션은 시스템 프록시 설정을 읽지 않거나, HTTP 프로토콜만 지원하고 UDP를 지원하지 않습니다. 이런 트래픽은 Clash를 우회해 물리 네트워크 카드로 직접 나가게 됩니다. 결과적으로 브라우저 분기는 정상 작동하지만 특정 클라이언트가 계속 연결에 실패하거나, 항상 실제 로컬 IP로 통신하는 문제의 근본 원인이 대부분 여기에 있습니다.

시스템 프록시 모드의 사각지대는 세 가지로 정리할 수 있습니다: 시스템 프록시 설정을 따르지 않는 프로세스, UDP에 의존하며 프록시 프로토콜이 전달을 지원하지 않는 경우, 그리고 애플리케이션 계층 아래에서 연결을 시작하는 시스템 서비스나 드라이버입니다. TUN 모드는 바로 이 세 가지 사각지대를 보완하기 위해 존재합니다.

DOC-02

TUN 모드의 작동 원리

TUN은 운영체제 커널 네트워크 스택의 인터페이스 계층에서 작동하는 가상 네트워크 장치입니다. Clash Meta(mihomo 코어)가 TUN 모드를 활성화하면 시스템 내에 가상 네트워크 카드를 생성하고, 시스템 라우팅 테이블을 수정해 기본 라우트나 지정된 네트워크 세그먼트의 트래픽을 이 가상 네트워크 카드로 유도합니다. 이때 트래픽의 차단 지점이 애플리케이션 계층의 프록시 설정에서 네트워크 계층의 라우팅 규칙으로 내려갑니다.

이 차이가 커버리지 범위의 차이를 결정합니다. 시스템 프록시 모드는 "애플리케이션이 적극적으로 협력해야 프록시될 수 있는" 방식이고, TUN 모드는 "시스템 라우팅을 거치기만 하면 가로채지는" 방식입니다. 연결을 시작하는 것이 브라우저든 명령줄 도구든 백그라운드 서비스든, 데이터 패킷이 시스템 네트워크 스택을 거치기만 하면 가상 네트워크 카드로 라우팅되어 Clash 코어가 규칙에 따라 처리합니다—직접 연결, 프록시 경유, 또는 차단 여부를 판단하는 로직은 일반 프록시 모드와 완전히 동일하며 트래픽 진입점만 바뀐 것입니다.

구체적인 흐름은 대략 다음과 같습니다:

  1. Clash 코어가 가상 네트워크 카드(예: Meta 또는 utun 장치)를 생성하고 가상 IP 세그먼트를 할당합니다.
  2. 코어가 시스템 라우팅 테이블에 규칙을 삽입해 처리해야 할 트래픽을 해당 가상 네트워크 카드로 지정합니다.
  3. 애플리케이션이 보낸 데이터 패킷이 시스템 라우팅 판단을 거쳐 물리 네트워크 카드가 아닌 가상 네트워크 카드로 들어갑니다.
  4. Clash 코어가 사용자 공간에서 가상 네트워크 카드의 데이터를 읽어 원본 TCP/UDP 연결 요청을 복원합니다.
  5. 규칙 목록에 따라 해당 연결을 직접 연결할지 특정 프록시 노드를 경유할지 판단한 후, 해당 출구로 전달합니다.

이 메커니즘은 클라이언트가 가상 네트워크 카드를 생성하고 라우팅 테이블을 수정할 시스템 권한을 가져야 함을 요구합니다. 이것이 바로 TUN 모드가 각 플랫폼에서 시스템 프록시 모드처럼 스위치만 켜면 되는 게 아니라 별도의 권한 부여가 필요한 이유입니다.

참고

TUN 모드가 처리하는 것은 시스템 라우팅 계층의 트래픽이며, 모든 상황에서 무조건 적용되는 것은 아닙니다. 일부 애플리케이션이 자체적으로 사용하는 프라이빗 DNS 해석, 일부 가상 머신이나 컨테이너의 독립적인 네트워크 네임스페이스는 여전히 호스트 라우팅 테이블을 거치지 않을 수 있으므로 별도로 확인이 필요합니다.

DOC-03

두 모드의 핵심 차이 비교

시스템 프록시 모드와 TUN 모드를 같은 표에 놓고 비교하면 어떤 상황에서 어느 것을 쓸지 판단하기 쉬워집니다.

비교 항목시스템 프록시 모드TUN 모드
차단 계층애플리케이션 계층, 앱이 프록시 설정을 읽어야 함네트워크 계층, 시스템 라우팅 테이블에 의존
프로토콜 커버리지주로 HTTP/HTTPS, UDP 지원 제한적TCP와 UDP 전체 트래픽 커버
프록시 설정을 지원하지 않는 앱트래픽 우회, 제어 불가기존처럼 라우팅에 의해 가로채짐
시스템 권한 요구사항특별한 권한 불필요가상 네트워크 카드 생성 및 라우팅 테이블 수정 권한 필요
주요 적용 상황일상적인 웹 브라우징, 단일 앱 분기게임, 명령줄 도구, 다중 프로세스 환경의 전역 분기
로컬 가상화 도구와 충돌 가능성낮음중간, 다른 가상 네트워크 카드 구성 요소 확인 필요

간단히 결론짓자면: 단순히 브라우저 분기만 하려면 시스템 프록시 모드로 충분하고 설정도 더 간단합니다. 본체의 모든 트래픽(프록시 설정을 따르지 않는 프로세스까지 포함해)을 규칙으로 관리하는 것이 목표라면 TUN 모드가 필수 선택입니다.

DOC-04

플랫폼별 활성화 단계

각 플랫폼의 가상 네트워크 카드 구현 방식이 다르고 권한 부여 방식도 다르므로, 아래에서 플랫폼별로 각각 설명합니다.

Windows

Windows에서 TUN 구현은 Wintun 드라이버에 의존합니다. 주요 클라이언트(예: Clash Verge Rev, Clash for Windows 계열 데스크톱 클라이언트)의 설치 패키지에는 이미 이 드라이버가 포함되어 있으며, 처음 활성화할 때 보통 시스템의 드라이버 설치 확인 창이나 UAC 권한 상승 팝업이 뜹니다. 관리자 권한으로 클라이언트를 실행하고 해당 드라이버 설치 요청을 허용해야 하며, 그렇지 않으면 가상 네트워크 카드를 생성할 수 없습니다.

  1. 시스템 프록시 모드를 끕니다(두 모드의 라우팅 규칙이 서로 간섭하는 것을 방지).
  2. 클라이언트를 관리자 권한으로 다시 실행합니다.
  3. 설정에서 TUN 모드 스위치를 찾아 켜고, 드라이버 설치 알림이 뜨면 허용을 클릭합니다.
  4. "네트워크 연결" 패널을 열어 Meta 또는 유사한 이름의 가상 네트워크 카드가 연결됨 상태로 나타나는지 확인합니다.
  5. 브라우저로 IP 조회 페이지에 접속해 출구 IP가 프록시 노드가 위치한 지역으로 바뀌었는지 확인합니다.

macOS

macOS는 시스템 자체의 utun 인터페이스 계열을 사용하므로 클라이언트가 가상 네트워크 카드를 생성하는 데 별도의 드라이버는 필요 없지만, 보조 프로세스 권한이 필요합니다. 데스크톱 클라이언트(예: Clash Verge Rev, ClashX 계열)는 처음 TUN을 켤 때 특권 보조 도구 설치를 요청하며, 시스템이 비밀번호 입력창을 표시하면 현재 사용자 비밀번호를 입력해 권한을 부여합니다.

  1. 설정에서 TUN 모드 스위치를 켭니다.
  2. 시스템이 권한 부여 알림을 표시하면 macOS 로그인 비밀번호를 입력해 확인합니다.
  3. 클라이언트가 보조 서비스 설치나 업데이트가 필요하다고 안내하면 안내에 따라 일회성 설치를 완료합니다.
  4. 시스템의 "네트워크" 설정 패널에서 새 가상 인터페이스가 추가되었는지 확인합니다.

최신 버전의 macOS는 시스템 확장 기능과 네트워크 확장 기능의 권한을 더 엄격하게 제한합니다. 권한 부여 팝업이 뜨지 않거나 클릭 후 반응이 없으면 "시스템 설정 - 개인정보 보호 및 보안"에서 차단된 백그라운드 구성 요소가 있는지 확인하고, 수동으로 허용한 후 클라이언트를 재시작해 다시 시도하세요.

Android

Android에서 TUN 모드는 시스템의 VPNService 인터페이스를 통해 구현되며, 이는 시스템이 앱에 전역 프록시 기능을 제공하는 표준 방식으로 root 권한이 필요 없습니다. 활성화 방식은 일반 VPN 앱을 권한 부여하는 것과 유사합니다.

  1. 클라이언트(예: Clash Meta for Android)에서 TUN 또는 "가상 네트워크 카드" 스위치를 켭니다.
  2. 시스템이 "연결 요청" 대화상자를 표시하며 해당 앱이 VPN 연결을 설정한다고 안내하면 확인을 클릭합니다.
  3. 상태 표시줄에 VPN 아이콘이 나타나면 가상 네트워크 카드가 적용된 것입니다.
  4. 특정 로컬 앱이 프록시를 거치지 않도록 제외하려면 앱의 개별 프록시 설정에서 따로 체크를 해제할 수 있습니다.

주의할 점은 시스템 차원에서 동시에 하나의 VPNService만 활성화될 수 있다는 것입니다. 기기에 다른 VPN 앱이 설치되어 켜져 있다면 두 앱이 서로 자원을 뺏으므로 먼저 다른 하나를 꺼야 합니다.

iOS

iOS의 동등한 메커니즘은 NetworkExtension 프레임워크 아래의 개인 VPN 구성입니다. 클라이언트가 해당 모드를 처음 켤 때 VPN 구성 프로필 설치를 요청하며, 시스템 알림에서 신뢰를 확인해야 합니다.

  1. 클라이언트 설정에서 전역 트래픽 처리 관련 스위치를 켭니다.
  2. 시스템이 "VPN 구성 추가 허용" 알림을 표시하면 기기 비밀번호를 입력하거나 Face ID로 확인합니다.
  3. "설정 - VPN"에서 해당 구성 상태가 연결됨인지 확인합니다.

Linux

Linux에서 TUN 장치 생성은 커널에 내장된 tun 모듈에 의존하며 보통 별도로 드라이버를 설치할 필요는 없지만, 클라이언트 프로세스가 CAP_NET_ADMIN 권한을 갖거나 root 권한으로 실행되어야 인터페이스를 생성하고 라우팅 테이블을 수정할 수 있습니다.

# root 권한으로 클라이언트를 실행하거나, 바이너리 파일에 별도로 네트워크 관리 권한을 부여
sudo setcap cap_net_admin,cap_net_raw=eip /path/to/clash-core

권한을 부여한 후에는 일반 사용자 권한으로 클라이언트를 실행하고 TUN 모드를 켤 수 있으며, 매번 sudo로 전체 프로그램을 실행할 필요가 없어 불필요한 권한 노출을 줄일 수 있습니다.

DOC-05

흔한 충돌과 문제 해결 방법

TUN 모드는 가상 네트워크 카드 생성과 라우팅 테이블 재작성을 수반하므로 문제가 생겼을 때 보통 "연결은 되지만 효과가 없음" 또는 "인터넷이 전혀 안 됨" 같은 형태로 나타나며, 명확한 오류 메시지가 뜨지 않는 경우가 많습니다. 아래는 자주 발생하는 몇 가지 상황입니다.

다른 VPN이나 가상 네트워크 카드 도구와의 충돌

기기에서 회사용 VPN 클라이언트, 일부 보안 소프트웨어에 내장된 네트워크 필터링 드라이버, 또는 다른 프록시 도구의 TUN 구성 요소가 동시에 실행되고 있으면 여러 가상 네트워크 카드가 라우팅 우선순위를 두고 경쟁하게 됩니다. 보통 TUN을 켠 후 네트워크가 불안정해지거나, 일부 트래픽이 예상 경로를 벗어나는 형태로 나타납니다. 해결 방법은 다른 가상 네트워크 구성 요소를 모두 끄고 하나만 실행되도록 한 후, Clash의 TUN이 단독으로 정상 작동하는지 확인하고, 그다음 둘을 함께 쓸 필요가 있는지, 라우팅 우선순위를 어떻게 조정할지 검토하는 것입니다.

DNS 해석 이상

TUN 모드를 켠 후에도 도메인 해석이 여전히 시스템 기본 DNS를 거치고 Clash 코어를 통하지 않으면, 도메인이 잘못된 주소로 하이재킹되거나 규칙에서 도메인으로 매칭하는 항목이 작동하지 않을 수 있습니다. 이런 경우 보통 설정에서 DNS 처리 관련 옵션을 함께 켜서 코어가 해석 요청을 통합 처리하도록 해야 하며, 트래픽 계층은 처리되고 있는데 해석 계층은 여전히 시스템 기본 DNS를 쓰는 상태를 피해야 합니다.

가상 네트워크 카드 생성 실패

Windows에서 흔한 원인은 드라이버가 제대로 설치되지 않았거나 권한이 부족한 경우입니다. macOS에서 흔한 원인은 특권 보조 도구가 시스템 보안 정책에 의해 차단된 경우입니다. Linux에서 흔한 원인은 권한 설정이 제대로 되지 않은 경우입니다. 문제 해결 순서는 다음과 같습니다: 먼저 클라이언트가 충분한 권한으로 실행되고 있는지 확인하고, 시스템 로그나 클라이언트 로그에 명확한 드라이버 또는 권한 오류가 있는지 확인한 후, 마지막으로 동일한 이름의 가상 네트워크 인터페이스를 다른 프로그램이 점유하고 있지 않은지 확인합니다.

일부 앱이 여전히 처리되지 않는 경우

소수의 앱은 시스템 라우팅 테이블을 우회해 자체적으로 지정한 네트워크 인터페이스로 데이터를 전송하는데, 이런 경우는 TUN 모드에서도 커버할 수 없습니다. 이는 설정 오류가 아니라 해당 앱 자체의 구현 방식 때문입니다. 특정 앱이 어떤 모드에서도 계속 제어되지 않는다면, 해당 앱 자체의 네트워크 설정에서 독립적인 프록시 또는 직접 연결 옵션이 있는지 확인하세요.

주의

TUN 모드를 끈 후에는 가상 네트워크 카드와 관련 라우팅 규칙이 제대로 정리되었는지 확인한 다음 시스템 프록시 모드를 다시 켤지 결정하는 것이 좋습니다. 두 세트의 규칙이 동시에 남아 트래픽 흐름이 혼란스러워지는 것을 피할 수 있습니다.

DOC-06

TUN 모드를 항상 켜둬야 할까

TUN 모드는 커버리지가 더 완전하지만, 그만큼 시스템 계층에 라우팅 재작성이 한 겹 더 추가되어 문제가 생기면 확인해야 할 경로도 더 길어집니다. 브라우저만 사용하고 분기 정밀도에 대한 요구가 높지 않은 일상적인 상황에서는 시스템 프록시 모드로도 충분하며, 설정이 간단하고 충돌 가능성도 낮습니다. 게임 클라이언트, 명령줄 도구, 시스템 프록시 설정을 따르지 않는 백그라운드 서비스 등을 커버해야 하는 경우에는 TUN 모드가 더 안정적인 선택입니다.

둘은 상호 배타적이지 않으며, 대부분의 클라이언트가 언제든 전환할 수 있도록 지원합니다. 현재 사용 상황에 맞게 자유롭게 켜고 끌 수 있으며, 반드시 하나의 모드만 고정해서 계속 사용할 필요는 없습니다.

Clash 클라이언트 받기

다운로드 페이지에서 각 플랫폼용 클라이언트와 코어 설치 패키지를 제공하며, 가이드 페이지에는 플랫폼별 전체 설정 단계가 설명되어 있습니다.

Clash 다운로드