설정 · Clash 문서

Clash DNS

Clash DNS의 nameserver, fallback, fake-ip, nameserver-policy와 IPv6의 관계를 설명해 오염된 응답, 잘못된 라우팅, 로컬 네트워크 도메인 문제를 확인할 수 있습니다.

  • fake-ip
  • DNS 오염
  • SCRIPT
  • GEOIP
  • IP-CIDR
설정

Clash의 일부 구성 요소는 3계층(네트워크 계층)에서 작동하므로 패킷의 도메인 이름을 확인할 수 없고 규칙 기반 라우팅도 수행할 수 없습니다.

fake-ip의 등장: 규칙 기반 라우팅을 지원하고 DNS 오염 공격의 영향을 최소화하며, 경우에 따라 네트워크 성능을 크게 높입니다.

fake-ip

“fake IP” 개념은 RFC 3089에서 유래했습니다:

“fake IP” 주소는 해당 “FQDN” 정보를 조회하는 키로 사용됩니다.

fake-ip 풀의 기본 CIDR은 198.18.0.1/16입니다. 이 IPv4 예약 주소 공간은 dns.fake-ip-range에서 변경할 수 있습니다.

DNS 요청이 Clash DNS로 전달되면 Clash 코어는 도메인과 fake-ip 주소의 내부 매핑을 관리하면서 풀에서 사용되지 않은 fake-ip 주소를 할당합니다.

브라우저에서 http://google.com에 접속하는 경우를 예로 들겠습니다.

  1. 브라우저가 Clash DNS에 google.com의 IP 주소를 요청합니다

  2. Clash가 내부 매핑을 확인하고 198.18.1.5 주소를 반환합니다

  3. 브라우저가 198.18.1.580/tcp 포트로 HTTP 요청을 보냅니다

  4. 198.18.1.5로 향하는 인바운드 패킷을 받으면 Clash는 내부 매핑을 조회하여 클라이언트가 실제로 google.com에 패킷을 보내려 했음을 확인합니다

  5. 규칙에 따라 다음과 같이 처리됩니다:

    1. Clash는 도메인 이름만 SOCKS5 또는 shadowsocks 같은 아웃바운드 프록시로 보내고 프록시 서버와 연결할 수 있습니다.

    2. 또는 Clash가 SCRIPT, GEOIP, IP-CIDR 규칙이나 DIRECT 아웃바운드를 사용해 google.com의 실제 IP 주소를 조회할 수 있습니다

이 개념은 혼동하기 쉬우므로 cURL로 http://google.com에 접속하는 예를 살펴보겠습니다:

txt
$ curl -v http://google.com
<---- cURL 向您的系统 DNS (Clash) 询问 google.com 的 IP 地址
----> Clash 决定使用 198.18.1.70 作为 google.com 的 IP 地址, 并记住它
*   Trying 198.18.1.70:80...
<---- cURL 连接到 198.18.1.70 tcp/80
----> Clash 将立即接受连接, 并且..
* Connected to google.com (198.18.1.70) port 80 (#0)
----> Clash 在其内存中查找到 198.18.1.70 对应于 google.com
----> Clash 查询对应的规则, 并通过匹配的出口发送数据包
> GET / HTTP/1.1
> Host: google.com
> User-Agent: curl/8.0.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.com/
< Content-Type: text/html; charset=UTF-8
< Content-Security-Policy-Report-Only: object-src 'none';base-uri 'self';script-src 'nonce-ahELFt78xOoxhySY2lQ34A' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
< Date: Thu, 11 May 2023 06:52:19 GMT
< Expires: Sat, 10 Jun 2023 06:52:19 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 219
< X-XSS-Protection: 0
< X-Frame-Options: SAMEORIGIN
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
* Connection #0 to host google.com left intact