"규칙은 분명 맞게 작성했는데 사이트가 여전히 열리지 않는다"는 문제를 조사해 보면, 결국 원인이 DNS에 있는 경우가 많습니다. 규칙이 아무리 정확해도 도메인이 해석된 IP 자체가 잘못됐다면 이후의 분기 로직은 아무 의미가 없습니다. 이 글에서는 DNS 오염과 DNS 유출이 각각 어떤 문제인지, 그리고 Clash에서 이를 해결하는 방법을 설명합니다.
01DNS 오염이란
DNS 오염은 어떤 도메인의 IP 주소를 조회할 때, 네트워크 중간의 장치가 "먼저 응답"하여 실제로 그 도메인이 가리키는 서버 주소가 아닌 잘못되거나 차단된 IP를 돌려주는 현상입니다. 그 결과 프록시 규칙이 올바르게 판단해서 프록시를 거쳐야 한다고 결정해도, 받은 IP 자체가 잘못되어 있으니 연결이 실패하거나 잘못된 페이지로 넘어가게 됩니다.
해결 방법: 신뢰할 수 있는 상위 DNS 사용하기
config.yaml에서 암호화된 DNS 서버(DoH/DoT)를 사용하도록 설정하면, 일반 UDP DNS 조회에 대한 중간 장치의 개입을 피할 수 있습니다:
dns:
enable: true
nameserver:
- https://1.1.1.1/dns-query
- https://8.8.8.8/dns-query02DNS 유출이란
DNS 유출은 실제 연결 자체는 프록시 노드를 거치지만, DNS 조회 요청만은 프록시를 우회해 로컬 네트워크 환경에서 직접 조회되는 현상입니다. 이 경우 실제로 어떤 도메인에 접속했는지가 통신사에 그대로 노출됩니다. 프록시는 이후의 데이터 전송만 보호할 뿐, "무엇에 접속했는가"라는 정보 자체는 보호하지 못합니다.
해결 방법: fake-ip 모드 활성화하기
fake-ip 모드는 Clash 코어가 DNS 해석 과정 전체를 대신 처리하도록 합니다. 앱이 도메인을 조회하면 Clash가 먼저 가상의 로컬 IP를 돌려주고, 실제로 연결을 시도할 때가 되어야 규칙에 따라 실제 해석 방식과 출구를 결정합니다. 이렇게 하면 DNS 조회 자체도 Clash의 통합 처리 흐름에 포함되어, 프록시를 우회해 로컬 네트워크로 바로 유출되지 않습니다.
dns:
enable: true
mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "localhost.ptlogin2.qq.com"03nameserver-policy: 도메인별로 DNS 조회 분기하기
어떤 도메인은 특정 DNS 서버로 강제로 해석하고 싶을 때가 있습니다(예: 중국 본토 도메인은 중국 본토 DNS로 해석해 더 빠른 CDN 노드를 받고, 해외 도메인은 해외 DNS로 해석해 오염을 피하는 경우). 이럴 때 nameserver-policy를 사용해 도메인 규칙별로 지정할 수 있습니다:
dns:
enable: true
nameserver-policy:
"geosite:cn": ["223.5.5.5", "119.29.29.29"]
nameserver:
- https://1.1.1.1/dns-query위 설정은 geosite:cn(중국 본토 도메인 분류 규칙)에 해당하는 조회는 해당 DNS로 해석하고, 나머지 도메인은 기본 nameserver 목록을 사용한다는 의미입니다.
04자주 쓰는 필드 정리
| 필드 | 역할 |
|---|---|
| enable | Clash 내장 DNS 서버가 해석 과정을 대신 처리할지 여부. 보통 true로 설정합니다. |
| mode | 해석 모드: fake-ip(권장, 유출 방지) 또는 redir-host(호환성은 좋지만 유출 방지 효과는 약함). |
| nameserver | 기본으로 사용하는 상위 DNS 서버 목록. DoH/DoT 암호화 조회를 권장합니다. |
| nameserver-policy | 도메인 규칙별로 전용 DNS 서버를 지정하며, 기본 nameserver보다 우선합니다. |
| fake-ip-filter | 가상 IP 해석에 적합하지 않은 도메인 목록. |
05DNS 설정이 제대로 적용됐는지 확인하는 방법
설정을 바꾼 뒤 감으로 판단하지 말고, 몇 가지 간단한 방법으로 DNS가 실제로 의도한 대로 동작하는지 확인해 보세요:
- 클라이언트의 연결 로그 확인: 대부분의 클라이언트는 "로그"나 "연결" 패널에서 각 요청이 실제로 해석된 주소를 보여줍니다. fake-ip를 활성화했다면 도메인이 198.18.x.x 대역의 가상 주소로 해석되는 것을 확인할 수 있으며, 이는 fake-ip가 정상 작동하고 있다는 뜻입니다.
- 온라인 도구로 DNS 유출 검사: 프록시를 켠 상태에서 DNS 유출 검사 사이트에 접속했을 때, 표시되는 DNS 서버의 소속 지역이 실제 위치나 통신사와 일치한다면 조회 요청이 프록시를 거치지 않았다는 뜻이며 유출 위험이 있습니다. fake-ip나 nameserver-policy 설정을 다시 확인하세요.
- 지역별 도메인의 해석 결과 비교: 직접 연결되어야 할 사이트와 프록시를 거쳐야 할 사이트에 각각 접속해서, 실제 사용된 출구 노드가 예상과 맞는지 확인합니다. 맞지 않다면 대개 nameserver-policy의 도메인 분류 규칙이 해당 도메인을 다루지 못하는 경우이니, 관련 geosite 규칙을 추가해야 합니다.
대부분의 구독에는 이미 바로 사용할 수 있는 DNS 설정이 포함되어 있어 일반 사용자가 처음부터 직접 작성할 필요는 없습니다. 다만 "규칙은 맞는데 연결이 안 된다"거나 "DNS 단계에서 개인정보가 노출될까 걱정된다"는 상황을 만난다면, 이 부분을 다시 점검해 보면 원인을 찾을 수 있는 경우가 많습니다.