我们使用基于 DNS 的代理系统,该系统根据 DNS 条目代理某些地址,因此例如对于 website1.com,DNS 返回代理的 IP,并通过该 IP 发送请求,但对于 website2.com,DNS 返回常规地址并直接发送请求。这没有问题
但是,这仅适用于基于名称的调用。我们也需要能够对某些 IP 地址执行相同的操作,但有什么方法可以做到这一点吗?
例如,用户浏览 IP 为 1.2.3.4 的网站,但没有 DNS 条目,既没有 A 也没有 PTR。那么我们需要调用的不是 IP 1.2.3.4,而是我们的服务器 10.0.0.4。有没有办法做到这一点?我们意识到这需要在客户端计算机上进行设置,但是 - 有没有办法做到这一点?
客户端可以是任何东西,Windows、Mac、Linux、Android 等等......可能并非在所有客户端上都可行,但是在任何一个客户端上都可行吗?
答案1
由于您指定了网络,因此在网络级别有一个选项,我在下面提供了一个标记为 NETWORK 的网络解决方案。只有少数协议通常使用代理,但大多数协议都可以与 NAT(网络解决方案)配合使用。HTTP 和 HTTPS 通常是代理,所以这是我的第一反应。
我对您对基于 DNS 的代理的描述感到困惑。DNS 通常会为不同的地址指定不同的 IP 地址,或者为相关站点指定相同的 IP 地址。由于您将网站指定为主机名,我相信我们可以假设您想要代理网站。我相信您正在寻找的术语是“基于名称的虚拟托管”或“基于名称的代理”
对于 HTTP 或 HTTPS,许多服务器可以根据 IP 地址和/或 HOST 标头中指定的名称代理流量。Apache Web 服务器使用 VirtualHosts 来分隔站点。其他可以代理流量的软件具有相同或类似的功能。在 Apache 中,要对同一站点执行基于 IP 和基于 IP 的代理,您需要为 IP 地址创建一个 VirtualHost,并将所需的名称添加到该虚拟主机。然后,您可以配置该 VirtualHost 来代理整个站点或部分站点。
网络:如果要将 IP 地址重定向到其他地址,可以通过路由器完成。使用的机制称为 NAT(网络地址转换)。在这种情况下,您需要 DNAT(目标网络地址转换)。某些路由器可以对每个端口(服务)地址执行 NAT。在这种情况下,您需要相关的 DNS 条目返回正在转换的 IP 地址。
编辑:附加评论提供了更多信息。据我了解,要求如下:- 代理仅适用于来自特定地址/地址范围的用户,并非所有到名称/IP 的流量都将被代理。-
代理请求必须看起来来自代理而不是原始主机。- 当前解决方案根据请求的来源提供不同的地址记录。(我认为现有的解决方案在这里有问题。DNS 请求源自客户端正在使用的 DNS 服务器,该服务器可能不是客户端的设备。DNS 响应被缓存,因此您不能依赖请求之前的 DNS 请求。)
我认为最有可能奏效的解决方案是在服务器和代理前面的设备上使用 NAT 规则来处理此问题。这会根据原始 IP 地址将您想要代理的所有流量 NAT 到您的代理设备,并将其他流量直接传递到服务器。