![使用 Squid 和 BIND 通过 DNS 进行选择性代理](https://linux22.com/image/544439/%E4%BD%BF%E7%94%A8%20Squid%20%E5%92%8C%20BIND%20%E9%80%9A%E8%BF%87%20DNS%20%E8%BF%9B%E8%A1%8C%E9%80%89%E6%8B%A9%E6%80%A7%E4%BB%A3%E7%90%86.png)
我对这种设置的可行性感到疑惑。
我想选择性地代理一些 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 层(应用层)不受影响。
希望我的回答能帮助您做出正确的决定。