我有一个我认为可能无法实现的要求,并想与这个社区的专家确认这一点。
客户希望我们配置 DNS 服务器,将某些域解析为我们控制下的服务器 (中毒 DNS) 的 IP 地址。与此中毒记录关联的服务器应将所有非 http 流量转发/重定向到与规范 DNS 记录关联的实际 IP 地址。但是,对于所有端口 80 (http) 流量,它应拦截请求并进行代理,并可能修改响应。
上述方法可行吗?如果不行,除了需要专用网关硬件外,还有其他方法可以解决这个问题吗?
理想情况下,系统将最大限度地减少非 http 流量的带宽使用和延迟,而不需要除 DNS 或防火墙配置之外的任何配置。我知道我们可以在防火墙级别转发所有 http 流量,但客户希望避免向 CDN 或媒体密集型网站发送 http 请求,并最大限度地减少跨不同网络配置的部署工作。
更新 转发端口 80 流量对我们来说还不够,因为我们希望尽量减少某些域(例如与 CDN 或合作伙伴站点相关联的域)的延迟。
更新 OpenDNS 有一个叫做“阻止页面代理”的东西,但它只是显示一个身份验证表单。它实际上并不将请求代理到我们控制的服务器。
其他说明 如果我们有大量的公共 IP 地址,并且可以根据发送者的 IP 智能地路由到正确的目的地,那么从理论上讲,这是可行的,但保持 DNS 请求和对同一域的后续请求同步所需的工程工作量将是巨大的。更不用说从并发性的角度来看,我们会受到限制。这可能类似于 OpenDNS 执行 DNS+代理的方式,但他们似乎只为 google.com 执行此操作。这需要适用于任意一组域(可能是所有域)。
答案1
客户希望我们配置 DNS 服务器,将所有非白名单域指向互联网上服务器的 IP 地址。此服务器应尽可能准确地将所有非 http 流量转发/重定向到与真实 DNS 记录关联的 IP 地址。但是,对于所有端口 80 流量,它应拦截流量并转发到 Web 代理。
你的问题很令人困惑,但如果我的解释正确的话,听起来你描述的是透明的 拦截HTTP 代理。有许多产品可以做到这一点,以及开源解决方案,例如乌贼。
你不需要对 DNS 做任何事情来实现这一点,你只需要一个支持的边缘路由器/防火墙策略路由将任何目标协议/端口为 TCP 80 的数据包转发到您的(内部/外部) Squid 代理。
这样,您所有的非 HTTP 请求都会到达您希望它们到达的地方,并且您的 HTTP 请求会通过您的代理。
如果这不是您想要做的,您应该编辑您的问题以反映这一点。