Dante SOCKS 代理的 DNS 解决方案

Posted

技术标签:

【中文标题】Dante SOCKS 代理的 DNS 解决方案【英文标题】:DNS solution for Dante SOCKS proxy 【发布时间】:2018-03-08 10:59:09 【问题描述】:

我正在尝试为正向代理构建 SOCKS 解决方案。我正在使用 dante SOCKS 代理,因为我听说像 google 这样的大公司使用它作为转发代理解决方案。

在 SOCKS 服务器上,我允许基于 FQDN,例如 google.com:443

现在的问题是,当客户端构造数据包时,它会尝试解析 google.com 并获取 X.X.X.X 并向 SOCKS 服务器发送连接请求。现在,当服务器接收到数据包时,它会尝试重建数据包以发送到互联网,服务器再次进行 DNS 解析,如果服务器收到 Y.Y.Y.Y 的响应,那么它不允许客户端的请求作为客户端中的目标 IP请求与服务器解析的 IP 地址不同。

dante 客户端中有一个解决方案,它告诉客户端放置一个虚拟目标地址 0.0.0.1 并向服务器发送请求,然后服务器正确处理它。然而,这给内部域带来了问题,因为在使用该 dns 解析方法后,每个请求都通过 dante 服务器:(

请告诉我

    如果有任何解决方案可以帮助我在 DC 范围内维护 DNS 记录到期,例如google.com 解析为 X.X.X.X,我应该能够在 100 个 DNS 客户端上解析到同一个 IP 地址,如果记录发生更改,那么它应该在客户端立即更改/过期。

    任何其他对正向代理应用程序应该透明的代理/socks 解决方案

【问题讨论】:

【参考方案1】:

我继续使用这个解决方案,以防有人对解决方案感到好奇。

我将 PowerDNS Auth Server 与 Pipe 后端一起使用。请求将登陆 PowerDNS 服务器进行解析,它将所有数据传递给带有 ABI 的 Pipe 后端脚本,脚本分析请求,查看它是否存在于缓存的变量/内存映射下,如果缓存命中,它将使用缓存的 DNS 记录进行响应,否则它将使用 DNS 解析器来解析该查询,就像解析器正常解析一样。

低于 4.1 的 PowerDNS 版本支持 Pipe 后端 + 解析器。这样,请求将首先到达管道后端脚本,如果脚本没有缓存任何条目,它将不会响应或响应空白,然后 PowerDNS 将使用配置中提到的解析器服务器解析它。但是对于 4.1 及更高版本,解析器部分已从 PowerDNS Auth 服务器中删除,因此您需要通过 Pipe 后端脚本处理该行为。

【讨论】:

【参考方案2】:

这取决于您的客户。例如,Firefox 将主机名发送到 SOCKS 代理而不解析它。您可以通过 Wireshark 确认。

PS。假设您使用的是 SOCKS5/4a 代理。 SOCKS4 不支持主机名。参考:https://en.wikipedia.org/wiki/SOCKS#SOCKS4a

【讨论】:

以上是关于Dante SOCKS 代理的 DNS 解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Dante socks 代理中的多个 `to:`

sh 如何在Ubuntu 16.04 / 18.04上使用Dante(不仅仅)设置SOCKS5代理服务器

Ubuntu搭建Socks5代理服务器

使用 Perl 的 SOCKS 代理上的 DNS

无法通过 SOCKS5 代理服务器连接到互联网

如何限制从 Chromium 到 SOCKS5 代理服务器的连接数?