V2Ray 接管系统 DNS 实现 DNS 分流 续

上篇文章所写的方法过于笨拙丑陋,配置也很复杂。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"
                ]
            }
        ]
    }
}

可能有用的链接

  1. 使用Qv2ray+cgproxy配置透明代理(仅限Linux).md(此文档来自 Qv2ray User Group

  2. DNS 域名解析 | V2Fly.org