起点
选择代理协议时应独立于出口 IP 的类型。HTTP 或 SOCKS 的标签并不能告诉你出口是移动网络还是住宅网络。
从客户端和目标站点入手
HTTP 代理理解 HTTP 请求。对于 HTTPS 目标站点,常见做法是 CONNECT:代理与目标主机和端口建立隧道,然后客户端通过隧道协商目标站点的 TLS。SOCKS5 在另一个协议层协商中继连接,并定义了 TCP 和 UDP 操作。
协议能力不等于服务承诺。SOCKS5 服务商或客户端可能并未实现你的应用所需的 UDP 行为。在选定之前,请确认其对具体操作、认证方式和目标端口的支持。
决定目标站点 DNS 在哪一端解析
在 curl 的 URL 约定中,socks5:// 在本地解析目标站点;socks5h:// 则把目标主机名发送给代理去解析。这会影响哪个解析器看到查询以及它返回哪个地址。网关自身的主机名仍然需要由你的客户端解析。
做区域性 QA 测试时,请把 DNS 解析位置与出口区域一起记录下来。否则两次运行可能因为解析器不同而产生差异,而不是因为你想比较的网络不同。切换到远程 DNS 是一个受控的测试参数,并不保证返回的内容属于某个特定区域。
画出两条 TLS 边界
HTTPS 代理加密的是客户端到代理的连接。HTTPS 目标站点加密的是到目标站点的连接。这是两个相互独立的层,各自有独立的证书校验。纯 HTTP 网关可以为 HTTPS 目标站点建立隧道,但它自身的认证交换并不会因此受到目标站点 TLS 的保护。
询问你的服务商是否提供到网关的 TLS,以及是否会拦截目标站点的 TLS。标准隧道与做内容检查的企业代理有着不同的信任要求。无论使用哪几层 TLS,都要保持证书校验开启。
做一次小规模的选型测试
对于纯 Web 应用,先从其 HTTP 客户端能干净支持的协议开始。如果另一个应用明确要求 SOCKS,请直接验证这一需求。在给出性能结论之前,先在同一个获准的目标站点上比较两者。
- 客户端能否使用服务商的方式完成认证?
- 它能否在连接的预期一端解析目标站点?
- 它是否支持所需的端口和传输方式?
- 你的团队能否在每一层诊断并监控故障?
上线前检查
- 把协议、出口类型和轮换模式分开考虑。
- 记录目标站点的 DNS 行为。
- 在适用时同时验证网关和目标站点的 TLS。
参考来源与延伸阅读
本指南参考的技术资料。请以你所安装版本的文档以及代理服务商支持的配置为准。