使用 Squid 和 BIND 通过 DNS 进行选择性代理

使用 Squid 和 BIND 通过 DNS 进行选择性代理

我对这种设置的可行性感到疑惑。

我想选择性地代理一些 DNS 条目。例如,我希望大多数 DNS 查询都能正常解析,但我希望 example.com 通过我的代理服务器。此外,我的代理服务器不在我的办公室(它在我的数据中心)。

我想到的解决方案分为两部分:

首先,使用 BIND 作为缓存 DNS 服务器,并覆盖或强制 example.com 指向我的代理服务器。我认为这可以做到吗?我对 BIND 配置不是很有经验。

其次,使用 Squid 将收到的所有以 example.com 为目标的请求代理到真实的 example.com IP。我想代理 http 请求和其他到达正确端口的协议。例如,如果通过端口 80 进行 ssh 代理,我也想代理它。Squid 可以用作这种代理吗?还是只能用作 http 代理?

例如,最终结果将如下所示。对于初始 DNS 查询:

+----+ >--dns query example.com---> +-----------+
| PC |                              | my-server |
+----+ <----return my-server IP---< +-----------+

然后 PC 被“欺骗”,认为 example.com 指向我的服务器,而不是真正的 example.com。因此会发生以下情况:

+----+ >--http://example.com--> +-----------+ >----> +------------------+ 
| PC |                          | my-server |        | REAL example.com |
+----+ <----return content----< +-----------+ <----< +------------------+ 

这种设置可行吗?我应该研究哪些配置指令来完成困难的部分?

答案1

您的第一种 DNS 方法似乎是两种方法中最好的。要配置它,您应该将绑定配置为区域 example.com 的权威服务器。BIND 配置的一部分应该看起来大致如此:

zone "example.com" in{
    type master;
    file "pri.example.com";
};

pri.example.com在此示例中,应包含示例.com,您要重定向。当然,这些记录中的 IP 地址应该指向您的代理服务器。

我不太确定,但你可能需要配置你的乌贼在“透明”模式下。互联网上有很多例子。

乌贼是 HTTP、HTTPS、FTP 代理服务器。但 HTTPS 是通过 CONNECT http 方法处理的。这就是为什么您可以使用类似开瓶器或者代理隧道这些程序使用 CONNECT 方法进行隧道传输。CONNECT 超时存在问题 - ProxyTunnel 页面上对此进行了描述。处理不同协议的另一种方法是使用 iptables 重定向数据。在这种情况下,处理是在 OSI 的第 3 层和第 4 层(地址和传输协议)上进行的,第 7 层(应用层)不受影响。

希望我的回答能帮助您做出正确的决定。

相关内容