🔧 使用 V2RayN + Sing-box 解决 DNS 劫持问题(完整配置指南-共两步)


第一步:切换 sing-box 内核

前往 V2RayN → 设置 → 参数设置 → Core 类型设置
将所有核心(Vmess/VLESS/Trojan/Socks 等)统一设置为 sing-box,确保所有代理流量都通过 sing-box 内核传输与管理。


第二步:配置 Sing-box DNS(防止被本地劫持)

进入 V2RayN → DNS设置 → sing-box DNS设置,将 左侧 HTTP/SOCKS 的 DNS 设置 替换为如下内容(右侧 TUN 模式配置可忽略,如未启用 TUN 模式):

{
  "servers": [
    {
      "tag": "remote",
      "address": "tcp://8.8.8.8",
      "strategy": "prefer_ipv6",
      "detour": "proxy"
    },
    {
      "tag": "local",
      "address": "https://dns.alidns.com/dns-query",
      "strategy": "prefer_ipv6",
      "detour": "direct",
      "address_resolver": "remote"
    },
    {
      "tag": "block",
      "address": "rcode://success"
    }
  ],
  "rules": [
    {
      "rule_set": [
        "geosite-cn"
      ],
      "server": "local"
    },
    {
      "rule_set": [
        "geosite-category-ads-all"
      ],
      "server": "block"
    }
  ],
  "final": "remote"
}

🧠 配置讲解

项目

描述

geosite-cn

所有中国大陆常见域名将使用 阿里 DoH 解析,不走本地 53 端口,避免被劫持

geosite-category-ads-all

广告、跟踪等域名将 直接被 block,不做任何连接尝试

final: remote

其他所有域名默认使用 远程 8.8.8.8(通过代理)进行解析,防污染、防干扰

detour: proxy/direct

决定 DNS 查询本身是走代理还是直连,不会影响最终连接走向

address_resolver: remote

让阿里 DoH 的域名(dns.alidns.com)由远程 DNS 查询(防止本地劫持)


🔄 DNS 查询过程详解

以你访问一个中国网站为例,例如 www.baidu.com,查询流程如下:

  1. www.baidu.com 属于 geosite-cn → 使用 "server": "local"

  2. "local" 指向的是阿里 DoH 地址(https://dns.alidns.com/dns-query)。

  3. 要访问 dns.alidns.com 本身,需要解析这个域名 → 交给 "address_resolver": "remote"

  4. "remote" 使用 8.8.8.8,通过代理查询(即 DNS 查询被保护,不走本地网络)。

  5. 得到 www.baidu.com 的 IP(国内地址) → routing 规则判断为中国 IP → 流量走 direct(直连)

总结一句话:

国内域名走阿里加密 DoH 查询,阿里 DNS 本身也由远端查询(避免污染),整个链路避开了本地运营商的劫持与污染。


🔒 为什么这样配置能彻底防止 DNS 劫持?

  • 本地运营商劫持的目标是传统 UDP 53 端口查询(如 223.5.5.5);

  • 使用 HTTPS 加密 DNS(DoH)+ 远程解析 DNS 服务器地址,彻底避免泄漏和重定向

  • 你即便处于强干扰网络,Sing-box 的 DNS 流量也走了代理,不会被干扰;

  • 配合广告域名 block,可显著减少弹窗、跟踪、遥测等连接失败日志刷屏问题。


Q.E.D.