服务器是否可以知道哪个客户端(IP)对其域名进行了 DNS 查询?

服务器是否可以知道哪个客户端(IP)对其域名进行了 DNS 查询?

假设我有一个域名,比如myproxy.com。然后我有很多网站,比如kitty.myproxy.comwow.myproxy.com 我想为该域名配置一个权威的DNS服务器。

我希望,如果用户要访问这些网站,当浏览器发送DNS查询时,DNS查询最终会到达权威DNS服务器,这样权威DNS服务器就可以获得执行DNS查询的主机的IP。

我的期望是:这些网站的所有 DNS 查询都必须发送到权威 DNS 服务器,这样我才能知道所有执行 DNS 查询的主机。这可能吗?

我担心其他一些 DNS 服务器会缓存 DNS 记录,因此这些 DNS 服务器会回答 DNS 查询,然后这些查询不会转发到权威 DNS 服务器。是否可以防止这种情况发生?

注:我正在做一项研究工作。我的目标是制作一个代理。代理上注册了许多 Web 服务器。只有代理知道这些 Web 服务器的 IP。当浏览器想要访问其中一个 Web 服务器时,它可以通过 DNS 查询获取代理的 IP。然后它连接到代理。我希望代理可以在 TCP SYN 到来时准确地知道该浏览器想要访问哪个 Web 服务器(在 HTTP 请求之前,实际上,通过解析 HTTP 请求,代理可以知道浏览器想要访问哪个 Web 服务器)。因此,如果 Web 浏览器执行 DNS 查询并且代理知道此查询,则代理可以缓存 Web 服务器和浏览器主机 IP 之间的映射。当 TCP SYN 到来时,代理会立即检查映射并了解浏览器实际上想要访问哪个 Web 服务器。谢谢!

答案1

您想要实现什么目标?我猜您正在尝试做某事,但您认为“监控 DNS 是答案”,但实际上它不起作用。

如果您希望每次 DNS 请求都从客户端 IP 获得命中,那将永远不会发生。DNS 是分层的,客户端配置为命中本地 DNS 服务器,然后最终命中您的 DNS 服务器。

如果您希望在每个 DNS 请求中都看到请求(来自某人),则可以尝试将 TTL 调整为较小的值,例如一秒。然后,您将看到来自某个地方的某个人的命中。这可能不是 100% - 这取决于每个人都遵守您的 TTL,而这并不是必然的。

更新

如果我没看错的话,您正在尝试将 DNS 请求与未来的 HTTP 请求关联起来。这会因多种原因而失败。

  1. 缓存。DNS - IP 映射非常易于缓存,因此它们被大量缓存。即使设置 TTL 也无济于事,因为有些 ISP 会忽略 TTL,无论设置如何都会缓存一小时/一天左右。浏览器也有自己的 DNS 缓存。级别太多,您无法全部控制。

  2. 多个用户 - 一个 IP 地址。在 NAT(和运营商级 NAT即将出现)和正常的每台机器多个用户,您无法再将 IP 映射到浏览器(实际上您永远都无法这样做)。甚至每个用户多个浏览器或多个选项卡都可能使此系统崩溃。

  3. 人们可能出于其他原因使用 DNS。如果有人只是在一个域上执行 nslookup,然后又访问了另一个域(IP 在缓存中),该怎么办?您会转发错误的网站。

  4. 多个出口点。虽然现在不太常见,但 ISP 代理请求曾经非常常见,有时单个用户甚至可能在单个会话中轮换出口点(您会看到他们的 IP)。AOL 过去经常这样做,随着它们的受欢迎程度下降,我看到其他工具(移动版 Opera)也使用代理。

  5. DNS 转发无法以这种方式工作。如果有人试图在您的站点中查找主机名,绝大多数情况下,他们最终会询问谷歌的 8.8.8.8 服务器或其 ISP 的递归 DNS 服务器。无论哪种情况,向您的 DNS 服务器查询主机名的 IP 地址都会不是与稍后出现的 Web 浏览器的源 IP 地址相同。

简而言之,你无法从这里到达那里。IP 地址不是(从来都不是)用户的唯一 1-1 标识符。你会破坏 HTTP。你只能查看 HTTP 流并进行解析。确保你的代理支持 Keep-Alive,这样可以减少一点影响。

答案2

浏览器/用户如何知道要发出什么 http 请求以便让您的代理确定实际请求的服务器?

如果您计划建立一个门户,让用户可以从中选择他想要的服务器,那么您可以根据用户的选择/可访问性为您的代理生成随机子域。

你可以看到类似的实现重新绑定攻击演示用户将访问一个服务器,由于服务器知道用户的 IP,因此服务器会创建一个新的随机子域,在 DNS 记录上分配所需的服务器 IP 地址,并将用户重定向到该子域。

您无法在 DNS 服务器上找到用户的 IP 地址。

正如其他人之前所写,您不应该依赖 TTL,因为并非所有 DNS 解析器都尊重它。

相关内容