TUN 모드와 시스템 프록시의 차이

많은 사용자가 Clash를 처음 접할 때 일반적인 '시스템 프록시' 설정만으로 충분하다고 생각합니다. 하지만 Docker, Git CLI, 혹은 일부 특수한 네트워크 스택을 사용하는 애플리케이션은 시스템 프록시 환경 변수(HTTP_PROXY)를 무시하거나 제대로 처리하지 못하는 경우가 많습니다. 이때 필요한 것이 바로 TUN 모드입니다.

TUN 모드는 운영체제 수준에서 가상 네트워크 인터페이스를 생성하여 모든 L3 트래픽을 가로챕니다. 이는 애플리케이션이 프록시 설정을 지원하는지 여부와 상관없이 모든 네트워크 패킷이 Clash 코어를 통과하게 함을 의미합니다. 특히 Windows 10/11 환경이나 macOS에서 WSA(Windows Subsystem for Android)나 Docker Desktop을 사용할 때 TUN 모드는 선택이 아닌 필수입니다.

알림: TUN 모드를 사용하려면 관리자 권한이 필요하며, 시스템의 라우팅 테이블을 직접 수정하므로 다른 VPN 소프트웨어와 충돌할 수 있습니다.

DNS 오염과 하이재킹의 기술적 배경

개발자가 docker pull 명령어를 실행할 때 가장 먼저 발생하는 문제는 DNS 확인입니다. 국내외 많은 ISP(인터넷 서비스 제공자)는 특정 도메인에 대해 잘못된 IP 주소를 반환하는 DNS 오염(Poisoning)을 수행합니다. Clash의 TUN 모드는 이를 해결하기 위해 DNS 하이재킹 기능을 제공합니다.

Clash DNS 설정에서 enhanced-mode: fake-ip를 사용하면, Clash는 실제 IP 주소를 찾기 전에 가짜 IP(198.18.0.1 등)를 즉시 반환합니다. 이후 실제 데이터 패킷이 전송될 때 Clash 내부에서 실제 IP로 매핑하여 프록시 서버로 전달합니다. 이 방식은 DNS 지연을 획기적으로 줄여주지만, 일부 Docker 컨테이너 내부의 네트워크 스택에서 fake-ip 범위를 인식하지 못해 연결 오류가 발생할 수 있습니다.

따라서 엔지니어링 환경에서는 real-ip 모드를 사용하거나, 특정 도메인에 대해서만 DNS 하이재킹을 우회하는 정교한 설정이 필요합니다. GitHub의 경우 github.com 뿐만 아니라 objects.githubusercontent.com과 같은 에셋 도메인도 함께 고려해야 합니다.

Docker 환경을 위한 TUN 모드 최적화 설정

Docker Desktop은 자체적인 가상화 네트워크 레이어를 가지고 있습니다. 이 레이어는 호스트 시스템의 DNS 설정을 상속받지만, 때때로 Clash의 가상 인터페이스와 충돌을 일으킵니다. 이를 해결하기 위해서는 Clash YAML 설정의 dns 섹션과 tun 섹션을 긴밀하게 연결해야 합니다.

특히 Docker 컨테이너 내에서 외부 리포지토리에 접근할 때 connection refused 오류가 발생한다면, 이는 대개 DNS 응답이 로컬 루프백 주소로 가두어지기 때문입니다. Clash의 tun 설정에서 auto-route: trueauto-detect-interface: true를 활성화하여 Docker의 가상 브릿지 트래픽이 Clash를 통과하도록 강제해야 합니다.

  1. Stack 설정: system 혹은 gvisor 스택 중 안정성이 높은 것을 선택하세요. 최신 환경에서는 system 스택이 성능 면에서 우수합니다.
  2. DNS 서버 분리: nameserver에는 국내 DNS(예: 1.1.1.1)를, fallback에는 해외 암호화 DNS(DoH/DoT)를 설정하여 오염을 방지합니다.
  3. IP 범위 제외: Docker 전용 서브넷(예: 172.17.0.0/16)을 skip-proxy 목록에 추가하여 컨테이너 간 통신 지연을 방지하세요.

GitHub 연결성 강화를 위한 규칙 구성

GitHub은 단일 도메인이 아닙니다. 소스 코드를 받는 github.com, 릴리스 파일을 받는 githubusercontent.com, 그리고 Git LFS(Large File Storage) 서버들이 복잡하게 얽혀 있습니다. 이 중 하나라도 DIRECT(직결)로 풀리거나 잘못된 노드를 타게 되면 git clone 도중 연결이 끊기는 현상이 발생합니다.

최적의 GitHub 가속을 위해 Clash 규칙 섹션에서 GEOSITE,github,Proxy와 같은 그룹화된 규칙을 사용하는 것이 좋습니다. 만약 특정 리전의 노드가 GitHub API 제한(Rate Limit)에 걸린다면, GitHub 트래픽만 별도의 고정 IP 노드로 라우팅하는 전략이 유효합니다.

GitHub 연결 문제는 대개 DNS 확인 단계에서 시작됩니다. fake-ip-filter에 GitHub 관련 도메인을 노출시키지 않거나, 반대로 확실하게 프록시 그룹에 묶어주는 것이 핵심입니다.

실무 엔지니어를 위한 YAML 템플릿

아래는 Docker와 GitHub 문제를 동시에 해결하기 위한 실무용 설정 템플릿입니다. 이 내용을 자신의 Clash 프로필에 맞게 수정하여 적용해 보세요.

Professional Clash TUN Configuration

tun:
  enable: true
  stack: system
  device: utun
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53
    - tcp://any:53

dns:
  enable: true
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip
  fake-ip-filter:
    - '*.lan'
    - 'docker.com'
    - 'github.com'
  nameserver:
    - 1.1.1.1
    - 8.8.8.8
  fallback:
    - https://dns.google/dns-query
    - https://1.1.1.1/dns-query

rules:
  - DOMAIN-KEYWORD,github,Proxy
  - DOMAIN-SUFFIX,docker.com,Proxy
  - DOMAIN-SUFFIX,docker.io,Proxy
  - GEOIP,CN,DIRECT
  - MATCH,Proxy
합규 고지: 현지 법규 및 각 서비스 제공업체의 약관을 준수하시기 바랍니다. 본 문서는 Clash 라우팅 및 DNS 기술 설명만을 목적으로 하며, 인가되지 않은 접근이나 조직의 보안 정책 우회 또는 불법적인 용도로 사용되는 것을 권장하지 않습니다.

결론

Clash TUN 모드는 단순한 프록시를 넘어 시스템 전체의 네트워크 흐름을 제어하는 강력한 도구입니다. Docker pull 실패나 GitHub 타임아웃으로 고통받는 개발자라면, 오늘 소개한 DNS 하이재킹 설정과 TUN 최적화 템플릿을 통해 쾌적한 개발 환경을 구축할 수 있습니다.

지금 무료로 Clash V.CORE를 다운로드하여, 더 빠르고 안정적인 엔지니어링 네트워크를 직접 경험해 보세요.