Skip to content

[feature request] 增加 Fake IP / Fake DNS 功能 #2233

@EqCScO9nTa

Description

@EqCScO9nTa

未解决的问题

在透明代理模式下,被代理的程序将会自行发送出 DNS 请求。目前,用户可以将 DNS 请求转发到代理进行处理(直接发出或经过代理服务器发出)。
对于受 DNS 污染影响的域名,用户必须将 DNS 请求发送至服务器来获取正确的 IP 地址,而这在访问网站之前需要消耗 1RTT。

什么是 Fake IP

当用户发送 DNS 请求时,代理并不发送请求到远程 DNS 服务器,而是为每个域名返回一个唯一假 IP。在指向这些假 IP 的流量发送到代理时,按查询得到的域名重置当前连接的目标。

目前的方案及它们的局限

Socks 5 或 HTTP 代理方式

程序会将域名直接发送至对于 Socks 5 或 HTTP 代理 ,在服务端进行解析。
手动为程序配置代理需要消耗大量的精力,并且对于不支持这些代理方式的程序 / 平台,这种方式是不友好的。

V2Ray 已有的 Sniffing 方案

参见已有的讨论。大概思路是用本地 DNS 服务器给所有需要代理的域名返回同一个不可访问的 IP,之后在流量再次发送到 V2Ray 时,按流量中包括的目标地址重置当前连接的目标,从而达到不需要访问远程 DNS 服务器的效果。而且,在 V2Ray 支持本地 DNS 处理之后,可以直接在 Hosts 规则里面拦截这些请求。
这个方案会污染本地 DNS 缓存。同时最大的问题在于,Sniffing 功能只能从 HTTP / TLS 类型的流量中提取出域名,而考虑到我们使用的是一个虚假的 IP,这将直接导致部分功能不可用(UDP 全崩)。

额外的 Fake IP 程序

参考 go-tun2socks,仅有少数的 GUI 程序支持该项目与 V2Ray 同时使用,目前发现两个:kitsunebi, mellow. 它们直接修改了 V2Ray 内核,与 go-tun2socks 均来自同一开发者。
手动部署 go-tun2socks 将(较大幅度)增加用户使用 V2Ray 的成本。

Fake IP 的代价

返回错误的 IP 会污染本地 DNS 缓存,使得代理断开之后一段时间内设备无法访问网络。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions