软路由,透明代理,fake-ip 模式
个人理解,不知道有没有错误的地方
a. 浏览器访问一个网址必须有对应的 IP 地址,没有的话就会自动发起 DNS 查询请求
b. clash 对 DNS 请求( UDP )有区别与其他 UDP 协议的处理
TCP 协议,从浏览器开始
禁用 QUIC 、浏览器、电脑、clash 都没有任何 DNS 缓存记录
-
浏览器输入 google.com ,首先浏览器发送一个 DNS ( UDP )请求,查询 google.com 对应的 IP 地址
-
clash 收到 DNS 请求,直接返回给浏览器一个假的 IP 地址(假设为 192.1.1.1 ),并记录这个假的 IP 地址对应的网址
-
浏览器发起 TCP 请求,访问 google.com ,目标地址为:192.1.1.1
-
clash 收到来自于浏览器的数据包,查看数据包的目标 IP ,在自己的记录表里面查询 IP 有没有对应的域名
-
有对应域名
走域名匹配规则,如果没有匹配到任何规则,进行 DNS 查询,用拿到的 IP 进行 IP 匹配(这里不会拿上面的假 IP 进行匹配,而是要进行一次真正的 DNS 查询,这个过程可能会导致 DNS 泄露),DNS 查询会多路并发,主要分为:nameserver 指定的 DNS 服务器(国内的,快,但是有泄露和篡改风险),fallback 指定的 DNS 服务器(国外,慢,一定不会篡改),如果是国外的 IP 信任 fallback 结果,国内的信任 nameserver 。用查询到的 IP 做 IP 规则匹配
-
没有对应的域名
进行 IP 规则匹配
-
-
用匹配到的代理进行处理后续的流程....
发现的问题
- Ping 命令不好使(因为 fake-ip 的原因,ping googele.com ,ping 到的是 192.1.1.1 )
- 基于 UDP 的游戏连不上(看网上说是因为有些基于域名连接的 UDP 必须用真实 IP ,这一点我不懂为什么??)
我的需求
- 国内游戏能够正常连接,Direct
- 国外游戏能够走代理
我想到的解决方案
-
fake-ip ,UDP 转发,绕过中国大陆 IP [验证可行]
但是我并不知道原理,功能上写的是来自中国大陆的流量不再经过内核,可是中国大陆的流量的判定不也是 Domain-DNS-GEOIP?
不开启这种方案的时候,因为我的规则列表没有任何游戏相关的规则,走域名匹配不通,然后走 IP 匹配的道路不也是 Domain-DNS-GEOIP ,为什么就进不去游戏了?
-
fake-ip-filter 添加游戏域名 [猜想可行]
相当于给指定游戏不走 fake-ip 模式,回退到 redir-host
缺点:一个游戏一个游戏添加,域名收集是个大问题
-
fake-ip ,不进行 UDP 转发 [猜想可行]
不知道 DNS 解析会不会受影响,根据我上面的理解 b, 应该不会受影响吧
缺点:国外游戏想走代理的也走不了,而且走 UDP 的也不止游戏啊
-
关于国外游戏代理 [不知可行与否]
fake-ip, UDP 转发,规则列表添加国外游戏域名,Proxy ,是不是就可以了?