DNS 오염이란

DNS 오염(DNS 스푸핑 / DNS 포이즈닝)은 ISP 또는 방화장성이 특정 도메인에 대한 DNS 쿼리에 가짜 IP 주소를 반환하여 사용자가 목표 웹사이트에 접근하지 못하게 하는 것을 말합니다. 예를 들어, 통신사 DNS 서버에 www.google.com을 조회하면 잘못된 IP 주소가 반환되거나 요청 자체가 거부될 수 있습니다.

DNS 누출(DNS 리크)도 관련된 문제입니다. 프록시를 활성화했더라도 DNS 쿼리가 프록시를 우회하여 통신사 DNS 서버로 직접 전송될 수 있습니다. 이로 인해 일부 도메인이 해석되지 않을 뿐만 아니라, 인터넷 사용 기록이 ISP에 노출됩니다.

문제증상결과
DNS 오염도메인이 잘못된 IP로 해석됨목표 웹사이트에 접근 불가
DNS 누출DNS 쿼리가 프록시를 통과하지 않음ISP에 인터넷 사용 기록이 남고 일부 사이트에 여전히 접근 불가

두 가지 해석 모드: fake-ip와 redir-host

fake-ip 모드 (권장)

fake-ip는 Clash 고유의 고성능 DNS 해석 모드입니다:

  1. 애플리케이션이 DNS 쿼리를 발행하면 Clash는 즉시 가짜 IP(198.18.x.x 대역)를 반환합니다
  2. 애플리케이션은 이 fake IP를 사용하여 연결 요청을 발행합니다
  3. Clash가 연결 요청을 가로채고 규칙에 따라 직접 연결 또는 프록시 경유를 결정합니다
  4. 프록시를 통할 경우 Clash는 원래 도메인 이름을 프록시 서버에 전송하고, 프록시 서버가 해외에서 실제 DNS 해석을 수행합니다

장점: DNS 해석이 완료되기를 기다리지 않고 연결을 수립할 수 있어 지연이 매우 낮습니다. 해외 도메인의 DNS 쿼리는 국내 DNS를 전혀 거치지 않아 오염을 완전히 방지합니다.

단점: 일부 애플리케이션(특정 게임, P2P 소프트웨어 등)이 fake IP를 올바르게 처리하지 못할 수 있으며, fake-ip-filter에서 제외해야 합니다.

redir-host 모드

전통적인 DNS 해석 모드: Clash는 도메인을 실제 IP로 정상적으로 해석한 후 IP-CIDR 규칙에 따라 프록시 사용 여부를 결정합니다.

장점: 호환성이 더 좋으며 모든 애플리케이션이 정상적으로 작동합니다.

단점: 연결 수립 전에 DNS 해석을 완료해야 하므로 지연이 더 높습니다. 오염된 도메인의 경우 fallback DNS에 의한 재해석이 필요하여 설정이 복잡해집니다.

💡
최신 Clash 클라이언트(Clash Verge Rev, CMFA)는 모두 fake-ip 모드를 권장합니다. 대부분의 프록시 서비스에서 제공하는 구독 설정 파일은 기본적으로 fake-ip를 사용합니다.

DoH / DoT 암호화 DNS 설정

일반 DNS 쿼리는 평문 UDP/TCP 프로토콜을 사용하므로 ISP가 쉽게 가로채고 변조할 수 있습니다. DoH(DNS over HTTPS)와 DoT(DNS over TLS)는 암호화를 통해 DNS 쿼리를 보호합니다:

  • DoH: DNS 쿼리가 HTTPS 요청에 캡슐화되어 포트 443을 사용합니다. 일반 HTTPS 트래픽과 혼합되어 식별 및 필터링이 어렵습니다
  • DoT: DNS 쿼리가 TLS로 암호화되어 전용 포트 853을 사용합니다. 암호화는 신뢰할 수 있지만 트래픽 특징이 명확하여 필터링되기 쉽습니다

Clash에서 DoH는 https:// 접두사를, DoT는 tls:// 접두사를 사용합니다:

dns:
  nameserver:
    - https://dns.alidns.com/dns-query   # 阿里 DoH(국내)
    - https://doh.pub/dns-query          # 腾讯 DoH(국내)
  fallback:
    - tls://8.8.8.8:853                  # Google DoT(해외)
    - tls://1.1.1.1:853                  # Cloudflare DoT(해외)
    - https://dns.google/dns-query       # Google DoH(해외)

완전한 오염 방지 DNS 설정

다음은 검증된 모범 사례 설정입니다:

dns:
  enable: true
  listen: 0.0.0.0:1053       # DNS 수신 포트(TUN 모드에서는 dns-hijack이 인수)
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16

  # fake-ip 제외 목록: 이 도메인들은 fake-ip를 사용하지 않고 실제 IP를 직접 반환
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "localhost.ptlogin2.qq.com"
    - "+.stun.*.*"
    - "+.stun.*.*.*"
    - "time.*.com"
    - "time.*.gov"
    - "*.ntp.org.cn"
    - "ntp.*.com"

  # 국내 DNS: 국내 도메인 해석에 사용
  nameserver:
    - 223.5.5.5              # 阿里 DNS(평문, 빠름)
    - 119.29.29.29           # 腾讯 DNS
    - https://dns.alidns.com/dns-query   # 阿里 DoH

  # 해외 DNS: 오염된 해외 도메인 해석에 사용(프록시를 통해 접근)
  fallback:
    - tls://8.8.8.8:853
    - tls://1.1.1.1:853
    - https://dns.google/dns-query
    - https://cloudflare-dns.com/dns-query

  # fallback 트리거 조건: IP가 CN에 속하지 않을 때 fallback DNS로 재해석
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4          # 예약 주소(일반적으로 오염 결과)
    domain:
      - "+.google.com"
      - "+.facebook.com"
      - "+.youtube.com"
      - "+.twitter.com"
      - "+.github.com"

  # 특정 도메인에 특정 DNS 서버 지정
  nameserver-policy:
    "geosite:cn": [223.5.5.5, 119.29.29.29]
    "geosite:geolocation-!cn": [tls://8.8.8.8:853, tls://1.1.1.1:853]

주요 설정 항목 설명

설정 항목설명
enhanced-mode: fake-ipfake-ip 모드를 활성화하여 DNS 해석 지연을 대폭 줄임
fake-ip-filter이 도메인들은 fake-ip를 우회하여 실제 IP를 반환(mDNS, NTP 등 실제 IP가 필요한 프로토콜 적용)
nameserver기본 DNS. 국내 도메인 빠른 해석에 사용
fallback백업 DNS. nameserver가 오염된 IP를 반환할 때 트리거됨
fallback-filter.geoip: truenameserver가 반환한 IP가 CN에 속하지 않으면 fallback 재쿼리 트리거
nameserver-policy특정 도메인에 전용 DNS 서버를 지정. nameserver/fallback보다 우선순위가 높음

TUN 모드와 함께 사용

TUN 모드를 활성화할 때는 dns-hijack을 설정하여 모든 DNS 요청을 Clash에서 처리하도록 해야 합니다:

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53           # 포트 53으로의 모든 UDP/TCP 요청 하이재킹
    - tcp://any:53

dns:
  enable: true
  enhanced-mode: fake-ip
  # ... 나머지 설정은 위와 동일

dns-hijack: any:53을 활성화하면 시스템 DNS가 다른 서버(예: 8.8.8.8)로 설정되어 있어도 모든 DNS 요청이 Clash의 DNS 모듈에 의해 처리되어 DNS 누출을 근본적으로 차단합니다.

DNS 누출 테스트 방법

설정 완료 후 다음 도구를 사용하여 DNS 오염 방지가 효과적인지 확인하세요:

  1. dnsleaktest.com에 접속하여 "Standard Test"를 클릭합니다
  2. 테스트 완료 후 DNS 서버 목록을 확인합니다:
    • Google, Cloudflare 등 해외 서버가 표시되면(국내 통신사 IP 없음)→ 오염 방지 설정이 올바릅니다
    • 중국 유니콤, 중국 텔레콤 등 국내 DNS가 표시되면 → DNS 누출이 있으니 설정을 확인하세요
  3. ipleak.net에서 IP, DNS, WebRTC 누출에 대한 종합 검사도 할 수 있습니다
⚠️
시스템 프록시 모드(TUN 모드가 아닌)를 사용하는 경우 dnsleaktest에서 국내 DNS가 표시되는 것은 정상적인 현상입니다——시스템 프록시는 HTTP/HTTPS 트래픽만 프록시하므로 브라우저의 DNS 요청이 Clash를 통과하지 않을 수 있습니다. DNS 누출을 완전히 해결하려면 TUN 모드를 활성화하고 dns-hijack을 설정해야 합니다.

일반적인 DNS 문제 해결

DNS 해석 완전 실패

모든 웹사이트에 접근할 수 없고 "DNS_PROBE_FINISHED_NXDOMAIN" 오류가 표시됩니다:

  • dns.enable: true가 설정되어 있는지 확인합니다
  • nameserver에 접근 가능한 DNS 서버가 최소 하나 포함되어 있는지 확인합니다
  • 임시로 nameserver를 223.5.5.5(평문 UDP, 가장 기본적)로 변경하여 연결성을 테스트합니다
  • Clash 로그를 확인하고 "dns" 관련 오류 메시지를 검색합니다

DNS 해석 속도가 느림

  • enhanced-mode: fake-ip가 활성화되어 있는지 확인합니다(첫 연결 지연을 대폭 줄일 수 있음)
  • nameserver의 DoH 서버를 평문 UDP(예: 223.5.5.5)로 교체합니다. DoH는 TLS 핸드셰이크 오버헤드가 큽니다
  • fallback DNS 서버에 도달 가능한지 확인합니다. 도달할 수 없는 fallback 서버는 타임아웃 대기를 유발합니다

IP는 정상이지만 일부 사이트에 접근 불가

fake-ip로 인한 호환성 문제일 수 있습니다. 해당 도메인을 fake-ip-filter 제외 목록에 추가하세요:

dns:
  fake-ip-filter:
    - "problem-domain.com"   # 문제가 있는 도메인 추가
고급 설정 가이드에서 TUN 모드와 DNS 완전 설정에 대해 더 알아보기

요약

  • DNS 오염은 도메인이 잘못된 IP로 해석되게 만들고, DNS 누출은 인터넷 사용 기록을 ISP에 노출시킵니다
  • fake-ip 모드가 최적의 해결책입니다: 즉시 가짜 IP를 반환하고 해외 도메인은 프록시 서버가 해외에서 해석하므로 지연이 낮고 오염 방지도 완벽합니다
  • 국내 DNS(nameserver)는 빠른 평문 UDP(223.5.5.5)를, 해외 DNS(fallback)는 암호화된 DoT/DoH(tls://8.8.8.8:853)를 사용합니다
  • fallback-filter.geoip: true는 fallback을 트리거하는 핵심 설정으로, 오염된 도메인이 해외 DNS에서 재해석되도록 보장합니다
  • TUN 모드에서 dns-hijack: any:53을 설정하면 DNS 누출을 완전히 차단할 수 있습니다
  • 설정 후 dnsleaktest.com으로 확인하여 표시되는 DNS 서버가 해외 노드인지 확인합니다

더 읽어보기