DNS使用Squid和BIND进行select性代理

我想知道这个设置的可行性。

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

我所想象的解决scheme分为两部分:

首先,使用BIND作为cachingDNS服务器,并覆盖或强制example.com指向我的代理服务器。 我认为这可以做到? 我不是非常有经验的BINDconfiguration。

其次,使用Squid将目标example.com收到的所有请求代理到REAL example.com IP。 我想代理http请求和其他协议,击中正确的端口。 所以举例来说,如果通过端口80完成,我也想代理ssh。 Squid可以作为这种types的代理,还是只能作为一个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----< +-----------+ <----< +------------------+ 

这个设置是否可行? 我应该调查哪些configuration指令来完成这个难题?

你的第一个DNS方法似乎是两个最好的。 要进行configuration,您应该将绑定configuration为区域example.com的权威服务器。 一块BINDconfiguration应该看起来如此:

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

本示例中的pri.example.com应包含example.com所有子域的地址logging,您要redirect。 当然,这些logging中的IP地址应该指向你的代理服务器。

我不是绝对的舒服,但你可能需要configuration你的鱿鱼在“透明”模式。 互联网上有很多例子。

Squid是HTTP,HTTPS,FTP代理服务器。 但HTTPS是使用CONNECT http方法处理的。 这就是为什么你可以使用像Corkscrew或Proxytunnel这些程序利用CONNECT方法进行隧道。 CONNECT超时有一个问题 – 它在ProxyTunnel页面上描述。 另一种处理不同协议的方法是用iptablesredirect数据。 在这种情况下,处理是在第三和第四OSI级别(地址和传输协议)上完成的,级别7(应用层)未被触及。

希望我的回答能指导你做出正确的决定。