v2fly / v2ray-core

A platform for building proxies to bypass network restrictions.
https://v2fly.org
MIT License
29.59k stars 4.66k forks source link

DNS出站不尊重内建DNS的queryStrategy设置,可能导致DNS泄露 #1210

Closed Mukou-Aoi closed 3 years ago

Mukou-Aoi commented 3 years ago

文档对此功能的说明是:

在处理 DNS 查询时,此出站协议会将 IP 查询(即 A 和 AAAA)转发给内置的 DNS 服务器。

实际测试由DNS出站传入的请求会分别请求两种记录,无视内建DNS的 queryStrategy 设置:

https://github.com/v2fly/v2ray-core/blob/e39a69e6881601a8c81057e5b7e6b96decd0be5b/proxy/dns/dns.go#L226-L231

不知这是 bug 还是设计上有意为之?


一般来说,这个功能是用来配合透明代理把 UDP:53 流量全部拦截交给 V2Ray 来处理的,是 A 还是 AAAA 取决于原始请求。

当前行为下如果设置了 "queryStrategy": "UseIPv4" 而收到了 AAAA 请求会导致 DNS 泄露。

Mukou-Aoi commented 3 years ago

应该是需要在 DNS queryStrategy 和 Freedom 的 domainStrategy 同时设置 UseIPv4

代码那里不是 Bug 吧,那里也是对应发起的请求解包后用 V2 的逻辑来处理的,请求时 A 就查 A,请求时 AAAA 就查 AAAA

这里说的问题和 Freedom 出站无关,是 DNS 出站协议 的问题。

在处理 DNS 查询时,此出站协议会将 IP 查询(即 A 和 AAAA)转发给内置的 DNS 服务器。其它类型的查询流量将被转发至它们原本的目标地址。

一般来说这个功能是用来拦截本机 DNS 请求来避免 DNS 泄露的,但并不会尊重 内建 DNSdomainStrategy 设置(若尊重设置,则应该屏蔽 A/AAAA 请求而不是两种请求全部接受)

同时,FakeDNS 默认的地址池也会根据这里的 domainStrategy 设置生成,会导致覆盖不到 A/AAAA 请求的情况。