Windows 系统下 Clash 系代理软件虚拟网卡(TUN)模式的 DNS 泄露问题及解决方案

1. 问题的原因及复现

DNS 泄露的原因:
在 Windows 7 以上版本的 Windows 操作系统中,系统默认的多宿主名称解析策略会同时向系统内所有网卡发起 DNS 查询请求,Clash 无法拦截发给物理网卡的 DNS 查询请求。因此在系统默认配置下,开启虚拟网卡(TUN)模式,必然出现 DNS 泄露。
复现方法:
开启虚拟网卡模式,分流规则选择为全局,打开 https://browserleaks.com/dns, 如果 DNS 列表中出现中国 DNS 地址,则你的网络环境中存在 DNS 泄露。

2. DNS 泄露的影响

如果你的网络环境中存在 DNS 泄露,那么你的运营商(电信、移动、联通)可以追踪你的网络行为,获取你的目标域名。
例如,你观看一个 YouTube 视频,运营商可以获知你正在访问 www.youtube.com 这个网站。
注:本内容含义为从技术层面运营商可以获知你的目标域名,而不是你的运营商一定做了获知你目标域名的操作。

3. DNS 泄露的解决

非家庭版 Windows 操作系统:

  1. 打开开始菜单,搜索 组策略,打开“编辑组策略”。
  2. 依次进入:计算机配置 → 管理模板 → 网络 → DNS 客户端
  3. 找到 禁用智能多宿主名称解析
  4. 双击打开该策略,选择 已启用
  5. 点击 确定 保存设置。
  6. gpupdate /force 强制刷新策略

家庭版 Windows 操作系统:

  1. 复制以下代码:
reg add "HKLMSOFTWAREPoliciesMicrosoftWindows NTDNSClient" /v DisableSmartNameResolution /t REG_DWORD /d 1 /f
  1. 打开开始菜单,搜索 CMD
  2. 找到“命令提示符”,右键选择 以管理员身份运行
  3. 将上面的代码粘贴到窗口中并按 Enter 执行。
  4. 执行完成后,重启操作系统。