TUN 모드란: 앱 프록시에서 시스템 전체 프록시로

기존의 프록시 모드에서는 브라우저 설정(HTTP/SOCKS5)이나 시스템 환경 변수에 의존하여 애플리케이션 트래픽을 프록시로 보냈습니다. 하지만 많은 애플리케이션(예: 각종 터미널 도구, 게임 클라이언트, 백그라운드 서비스)은 시스템 프록시 설정을 따르지 않는 경우가 많습니다. 이는 "브라우저는 작동하지만 터미널은 오류가 발생하는" 불편한 상황을 초래하곤 했습니다.

TUN 모드(TUN Device Mode)는 이러한 고충을 해결하는 궁극적인 솔루션입니다. 애플리케이션 레이어의 프록시 프로토콜에 의존하는 대신, 운영체제 커널 레이어에서 가상 네트워크 카드(TUN 인터페이스)를 직접 생성합니다. 이 모드가 활성화되면 운영체제를 통과하는 모든 네트워크 패킷이 이 가상 NIC를 거치게 됩니다. Clash는 이 NIC가 수신한 레이어 3(IP 레이어) 데이터 패킷을 가로채 규칙에 따라 전달합니다.

투명 프록시: 사용자가 개별 앱에서 설정을 변경할 필요가 없으며, 앱은 프록시의 존재를 인식하지 못합니다. 네트워크 트래픽이 하부에서 조용히 전달되는 것, 이것이 바로 '투명'이라고 불리는 이유입니다.

기술 원리: 가상 NIC와 레이어 3 트래픽 제어

TUN 모드를 이해하려면 운영체제의 네트워크 프로토콜 스택부터 살펴봐야 합니다.

애플리케이션이 인터넷에 액세스하려고 할 때, 패킷을 생성하여 커널에 전달합니다. TUN 모드가 없으면 커널은 라우팅 테이블을 조회하여 실제 물리적 네트워크 카드(Wi-Fi 또는 이더넷 등)로 패킷을 보냅니다.

TUN 모드를 켜면 Clash는 다음과 같은 작업을 수행합니다:

  1. 가상 장치 생성: 시스템 커널에서 TUN 캐릭터 장치를 할당받고 IP 범위를 지정합니다.
  2. 라우팅 테이블 수정: 시스템의 기본 경로(0.0.0.0/0)를 이 가상 장치로 향하게 합니다.
  3. 패킷 캡처: 커널은 원래 물리적 NIC로 가야 할 패킷을 가상 NIC로 리다이렉션합니다. Clash는 사용자 공간 프로그램으로서 파일 디스크립터를 통해 이러한 원시(Raw) IP 패킷을 읽습니다.
  4. 프로토콜 스택 재구성: Clash 내부에 구현된 경량 TCP/IP 프로토콜 스택이 캡처된 원시 패킷을 연결로 복원하고, 규칙에 따라 해당 노드로 분기하여 전달합니다.

시스템 프록시 vs TUN 모드: 심층 비교

항목 시스템 프록시 (HTTP/SOCKS5) TUN 모드 (레이어 3 가로채기)
제어 범위 설정을 따르는 앱으로 제한 시스템 전체의 모든 트래픽
UDP 지원 제한적 (특수 지원 필요) 네이티브 전체 지원
DNS 하이재킹 브라우저나 앱 설정에 의존 모든 DNS 요청 강제 가로채기
자원 소모 매우 낮음 보통 (커널 복사 발생)
설정 난이도 쉬움 관리자 권한 필요

실전 설정: 궁극의 투명 프록시 경험 구현

Clash.Meta (mihomo) 커널에서는 TUN 모드 기능이 크게 강화되었습니다. 다음은 높은 안정성과 누수 방지를 위한 권장 설정입니다.

config.yaml - TUN 모드 핵심 설정
tun:
  enable: true
  stack: mixed          # 네트워크 스택 선택, mixed 권장
  auto-route: true      # 시스템 경로 자동 설정, 전체 트래픽 가로채기
  auto-detect-interface: true # 물리적 송신 NIC 자동 감지, 루프 방지
  dns-hijack:
    - 'any:53'          # 53번 포트로 가는 모든 DNS 요청 가로채기
  strict-route: true    # 엄격한 경로 모드, TUN 우회 트래픽 방지
  device: Meta          # 가상 NIC 이름 정의
  mtu: 1500             # 기본값 유지 또는 환경에 따라 미세 조정

네트워크 스택 선택: System, gVisor 및 Mixed

stack 필드는 Clash가 캡처한 IP 패킷을 어떻게 처리할지 결정하는 성능과 안정성의 핵심입니다.

주의 사항: DNS 누수 및 우회 문제

TUN 모드를 켰더라도 설정이 잘못되면 DNS 누수(즉, DNS 요청이 로컬 통신사로 직접 전송되어 방문 기록이 남거나 차단되는 현상)가 발생할 수 있습니다.

핵심 원칙: TUN 모드를 활성화할 때는 Clash 내부의 DNS 모듈도 반드시 올바르게 설정해야 합니다.

DNS 누수를 확실히 방지하려면 fake-ip 모드를 사용하는 것이 좋습니다.

TUN 모드와 함께 사용하는 DNS 설정
dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 'https://doh.pub/dns-query'
    - 'https://dns.alidns.com/dns-query'
  fallback:
    - 'tls://8.8.8.8:853'
    - 'tls://1.1.1.1:853'

fake-ip 모드에서는 앱이 DNS 조회를 요청할 때 Clash가 즉시 가상 IP(예: 198.18.x.x)를 반환합니다. 앱이 이 가상 IP로 연결을 시도하면, 트래픽이 TUN 인터페이스에 도달했을 때 Clash가 내부 캐시의 실제 도메인을 기반으로 분기 전달합니다. 이는 애플리케이션이 시스템 레벨에서 실제 해석을 시도하는 것을 완벽하게 방지합니다.

성능 최적화 제안

4K 영상 시청이나 기가비트 광랜 사용자 등 최고의 속도를 추구하는 사용자는 다음 조정을 고려해 보십시오.

  1. TCP 동시 접속 활성화: tcp-concurrent: true로 연결 수립 속도를 높일 수 있습니다.
  2. MTU 조정: 특정 네트워크 환경에서 웹페이지 로딩이 끊기거나 연결이 재설정되는 경우, mtu를 1400 또는 1350으로 낮춰 보십시오.
  3. 고급 커널 사용: 최신 mihomo 커널 기반의 클라이언트를 사용하십시오. Clash V.CORE는 TUN 읽기/쓰기 성능을 최적화하여 사용자 공간 전환으로 인한 지연을 크게 줄였습니다.

요약하자면, TUN 모드는 현대적인 네트워크 환경에서 진정한 투명 프록시를 구현하기 위한 최선의 해결책입니다. 관리자 권한이 필요하고 설정이 다소 복잡할 수 있지만, 한 번 구축하면 기존 앱 프록시와는 비교할 수 없는 "연결을 의식하지 않는" 경험을 제공합니다.

만약 TUN 모드를 완벽하게 활용하고 싶지만 복잡한 YAML 설정 파일을 직접 관리하기 부담스럽다면, Clash V.CORE가 훌륭한 대안이 될 것입니다. 이러한 하부 기술을 우아한 UI 뒤에 캡슐화하여 클릭 한 번으로 시스템 전체의 고성능 투명 프록시를 시작할 수 있습니다.

지금 Clash V.CORE를 다운로드하고 투명 프록시의 신세계를 경험하세요.