跳到主要内容
DNS 与协议 · MOOPROXY FIELD NOTES

SOCKS5 的 DNS 由谁解析?socks5 与 socks5h 的区别

出口 IP 正确,不代表目标域名也在代理端解析。先确认应用如何提交域名,再判断本地 DNS 是否影响连接。

DNS 解析发生在哪里?;socks5:本地解析;客户端 → 本地 DNS → 目标 IP → 代理;socks5h:代理端解析;客户端 → 域名 → 代理 / 远端 DNS → 目标
示意图由 MooProxy 原创。主题插画:OpenMoji · CC BY-SA 4.0 (未修改)

先记住这张对照表

这里的写法适用于 curl 和 Python Requests 的代理 URL,并不是所有软件都接受 socks5h 这个协议名称。浏览器或图形软件可能用“通过 SOCKS 代理解析 DNS”等选项表达同一能力。

设置 谁解析目标域名 发送给代理的目标
curl 的 socks5:// 客户端 本地解析出的 IP
curl 的 socks5h:// 代理侧 目标域名
Requests 的 socks5:// 客户端 本地解析出的 IP
Requests 的 socks5h:// 代理侧 目标域名

SOCKS5 协议可以携带 IPv4、IPv6 或域名地址。h 是客户端选择“把主机名交给代理”的约定,不是新的 SOCKS 协议版本。代理入口本身如果是域名,客户端通常仍需解析它;远端解析说的是目标网站域名。[1][2]

什么时候这个差别会影响结果

假设本地网络无法解析一个目标域名,但代理网络可以解析:本地解析会在建立目标连接前失败,远端解析可能成功。另一个场景是按 DNS 查询位置分配节点的 CDN;改变解析位置可能改变目标节点,但不会保证访问更快。

远端 DNS 不会自动改变账号地区、浏览器定位或语言,也不保证指定国家的内容一定可用。 目标站可能综合 Cookie、账号设置及其他信号。即使解析位置正确,代理出口与目标站之间也可能连接失败。

用 curl 做一次受控对比

从控制台复制 SOCKS5 的入口、端口和完整认证信息,替换下面两个占位符。仅传用户名时,curl 会交互提示输入密码。若生成的密码包含地区或会话参数,需要完整输入。下面是 Bash 写法;Windows 使用 curl.exe,可把命令合并成一行。

curl --proxy "socks5://PROXY_HOST:PORT" \
  --proxy-user "YOUR_USERNAME" --noproxy "" \
  --connect-timeout 8 --max-time 25 https://example.com/

curl --proxy "socks5h://PROXY_HOST:PORT" \
  --proxy-user "YOUR_USERNAME" --noproxy "" \
  --connect-timeout 8 --max-time 25 https://example.com/

--noproxy "" 清除这次请求的绕过列表,避免环境中的 NO_PROXY 使测试变成直连。两次测试应保持入口、认证、目标网址一致;若业务允许,使用同一粘性会话降低出口变化的干扰。只有解析方式不同,结论才更容易解释。

现象 下一步检查
本地解析失败,远端成功 本地 DNS、网络策略、目标域名的解析结果
两种方式都连接不上 入口可达性、端口、认证和目标服务
两种方式都成功,但响应不同 实际出口、CDN 节点、Cookie 和账号状态
IP 查询站显示正确出口 仅证实该次 HTTP 请求走了代理,不能单独证明 DNS 路径

Python 与浏览器不要混用假设

Requests 需要安装 SOCKS 扩展:python -m pip install "requests[socks]"。将代理 URL 的 scheme 设为 socks5h,并为 http 和 https 两类目标都设置代理。用户名和密码拼接进 URL 时应分别进行百分号编码,不能把含有 @ 或 : 的密码原样粘进去。[3]

在浏览器里,还要核对当前浏览器是否实际使用该代理、是否有绕过规则,以及安全 DNS、扩展或其他应用是否建立额外连接。不要因为 curl 测试通过,就认定整个操作系统的所有连接都被代理了。

更可靠的验证与交付记录

有自有测试域名时,可为每次测试生成新的子域名,在权威 DNS 日志中观察请求来源,再结合客户端网络记录分析。递归 DNS 可能通过其他解析器转发,因此日志里的解析器 IP 不必等于代理出口 IP;缓存也会影响重复查询。

向支持人员提供:应用及版本、代理协议、解析模式、测试时间与时区、目标域名、脱敏错误信息。不要提交完整密码或带认证的代理 URL。只有明确了应用层的解析行为,“DNS 泄漏”这个描述才足够具体。

参考资料与编辑说明

资料核对:2026-10-19。本文为官方文档基础上的原创整理;代码为配置示例,不代表生产性能承诺。

  1. curl: SOCKS proxies
  2. RFC 1928: SOCKS Protocol Version 5
  3. Requests: proxies and SOCKS

准备好验证你的连接了吗?
从控制台生成配置,按指南完成小样本测试。

打开控制台