읽는 시간 약 9분

Clash DNS 유출 검사 및 해결: 유출 방지 설정 실전 가이드

온라인 검사 페이지로 DNS 유출 여부를 먼저 확인한 뒤, nameserver 설정·DNS 하이재킹 리스닝·규칙 처리까지 3단계로 완벽한 유출 방지 설정을 완성하세요.

DNS 유출이란: 프록시는 켜져 있는데 조회는 로컬로 새는 현상

도메인 해석은 인터넷 접속의 첫 단계입니다. 브라우저가 도메인을 받으면 먼저 IP 주소로 변환해야 하는데, 이 과정을 담당하는 것이 DNS입니다. DNS 유출이란 프록시가 이미 '연결됨' 상태를 표시하고 있음에도 해석 요청이 여전히 실제 네트워크를 통해 직접 발송되어 통신사나 라우터의 DNS 서버에 도달하는 현상을 말합니다. 결과는 두 가지입니다. 첫째는 프라이버시 문제로, 어떤 도메인을 언제 방문했는지 로컬 네트워크 제공자가 그대로 파악할 수 있습니다. 둘째는 사용성 문제로, 로컬 DNS가 조작된 결과를 반환하면 브라우저가 잘못된 IP를 받게 되어 'Clash는 연결됨 상태인데 웹페이지가 열리지 않거나 엉뚱한 내용이 열리는' 전형적인 증상이 나타납니다.

프록시를 켰는데도 왜 유출이 발생할까요? 흔한 원인은 다음 네 가지입니다.

  • 시스템 프록시 모드는 브라우저 등 애플리케이션의 웹 요청만 처리할 뿐 시스템 DNS 설정은 변경하지 않으므로, 네트워크 어댑터에 자동으로 할당된 통신사 DNS가 그대로 작동합니다.
  • Clash의 내장 DNS가 활성화되지 않았거나, 활성화되어 있어도 리스닝 주소가 시스템이 실제로 사용하는 해석 경로를 커버하지 못하는 경우입니다.
  • 브라우저 자체의 '보안 DNS'(DoH) 기능이 시스템 리졸버를 건너뛰고 DoH 서버에 직접 접속하기 때문에 검사 결과도 왜곡될 수 있습니다.
  • IPv6 경로가 제어되지 않아 AAAA 조회가 IPv6용 DNS 서버를 통해 그대로 빠져나가는 경우입니다. IPv4 DNS만 바꿔서는 이 경로를 막을 수 없습니다.

1단계: 먼저 검사해서 유출 여부를 확인하기

수정하기 전에 먼저 증거를 확보해야 합니다. 아래 순서대로 진행하면 유출 여부와 유출 경로를 정확히 파악할 수 있습니다.

  1. Clash 클라이언트를 열고 프록시가 연결되어 있는지 확인한 뒤 현재 모드(규칙, 글로벌 또는 다이렉트)를 기록해 둡니다.
  2. 브라우저의 보안 DNS를 일시적으로 끕니다. Chrome은 '설정 → 개인정보 보호 및 보안 → 보안 → 보안 DNS 사용'에서 끄고, Edge도 경로가 동일합니다. Firefox는 '설정 → 네트워크 설정'에서 'HTTPS 기반 DNS 사용'을 해제합니다. 끄지 않으면 검사 결과가 시스템 경로가 아닌 브라우저 DoH의 흐름을 반영하게 됩니다.
  3. 공개 DNS 유출 검사 페이지(dnsleaktest, ipleak, browserleaks의 DNS 검사 등)를 열어 표준 테스트를 먼저 실행한 뒤 확장 테스트도 실행합니다.
  4. 결과를 확인합니다. 목록에 자신이 거주하는 지역의 통신사 DNS 노드가 나타나면 유출이 있는 것이고, Cloudflare나 Google 같은 해외 공용 DNS 또는 프록시 출구 서버의 리졸버만 나타나면 유출이 없는 것입니다.
  5. 시스템 프록시 모드와 TUN 모드 각각 한 번씩 테스트합니다. 두 모드는 제어 범위가 다르기 때문에 결과가 다르게 나오는 경우가 많습니다.
참고

검사 전에 시스템 DNS 캐시를 한 번 지워 이전 캐시로 인한 오차를 방지하세요. Windows는 관리자 권한으로 ipconfig /flushdns를 실행하고, macOS는 sudo dscacheutil -flushcache를 실행한 뒤 sudo killall -HUP mDNSResponder를 실행합니다.

오판하기 쉬운 부분이 있습니다. nameserver에 국내(중국 본토) 공용 DNS(예: 알리바바 223.5.5.5)를 설정했다면 검사 사이트에서 알리바바 노드가 표시될 수 있습니다. 이는 조회가 실제 네트워크를 거쳐 해당 DNS 사업자에게 직접 전달되었다는 뜻으로, 실제 IP가 해당 DNS 사업자에게 노출된 것이지만 통신사 차원의 유출은 아닙니다. 이 부분을 문제로 볼지 여부는 '일반적인 분산 처리'와 '엄격한 유출 방지' 중 어느 쪽을 원하는지에 따라 달라지며, 아래에서 두 가지 설정 방식을 모두 안내합니다.

해결 방법 1: nameserver를 제대로 설정하기

Clash의 DNS 동작은 설정 파일의 dns 항목이 결정합니다. 먼저 각 필드를 정확히 파악한 뒤 수정하세요.

  • enable: 내장 DNS의 메인 스위치로, 유출 방지를 위해서는 반드시 true로 설정해야 합니다.
  • listen: 리스닝 주소와 포트로, 0.0.0.0:53으로 설정하면 로컬 53번 포트로 오는 조회를 모두 처리합니다.
  • enhanced-mode: fake-ip 또는 redir-host입니다. fake-ip는 198.18.0.1/16 대역의 가상 주소를 반환하고 Clash가 연결을 처리할 때 내부적으로 도메인을 역조회하므로 해석 과정이 Clash를 벗어나지 않아 유출 방지에 가장 효과적입니다. redir-host는 클라이언트가 먼저 실제 IP를 해석한 뒤 연결을 시작하는 방식입니다.
  • nameserver: 다이렉트 도메인 해석을 담당하는 기본 상위 서버입니다. IP가 명시된 DoH 주소 사용을 권장합니다. 예: https://223.5.5.5/dns-query, https://119.29.29.29/dns-query.
  • fallback: 해외 도메인에 해당할 때 사용하는 상위 서버로, 보통 https://1.1.1.1/dns-query, https://8.8.8.8/dns-query를 지정하며 조회는 프록시를 거쳐 전송됩니다.
  • default-nameserver: 위의 DoH 서버 자체 도메인을 해석하기 위한 '부트스트랩 DNS'로, 순수 IP(예: 223.5.5.5, 119.29.29.29)를 지정해야 'DNS 서버의 도메인을 해석하려면 또 DNS가 필요한' 순환 구조를 방지합니다.
  • proxy-server-nameserver(mihomo): 노드 서버 도메인 해석 전용으로, 신뢰할 수 있는 국내(중국 본토) DoH를 지정해 노드 도메인이 오염되어 접속이 안 되는 상황을 방지합니다.

일반적인 분산 처리를 위한 전체 예시 설정입니다.

dns:
  enable: true
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver:
    - https://223.5.5.5/dns-query
    - https://119.29.29.29/dns-query
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query
  proxy-server-nameserver:
    - https://223.5.5.5/dns-query

엄격한 유출 방지 방식은 nameserver에서 국내 상위 서버를 제거하고 모두 fallback을 통해 프록시로 해석하는 방식이며, 국내 사이트의 첫 해석이 다소 느려지는 단점이 있습니다. 절충안은 nameserver-policy로 도메인별로 분산 처리하는 것입니다.

  nameserver-policy:
    "geosite:cn":
      - https://223.5.5.5/dns-query
    "geosite:geolocation-!cn":
      - https://1.1.1.1/dns-query

구독 파일에는 보통 자체 dns 항목이 포함되어 있어 구독을 직접 수정하면 다음 업데이트 시 덮어씌워집니다. 권장 방법: 먼저 원본 설정을 백업한 뒤, 클라이언트의 설정 오버라이드 기능(Clash Verge Rev의 '전역 확장 설정', Clash Nyanpasu의 Merge 등)으로 dns 항목을 주입하면 구독을 업데이트한 뒤에도 설정이 그대로 유지됩니다.

해결 방법 2: 조회가 실제로 Clash로 전달되도록 하기(하이재킹 리스닝)

설정을 아무리 정확히 해도 시스템이 조회를 Clash로 보내지 않으면 소용이 없습니다. 편의성 순으로 정리한 세 가지 방식을 소개합니다.

방식 1: TUN 모드(권장)

mihomo(Clash Meta) 커널의 TUN 모드는 가상 네트워크 어댑터를 생성해 UDP 53번 포트의 DNS 조회를 포함한 기기 전체 트래픽을 처리합니다. dns-hijack은 어떤 주소로 향하든 53번 포트로 가는 조회를 내장 DNS로 가로챕니다. Clash Verge Rev, Clash Nyanpasu, FlClash 등 클라이언트는 설정에서 한 번의 클릭으로 활성화할 수 있으며, 활성화 후에는 시스템 DNS 설정이 무엇이든 더 이상 중요하지 않습니다.

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

방식 2: 시스템 DNS 수동 변경

네트워크 어댑터의 IPv4 DNS를 127.0.0.1, IPv6 DNS를 ::1로 변경하거나(또는 IPv6를 아예 비활성화), dns.listen이 53번 포트를 리스닝하도록 설정합니다. Windows의 인터넷 연결 공유나 일부 가상머신 네트워크 서비스가 53번 포트를 점유해 Clash 실행 시 오류가 발생할 수 있으니 주의하세요. 이 경우 점유 중인 프로그램을 찾아 중지하거나 차라리 TUN 모드로 전환하는 것이 좋습니다. 리스닝 포트를 강제로 변경하지 마세요. Windows의 네트워크 어댑터 DNS 설정은 53번 외의 포트를 지정할 수 없습니다.

방식 3: 시스템 프록시 + redir-host만 사용

이 방식은 제어 범위가 가장 약합니다. 프록시를 거치는 애플리케이션 트래픽만 처리되고 시스템 내 다른 프로세스의 DNS 조회는 그대로 기존 경로로 진행됩니다. 당장 TUN을 켤 수 없다면 최소한 브라우저 DoH가 꺼져 있는지 확인하고 '브라우저만 관리 가능하다'는 한계를 받아들여야 합니다.

해결 방법 3: 규칙으로 마무리하고 재검사 체크리스트 확인하기

마지막 단계는 규칙입니다. DNS 설정은 '어떻게 해석할지'를 결정하고, 규칙은 '빠져나간 조회 트래픽이 어디로 갈지'를 결정합니다.

  • 규칙 마지막의 MATCH가 DIRECT가 아닌 프록시 정책 그룹을 가리키는지 확인하세요. 그래야 어떤 규칙에도 걸리지 않은 트래픽(애플리케이션 자체 DoH 요청 포함)이 직접 연결로 빠져나가지 않습니다.
  • 53번 포트에 DIRECT 규칙을 추가하지 마세요. TUN 모드에서는 dns-hijack이 이미 처리하고 있으므로 불필요한 규칙은 오히려 혼란을 야기합니다.
  • 애플리케이션 내장 DoH는 가장 흔한 누락 경로입니다. dns.google, cloudflare-dns.com, mozilla.cloudflare-dns.com 등 공용 DoH 도메인을 REJECT로 지정해 애플리케이션이 시스템 해석으로 돌아가게 함으로써 Clash가 통합 처리할 수 있도록 합니다.

모든 수정이 끝났다면 다음 체크리스트로 재검사하세요.

  1. 유출 검사를 다시 실행해 결과에 해외 리졸버만 남아 있는지 확인합니다.
  2. 네트워크 환경을 바꿔서(예: 집 인터넷에서 모바일 핫스팟으로) 한 번 더 테스트해 특정 경로의 우연한 결과가 아닌지 확인합니다.
  3. 구독을 한 번 수동으로 업데이트해 dns 오버라이드가 여전히 적용되는지 확인한 뒤 다시 테스트합니다.
  4. 이후 며칠간 웹사이트가 열리지 않는 문제가 없는지 살펴보세요. 일부 서비스는 fake-ip와 호환되지 않는데, 해당 도메인을 fake-ip-filter에 추가하면 되고 이 때문에 redir-host로 되돌릴 필요는 없습니다.

DNS 유출은 한 번 해결하고 끝나는 문제가 아닙니다. 클라이언트 변경, 네트워크 변경, 구독 업데이트 모두 설정을 원상태로 되돌릴 수 있습니다. '수정 후 테스트, 업데이트 후 재테스트'를 습관으로 만들어야 유출 방지를 제대로 완성한 것입니다.

Clash 최신 버전 다운로드

Windows, macOS, Linux, Android 각 플랫폼 클라이언트를 다운로드 페이지에 모아두었으며, 무료 오픈소스이고 버전은 매일 공식 배포와 대조 확인합니다.

Clash 최신 버전 다운로드