我正在尝试为转发代理构建SOCKS解决方案。我正在使用dante SOCKS代理,因为我听说谷歌等大公司将它用作转发代理解决方案。
在SOCKS服务器上,我允许基于FQDN,如google.com:443现在的问题是,当客户端构建数据包时,它会尝试解析google.com并获取X.X.X.X并向SOCKS服务器发送连接请求。现在,当服务器收到数据包时,它会尝试重建数据包以发送到互联网,服务器再次进行DNS解析,如果服务器得到YYYY的响应,那么它不会允许客户端的请求为客户端请求中的目标IP与服务器已解析的IP地址不同。
在dante客户端中有一个解决方案,它告诉客户端放置一个虚拟目标地址0.0.0.1并向服务器和服务器发送请求然后正确处理它。然而,在使用该dns解析方法后,这就产生了内部域的问题,每个请求都通过dante服务器:(
请告诉我
如果有任何解决方案可以帮助我维持DNS记录到期DC宽,例如google.com解析为XXXX,我应该能够在100个DNS客户端上解析到相同的IP地址,如果记录发生变化,那么它应该立即在客户端上更改/到期。
< / LI>任何其他代理/袜子解决方案应该对转发代理的应用程序透明
答案 0 :(得分:1)
如果有人对解决方案感到好奇,我会继续采用此解决方案。
我将PowerDNS Auth Server与Pipe后端一起使用。请求将到达PowerDNS服务器以进行解析,它将所有数据传递给具有ABI的Pipe后端脚本,脚本分析请求,查看请求是否存在于已缓存的变量/内存映射下,如果被缓存命中,它将使用缓存的DNS记录进行响应,否则它将使用DNS解析器来解析该查询,就像解析器可以正常解析一样。
低于4.1的PowerDNS版本支持Pipe backend + resolver。这样,请求将首先到达管道后端脚本,如果脚本没有任何条目被缓存,它将不响应或将响应为空白,然后PowerDNS将使用配置中提到的解析器服务器对其进行解析。但是,在4.1及更高版本中,解析器部分已从PowerDNS Auth服务器中删除,因此您需要通过管道后端脚本处理该行为。
答案 1 :(得分:0)
这取决于您的客户。例如,Firefox将主机名发送到SOCKS代理,而没有对其进行解析。您可以通过Wireshark确认。
PS。假设您使用的是SOCKS5 / 4a代理。 SOCKS4不支持主机名。参考:https://en.wikipedia.org/wiki/SOCKS#SOCKS4a