上篇文章所写的方法过于笨拙丑陋,配置也很复杂。SmartDNS 和 V2Ray 相互依赖,如果任意一个挂掉,整个系统的 DNS 服务就都没了。而且就算让 V2Ray 和 SmartDNS 协同工作,查询未缓存的域名仍需 1s 以上,这是几乎在给自己找罪受。
目前所用方案
目前,我用的是 cgproxy,让它捕获本机发送的 DNS 查询,转发给 V2Ray 处理,这样能避免「国内 DNS 解析出国内 IP 后走代理 / 国外 DNS 解析出国外 IP 后直连」,唯一的坏处是「V2Ray 只支持最基本的 IP 查询(A 和 AAAA 记录)」。但仔细一想,我其实很少查询其它类型的 DNS 记录,所以也没关系。
同时,cgproxy 的确是个相当好用的工具,用它实现全局透明代理后,不需要额外配置就能让所有程序都走代理,这样也能充分利用 V2Ray 的分流功能。
V2Ray 的 DNS 分流配置大致如下:
{
"dns": {
"disableFallback": true,
"servers": [
"https://cloudflare-dns.com/dns-query",
{
"address": "https+local://223.5.5.5/dns-query",
"domains": [
"geosite:geolocation-cn"
]
}
]
}
}