# DNS 泄漏

如果客户端使用自己的解析器而不是通过代理解析目标主机名，就会发生 DNS 泄漏。即使请求本身通过代理出口传输，本地网络或 ISP 仍会知道访问了哪些网站。使用 HTTP 代理时，主机名会发送给代理，不会发生泄漏；使用 SOCKS5 时，则取决于客户端是发送主机名（socks5h），还是先自行解析（socks5）。


## 容易发生泄漏的场景

- SOCKS5 客户端配置为 `socks5://`，而不是 `socks5h://`。
- 启用了系统 DNS 或 DNS-over-HTTPS 的浏览器绕过代理执行查询。
- 脚本先在本地解析一次，再通过代理连接 IP：目的地虽然正确，但查询已经泄漏，而且可能连接到错误的 CDN 边缘节点。


## 为何还会改变结果

地理感知 DNS 会因地区而返回不同答案。先在本地解析、再通过境外出口连接，会到达错误的区域边缘节点，可能获得错误的价格或语言。由出口执行解析既能保护隐私，也能得到正确结果。


## 在 ProxShift 中的工作方式

对于 HTTP(S) 连接以及传入主机名的 SOCKS5 连接，ProxShift 会在出口处解析主机名；当客户端对此有所区分时，代码示例会使用 socks5h。

来源：https://proxshift.com/zh/glossary/dns-leak
