Clash DNS 설정 가이드: nameserver, fallback, 도메인 하이재킹 대처법

도메인 해석은 Clash 규칙 분기(라우팅)의 전제 조건입니다. 도메인 매칭 규칙, IP 소속 국가 판단 규칙 모두 정확하고 제어 가능한 해석 결과에 의존합니다. 이 글은 설정 필드를 하나씩 짚어가며 Clash 내장 DNS의 동작 방식을 설명하고, nameserver와 fallback의 역할 구분, 쿼리 한 건이 처리되는 전체 경로, 그리고 DNS 유출, 53번 포트 하이재킹, 응답 조작이라는 세 가지 대표 장애의 원인 진단과 해결 방법을 정리합니다.

53 기본 리스닝 포트·fake-ip 강화 모드·198.18.0.0/16 가짜 주소 대역·DoH / DoT 암호화 상위 서버

DNS가 분기(라우팅)의 기반인 이유

Clash 규칙 대부분은 도메인을 기준으로 매칭합니다. DOMAIN, DOMAIN-SUFFIX, GEOSITE는 도메인 자체를 바로 봅니다. 반면 GEOIP, IP-CIDR 같은 규칙은 먼저 도메인을 IP로 해석해야만 판단이 가능합니다. 즉, 특정 연결이 직접 접속과 프록시 중 어디로 가야 하는지는 절반이 DNS 응답에 달려 있습니다.

해석 과정을 시스템 기본 DNS에 맡기면, 이 경로가 통신사 하이재킹이나 DNS 스푸핑에 노출될 경우 Clash는 잘못된 답을 받게 됩니다. 중국 본토 사이트가 해외 주소로 잘못 해석되어 불필요하게 프록시를 타거나, 반대 상황이 벌어질 수도 있습니다. 더 은밀한 경우는 쿼리가 해외로 평문 UDP로 나가다가 중간에서 가로채져 원래 목적지와 무관한 응답을 받는 것으로, 이 경우 분기 자체가 무의미해집니다.

그래서 Clash는 내장 DNS 서버를 제공합니다. 이를 활성화하면 시스템이나 TUN 인터페이스는 도메인 쿼리를 모두 Clash로 넘기고, Clash가 설정된 상위 서버, 정책, 캐시를 종합해 응답을 처리합니다. 강화 모드(enhanced-mode)는 응답 방식을 추가로 결정합니다. redir-host는 실제 해석 결과를 그대로 반환하고, fake-ip는 먼저 가짜 주소를 반환한 뒤 실제 연결이 발생하면 도메인을 역조회해 규칙을 판단합니다.

fake-ipfake-ip mode

강화 모드 중 하나입니다. 쿼리에 즉시 198.18.0.0/16 대역의 가짜 주소를 반환하고 매핑을 기록합니다. 연결이 발생하면 도메인을 역조회해 규칙을 매칭하므로, 프록시로 나가는 도메인은 실제 해석이 필요 없습니다.

redir-hostredir-host mode

강화 모드 중 하나입니다. 상위 서버에서 실제 해석을 완료한 뒤 응답합니다. 모든 도메인이 완전한 쿼리 과정을 거치며, 결과 품질은 상위 서버 경로 상태에 따라 달라집니다.

도메인 하이재킹DNS hijacking

경로상의 중간 장비가 DNS 응답을 가로채거나 조작해 실제 레코드와 다른 IP를 반환하는 것으로, 평문 UDP 53번 쿼리에서 가장 흔하게 발생합니다.

설정 골격: enable, listen, enhanced-mode

DNS 모듈의 진입점은 설정 파일의 dns 항목입니다. 최소 구성은 다음과 같습니다.

dns:
  enable: true
  listen: 0.0.0.0:53
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "*.localhost"
    - time.*.com
    - ntp.*.com
    - localhost.ptlogin2.qq.com

필드별 설명은 다음과 같습니다.

  • enable: 전체 스위치입니다. false로 설정하면 Clash는 DNS를 리스닝하지 않고 도메인 해석을 시스템에 넘기며, 규칙의 IP 판단은 시스템 해석 결과에만 의존하게 됩니다.
  • listen: 리스닝 주소와 포트입니다. 0.0.0.0:53은 로컬 모든 네트워크 인터페이스의 53번 포트를 사용한다는 의미로 해당 권한이 필요합니다. GUI 클라이언트는 대개 권한 부여와 시스템 DNS 지정을 자동으로 처리합니다.
  • ipv6: AAAA 쿼리에 응답할지 여부입니다. IPv6 출구가 없는 네트워크에서는 false로 두면 앱이 도달 불가능한 v6 주소를 먼저 시도하는 상황을 막을 수 있습니다.
  • enhanced-mode: 강화 모드로, fake-ip 또는 redir-host 중 하나를 선택합니다. 자세한 의미는 위 용어 카드를 참고하세요.
  • fake-ip-range: 가짜 주소 풀이며 기본값은 198.18.0.1/16입니다. 이 대역은 벤치마크용 예약 주소로, 일반적인 네트워크에는 실제 호스트가 존재하지 않습니다. 내부망이 이 대역을 실제로 사용 중이라면 다른 대역을 선택해야 합니다.
  • fake-ip-filter: 가짜 주소 예외 목록입니다. 목록에 포함된 도메인은 가짜 주소로 응답하지 않고 실제 해석을 진행합니다. 사설망 도메인, NTP 시간 동기화, STUN에 의존하는 일부 음성·게임 서비스는 보통 이 목록에 추가해야 합니다.
참고

53번 포트 점유는 DNS 모듈 실행 실패의 가장 흔한 원인입니다. Linux 데스크톱의 systemd-resolved, Windows의 인터넷 연결 공유 모두 53번 포트를 점유할 수 있습니다. listen을 0.0.0.0:1053으로 바꾸고 TUN 모드로 트래픽을 넘기거나, 점유 중인 서비스를 비활성화하는 방법이 있습니다.

nameserver와 fallback: 두 상위 서버 그룹의 역할 구분

nameserver는 기본 상위 서버 목록입니다. 실제 해석이 필요할 때 Clash는 목록에 있는 모든 상위 서버에 동시에 쿼리를 보내고 가장 먼저 도착한 응답을 채택합니다. 대부분의 도메인, 특히 낮은 지연과 통신사 기준 최적 경로가 필요한 중국 본토 도메인 해석을 담당하므로, 보통 중국 내 공공 DNS의 DoH 주소를 사용합니다. 상위 서버 주소는 네 가지 형식을 지원합니다. 순수 IP(평문 UDP), tls:// 뒤에 도메인(DoT), https:// 뒤에 경로(DoH), dhcp:// 뒤에 네트워크 인터페이스 이름(시스템 할당 값 사용)입니다.

fallback은 오리지널 Clash의 대조용 상위 서버 메커니즘입니다. nameserver와 동시에 쿼리되지만 결과는 기본적으로 채택되지 않으며, nameserver 응답이 fallback-filter 검증을 통과하지 못했을 때만 fallback 결과로 대체됩니다. 설계 의도는 중국 본토 상위 서버는 빠르지만 조작 가능성이 있고, 해외 상위 서버는 느리지만 신뢰할 수 있으므로 필터로 둘 사이에서 더 나은 쪽을 고르자는 것입니다. fallback-filter는 세 가지 판단 기준을 제공합니다.

  • geoip와 geoip-code: nameserver 응답 IP의 소속 국가 코드가 설정값(기본 CN)과 다르면 결과가 의심스럽다고 판단해 fallback을 채택합니다.
  • ipcidr: 응답 IP가 목록에 지정된 네트워크 대역(예약 대역 240.0.0.0/4 등)에 속하면 응답이 조작된 것으로 판단합니다.
  • domain: 목록에 있는 도메인은 조건 없이 fallback 응답을 사용합니다.
구분nameserverfallback
역할기본 상위 서버, 대부분의 해석을 담당신뢰 가능한 대조용 상위 서버, 결과는 기본적으로 미채택
일반적인 선택중국 내 공공 DNS의 DoH 주소해외 공공 DNS의 DoH / DoT 주소
쿼리 시점실제 해석마다 동시에 쿼리nameserver와 동시에 쿼리
결과 채택 조건응답이 fallback-filter 검증을 통과nameserver 응답이 검증을 통과하지 못함
mihomo 현황유지되며 nameserver-policy와 함께 사용사용 중단(deprecated) 표시, 신규 설정에는 권장하지 않음

두 가지를 특히 주의해야 합니다. 첫째, fallback 상위 서버는 반드시 DoH나 DoT 같은 암호화 채널을 사용해야 합니다. fallback 자체가 평문 UDP라면 그 쿼리도 하이재킹당할 수 있어 대조 메커니즘 자체가 무력화됩니다. 둘째, mihomo(Meta 커널)는 fallback과 fallback-filter를 이미 사용 중단(deprecated)으로 표시했으며, 공식적으로 도메인 집합 기준으로 명시적으로 분기하는 nameserver-policy 사용을 권장합니다. 의미가 더 직관적이며, 자세한 내용은 뒤에서 다룹니다.

도메인 쿼리 한 건이 처리되는 전체 경로

  1. 앱이 쿼리를 발생시킴

    시스템 DNS가 Clash의 리스닝 주소를 가리키거나 TUN 인터페이스가 네트워크 계층에서 가로채, 쿼리가 Clash 내장 DNS 서버로 들어갑니다.

  2. fake-ip 판단

    강화 모드가 fake-ip이고 해당 도메인이 예외 목록에 없으면 즉시 198.18.x.x 형태의 가짜 주소를 반환하고 매핑을 기록합니다. 목록에 있는 도메인은 실제 해석 과정으로 넘어갑니다.

  3. 연결 발생, 도메인 역조회

    앱이 가짜 주소로 연결을 시도하면 Clash가 원래 도메인을 역조회하고, 먼저 도메인 기준으로 규칙을 매칭해 직접 접속할지 어느 프록시 노드로 보낼지 결정합니다.

  4. IP가 필요할 때 실제 해석 진행

    GEOIP, IP-CIDR 규칙에 매칭되거나 대상이 직접 접속이 필요한 경우, 먼저 nameserver-policy에 전용 상위 서버가 지정되어 있는지 확인하고, 없으면 nameserver로 동시 쿼리를 진행합니다.

  5. 응답 조작 검증 및 응답

    오리지널 Clash는 fallback-filter로 nameserver 결과를 검증하고, 통과하지 못하면 fallback 응답을 채택합니다. 최종 결과는 캐시에 기록되어, 이후 동일한 쿼리는 캐시에서 바로 반환됩니다.

nameserver-policy와 proxy-server-nameserver

nameserver-policy는 도메인이나 도메인 집합 단위로 전용 상위 서버를 지정하며, nameserver보다 우선순위가 높습니다. mihomo는 geosite: 접두사로 도메인 집합을 참조할 수 있어, 한 줄 설정만으로 도메인 그룹 전체를 지정된 상위 서버로 보낼 수 있습니다. 이것이 바로 fallback을 대체하게 된 이유입니다. 분기 기준을 명시적으로 드러내므로 사후 결과 검증에 의존할 필요가 없습니다.

proxy-server-nameserver는 프록시 노드 서버 도메인 해석 전용입니다. 구독에 포함된 노드 주소가 도메인 형태라면 프록시 연결을 맺기 전에 반드시 IP로 해석해야 합니다. 만약 일반 상위 서버로 프록시를 거쳐 해석하려 하면 순환 의존이 발생합니다. 이 항목에는 직접 접속으로 도달 가능한 상위 서버를 지정해야 합니다. default-nameserver는 부트스트랩용 상위 서버입니다. 설정에 들어가는 DoH, DoT 상위 서버 자체도 도메인 형태이므로, 이를 먼저 해석해줄 순수 UDP 상위 서버 그룹이 필요합니다.

dns:
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  proxy-server-nameserver:
    - https://dns.alidns.com/dns-query
  nameserver:
    - https://dns.alidns.com/dns-query
    - https://doh.pub/dns-query
  nameserver-policy:
    "geosite:cn":
      - https://dns.alidns.com/dns-query
      - https://doh.pub/dns-query
    "geosite:geolocation-!cn":
      - https://1.1.1.1/dns-query
      - https://dns.google/dns-query
    "+.corp.example.com":
      - 10.0.0.2

이 예시에서는 중국 본토 도메인 집합은 알리바바와 텐센트의 DoH를 사용하고, 해외 집합은 Cloudflare와 Google의 DoH를 사용하며, 사내 도메인은 내부망 DNS를 가리킵니다. nameserver는 어떤 정책에도 매칭되지 않을 때의 기본 출구 역할을 합니다. 해외 DoH 상위 서버로의 쿼리 자체가 프록시를 거쳐 나가므로 경로가 신뢰 가능해 fallback 방식의 사후 대조가 더는 필요하지 않습니다.

유출, 하이재킹, 응답 조작: 세 가지 대표 장애 대처법

DNS 유출

브라우저 자체 보안 DNS 기능(Chrome, Edge는 기본 활성화)은 시스템 DNS를 거치지 않고 직접 DoH 쿼리를 보냅니다. 이 경우 Clash는 도메인을 볼 수 없어 IP 기준으로만 규칙을 매칭하게 되므로 분기 정확도가 크게 떨어집니다. 해결하려면 브라우저의 보안 DNS 옵션을 끄거나, TUN 모드를 활성화해 네트워크 계층에서 모든 트래픽을 가로채, 브라우저가 어디에 쿼리를 보내든 먼저 Clash를 거치게 해야 합니다.

53번 포트 하이재킹

평문 UDP 53번 쿼리는 경로상의 어떤 중간 노드든 가로채 응답할 수 있으며, 해외 UDP 상위 서버는 국내(중국) 네트워크 환경에서는 거의 예외 없이 가로채기당합니다. 설정에 들어가는 상위 서버는 해외로 나가는 경우 반드시 DoH나 DoT를 사용해야 하며, nameserver에는 해외 평문 UDP 주소가 있어서는 안 됩니다.

응답 조작

fake-ip 모드에서는 프록시로 나가는 도메인이 실제 해석 결과를 필요로 하지 않아 조작이 판단 과정에 개입할 여지가 없습니다. 직접 접속이 필요한 도메인은 중국 내 DoH 상위 서버가 처리하므로 조작될 확률이 낮습니다. 특정 도메인의 해석이 비정상이라면 먼저 fake-ip-filter에 추가할 항목이 있는지 확인한 뒤, 클라이언트 로그로 해당 도메인이 실제로 어느 상위 서버에 매칭됐는지 확인하세요.

참고

nameserver에 8.8.8.8 같은 해외 평문 UDP 주소가 들어 있는 것은 설정 점검에서 가장 흔히 발견되는 오류입니다. 이는 더 정확한 결과를 가져오지 않고, 오히려 가로채기로 인한 응답 조작과 불필요한 타임아웃 대기만 늘립니다.

참고 설정과 체크리스트

위 내용을 종합해 바로 적용할 수 있는 mihomo 스타일 DNS 설정 예시는 다음과 같습니다.

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - time.*.com
    - ntp.*.com
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  proxy-server-nameserver:
    - https://dns.alidns.com/dns-query
  nameserver:
    - https://dns.alidns.com/dns-query
    - https://doh.pub/dns-query
  nameserver-policy:
    "geosite:geolocation-!cn":
      - https://1.1.1.1/dns-query
      - https://dns.google/dns-query

활성화 전에 다음 항목을 하나씩 확인하세요.

  • enable이 true이고 listen 포트가 다른 서비스에 점유되지 않았는지
  • 시스템 DNS가 Clash를 가리키고 있거나 TUN 모드가 활성화되어 있는지
  • nameserver가 중국 내 DoH를 사용하며 해외 상위 서버는 모두 암호화 채널을 쓰는지
  • proxy-server-nameserver가 설정되어 직접 접속으로 도달 가능하며 노드 도메인이 정상 해석되는지
  • fake-ip-filter에 사설망과 시간 동기화 도메인이 포함되어 있는지
  • 클라이언트 로그에 지속적인 DNS 타임아웃 기록이 없는지

DNS 설정이 완료되어야 규칙 분기가 안정적인 기반 위에서 동작합니다. 이후 사용자 정의 규칙 작성과 정책 그룹 설계는 이 깨끗한 해석 결과 위에서 진행하면 됩니다.

Clash 다운로드