시스템 프록시는 Clash의 가장 기본적인 트래픽 인수 방식으로, 운영 체제의 HTTP/SOCKS5 프록시 파라미터를 설정하여 프록시를 지원하는 앱의 트래픽을 Clash로 전달합니다. 그러나 시스템 프록시에는 본질적인 한계가 있습니다—게임 클라이언트, 커맨드라인 도구 등 직접 네트워크 연결을 설정하는 프로그램은 제어할 수 없습니다. Clash 공식이 출시한 TUN 모드는 가상 네트워크 카드를 통해 네트워크 계층에서 시스템의 모든 트래픽을 인수하여, 진정한 전역 투명 프록시를 실현하는 공식 해결책입니다.
TUN 모드의 동작 원리
TUN(Network Tunnel)은 운영 체제가 제공하는 가상 네트워크 인터페이스 메커니즘으로, OSI 모델의 3계층(네트워크 계층)에서 동작합니다. Clash가 TUN 모드를 활성화하면 시스템에 utun(macOS)또는 Meta(Windows/Linux)라는 이름의 가상 네트워크 카드를 생성하고 시스템 라우팅 테이블을 수정하여 모든 아웃바운드 IP 트래픽을 이 가상 네트워크 카드로 유입시킵니다.
트래픽이 가상 네트워크 카드에 진입하면, Clash는 사용자 공간에서 이를 분석하여 목적지 주소를 식별하고, 규칙 설정에 따라 프록시를 통할지 직접 연결할지 결정한 후 실제 물리 네트워크 카드를 통해 전송합니다. 이 전체 과정은 애플리케이션에 완전히 투명하며, 애플리케이션은 별도의 설정이 필요하지 않습니다.
TAP 모드(2계층, 이더넷 프레임 수준에서 동작)와 비교하면, TUN 모드는 ARP, 이더넷 헤더 등의 2계층 세부 사항을 처리할 필요가 없어 성능이 더 높고 크로스 플랫폼 호환성 구현도 더 쉽습니다.
TUN 모드 활성화 방법
TUN 모드를 활성화하는 두 가지 방법이 있습니다. 그래픽 클라이언트는 보통 설정 페이지에 TUN 스위치를 제공합니다. Clash for Windows를 예로 들면, 먼저 「일반」 설정에서 「Service Mode」(서비스 모드)를 설치해야 하고, 설치 완료 후 「TUN Mode」 스위치를 켜면 됩니다. 서비스 모드 설치에는 관리자 권한이 필요하며, Clash가 시스템 서비스로 실행되어 라우팅 테이블 수정 권한을 얻기 위함입니다.
다른 방법은 설정 파일에서 직접 TUN 설정을 선언하는 것입니다:
tun:
enable: true
stack: mixed
dns-hijack:
- any:53
auto-route: true
auto-detect-interface: true
세 가지 TUN 스택 모드 선택
Mihomo 코어는 세 가지 TUN 프로토콜 스택 구현을 제공하며 각각 장단점이 있습니다:
- system: 운영 체제의 기본 TCP/IP 스택을 직접 호출합니다. 성능이 가장 높고 CPU 및 메모리 오버헤드가 가장 적지만, 일부 시스템 설정에서 호환성 문제가 발생할 수 있습니다.
- gvisor: Google gVisor 프로젝트의 사용자 공간 TCP/IP 프로토콜 스택 구현을 사용합니다. 운영 체제 커널과 완전히 격리되어 호환성이 가장 좋으며, 문제 진단이나 특수 환경에서 사용하기 적합하지만 성능은 system 모드보다 약간 낮습니다.
- mixed: TCP 연결은 system 스택을, UDP 연결은 gVisor 스택을 사용합니다. 두 방식의 장점을 결합하여 TCP 성능은 네이티브에 가깝고 UDP 호환성이 좋습니다. 현재 가장 권장되는 선택으로, 대부분의 환경에서 최고의 성능을 발휘합니다.
DNS 하이재킹과 누출 방지
dns-hijack: [any:53] 이 설정은 매우 중요합니다. 이는 임의의 IP 주소의 53 포트로 전송되는 모든 DNS 요청을 Clash 내장 DNS 모듈로 강제 리디렉션합니다.
왜 DNS를 하이재킹해야 할까요? TUN 모드에서 일부 앱이 8.8.8.8:53으로 직접 DNS 요청을 보내면(시스템 DNS 설정을 우회하여), 이 요청은 직접 물리 네트워크 카드를 통해 나가게 되어 Clash의 규칙 판단을 거치지 않습니다. 이는 DNS 누출(실제 접속 기록 노출)을 일으킬 뿐만 아니라 일부 도메인이 올바른 프록시 노드로 라우팅되지 않는 문제도 발생시킵니다. DNS 하이재킹을 활성화하면 모든 DNS 요청이 Clash에 의해 통합 처리되며, Fake-IP 모드와 함께 사용하면 최적의 DNS 하이재킹 방지 효과를 얻을 수 있습니다.
확인 및 문제 해결
TUN 모드 활성화 후 터미널에서 curl -I https://www.google.com을 실행하여 정상 작동 여부를 확인할 수 있습니다. 정상적인 HTTP 응답 헤더를 받으면 커맨드라인 도구의 트래픽이 프록시를 통하고 있다는 의미입니다. Clash의 「연결」 페이지에서 TUN이 접수한 모든 연결을 실시간으로 확인할 수 있으며, 이전에 시스템 프록시로는 커버되지 않았던 프로그램도 포함됩니다.
활성화 후 네트워크가 완전히 끊기는 경우, 가장 흔한 원인은 auto-detect-interface가 아웃바운드 네트워크 카드를 올바르게 인식하지 못한 것입니다. 수동으로 지정할 수 있습니다:
tun:
enable: true
stack: mixed
auto-route: true
interface-name: en0 # macOS 물리 네트워크 카드 이름, Windows는 보통 이더넷 또는 WLAN