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에 접속하는 경우를 예로 들겠습니다.
브라우저가 Clash DNS에
google.com의 IP 주소를 요청합니다Clash가 내부 매핑을 확인하고
198.18.1.5주소를 반환합니다브라우저가
198.18.1.5의80/tcp포트로 HTTP 요청을 보냅니다198.18.1.5로 향하는 인바운드 패킷을 받으면 Clash는 내부 매핑을 조회하여 클라이언트가 실제로google.com에 패킷을 보내려 했음을 확인합니다규칙에 따라 다음과 같이 처리됩니다:
Clash는 도메인 이름만 SOCKS5 또는 shadowsocks 같은 아웃바운드 프록시로 보내고 프록시 서버와 연결할 수 있습니다.
또는 Clash가
SCRIPT,GEOIP,IP-CIDR규칙이나 DIRECT 아웃바운드를 사용해google.com의 실제 IP 주소를 조회할 수 있습니다
이 개념은 혼동하기 쉬우므로 cURL로 http://google.com에 접속하는 예를 살펴보겠습니다:
$ 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