DNS 설정을 놓치면 어떤 문제가 생길까

클라이언트가 트래픽 전달만 가로채고 DNS 조회는 그대로 두면, 도메인 해석 요청이 여전히 로컬 통신사 DNS로 직접 전송될 수 있습니다. 이는 두 가지 문제를 낳습니다. 첫째, 해석 결과가 오염되어 잘못된 IP가 반환되면 프록시로 접속해야 할 사이트가 오히려 연결에 실패합니다. 둘째, 트래픽 자체는 프록시를 타더라도 DNS 조회 과정에서 어떤 도메인에 접속하는지가 그대로 드러나는데, 이것이 흔히 말하는 「DNS 유출」입니다.

fake-ip: 현재 가장 널리 쓰이는 방식

enhanced-mode: fake-ip의 동작 방식은 다음과 같습니다. 클라이언트가 DNS 조회를 가로챈 뒤 실제 IP를 곧바로 돌려주지 않고, 전용 가상 주소 대역(fake-ip-range)에서 가짜 IP를 하나 뽑아 애플리케이션에 전달합니다. 애플리케이션이 이 가짜 IP로 연결을 시도하면 클라이언트가 네트워크 계층에서 실제 목적지 도메인을 복원하고, 규칙에 따라 프록시로 보낼지 직접 연결할지 판단합니다. 이 과정은 애플리케이션 입장에서 완전히 투명하며, 호환성과 속도 모두 현재로선 가장 우수한 방식입니다.

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "localhost.ptlogin2.qq.com"

fake-ip-filter는 가짜 IP 방식이 필요 없는 도메인을 제외하는 용도로 쓰입니다. 대표적으로 LAN 기기 검색이나 내부망 서비스처럼 반드시 실제 IP를 받아야 정상 동작하는 경우가 여기에 해당하며, 필터 규칙에 걸린 도메인은 실제 해석 결과를 그대로 반환받습니다.

도메인별로 해석 경로 분리하기: nameserver-policy

모든 도메인을 하나의 DNS 서버로만 해석하는 것은 최선의 방법이 아닙니다. 국내·지역 내 도메인은 통신사 DNS로 처리하는 편이 대체로 더 빠르고, 그 외 도메인은 오염에서 비교적 자유로운 DNS 서버에 맡기는 편이 낫습니다. nameserver-policy를 사용하면 도메인 소속(GeoSite 분류와 함께)에 따라 해석 경로를 각각 지정할 수 있습니다.

dns:
  nameserver:
    - https://dns.google/dns-query
    - https://1.1.1.1/dns-query
  fallback:
    - https://1.0.0.1/dns-query
    - https://dns.quad9.net/dns-query
  nameserver-policy:
    "geosite:private": [192.168.1.1]

nameserver-policy에 걸리지 않는 도메인은 기본 nameserver 목록으로 처리됩니다. 해석 결과의 신뢰도를 한 번 더 검증하고 싶다면 아래에서 다룰 fallbackfallback-filter를 함께 사용하면 됩니다.

fallback-filter: 해석 결과를 믿을 수 있는지 판단하기

fallback-filter는 기본 DNS의 응답을 언제 포기하고 fallback 목록으로 다시 조회할지를 결정합니다. 가장 흔한 판단 기준은 geoip입니다.

dns:
  fallback-filter:
    geoip: true
    geoip-code: KR

이 옵션을 켜두면, 기본 DNS가 돌려준 IP가 geoip-code로 지정한 지역(여기서는 대한민국)에 속하지 않을 경우 클라이언트는 이 결과를 신뢰할 수 없다고 판단합니다(오염된 상황에서 엉뚱한 해외 IP가 반환되는 경우가 대표적입니다). 이때는 fallback에 지정된 더 신뢰할 수 있는 DNS 서버로 다시 조회를 시도합니다.

참고: 대부분의 클라이언트는 기본값에 이미 합리적인 DNS 설정이 포함되어 있어 평소에는 이 부분을 손댈 필요가 없습니다. 직접 설정 파일을 작성하거나 해석 이상이 의심될 때만 이 글의 순서대로 하나씩 점검하면 됩니다.

점검 체크리스트

  • dns.enabletrue인지 확인하세요. 그렇지 않으면 DNS 설정 전체가 적용되지 않습니다;
  • enhanced-modefake-ip로 설정되어 있는지 확인하세요(다른 모드를 쓰는 이유가 명확한 경우가 아니라면);
  • LAN 기기 검색이 제대로 안 될 때는 해당 도메인을 fake-ip-filter에 추가해야 하는지 확인하세요;
  • 해석이 오염된 것으로 의심되면 fallbackfallback-filter가 올바르게 설정되어 있는지 확인하세요.

DNS 설정이 전체 config.yaml에서 어떤 위치를 차지하는지 더 깊이 알고 싶다면 고급 문서를 참고하세요. 이제 막 Clash를 시작한 단계라면 대부분의 클라이언트 기본 DNS 설정만으로도 충분히 안전하니 굳이 손댈 필요는 없습니다.

DNS 설정을 마쳤다면 이제 본격적으로 사용해 보세요

Clash 클라이언트를 다운로드하고 구독 링크를 붙여넣으면 몇 분 안에 설치부터 연결까지 끝낼 수 있습니다.