如何将 DNS 请求与托管该域名的 Web 服务器的请求关联起来?

如何将 DNS 请求与托管该域名的 Web 服务器的请求关联起来?

我们注册了一个域名(例如“example.com”),我们想要查看谁正在尝试解析该域名以及他向该域名的 Web 服务器发送了什么样的请求。

为此,我们设置了一个名称服务器并收集 BIND 的日志,以找出谁在查询名称服务器以解析“example.com”(我们不关心人们通过递归解析器中的缓存数据解析域名的情况)。我们还收集了 Apache Web 服务器的日志。但问题是我们无法找出哪个 DNS 请求对应于哪个 Web 服务器请求?

为了将这两个日志映射到一起,我考虑创建一个随机子域并将其作为每个 DNS 请求的 example.com 的 CNAME 返回,然后配置 Apache 将所有这些子域重定向到“example.com”主页。因此,如果有人请求该特定子域,我知道相应的 DNS 查询是什么。

这是正确的做法吗?还有其他方法吗?

我非常感谢任何想法或意见。

答案1

您无法关联 IP 地址。

这是因为您的权威名称服务器是由递归名称服务器查询的,而不是由最终客户端直接查询的。因此,您将获得客户端使用的最后一个递归(它们可以链接)名称服务器的 IP 地址。

即使使用 EDNS 子网客户端选项,您最多也只能获得一个 IP 块,而不是真正的客户端 IP。

同样,在 HTTP 前端,客户端不一定会直接联系您的 Web 服务器,他可以通过代理。

我已经回答了你另一个与该问题相关的问题,并提供了一些提示:我们可以根据请求更新 CNAME 吗? 请特别参阅最后一段以及 Geoff Huston 所做的所有研究。

因此,您还有另一种方法:只需向所有人提供内容www.example.com,但在内容中插入一些动态内容(1x1 像素图像或 CSS 或 JS 文件的链接),并在主机名部分使用一些唯一令牌。这可以用通配符绑定到您的名称服务器上。无需任何 CNAME,您就可以轻松关联访问:

  • 有些客户去http://www.example.com/
  • 在回复中,Web 服务器会添加一个<img src="https://eecahquai5thuu9ji0iepha.tracking.example.net">,并将其记录在其日志文件中(因此这会将唯一的令牌与当前的 HTTP 交换联系起来)
  • 配置权威名称服务器tracking.example.net(我建议您仅为区域使用单独的区域,否则通配符可能会充满惊喜)以获得通配符记录;然后,您将在名称服务器日志文件中获得此唯一令牌和关联的 DNS 数据(递归解析器的 IP 等)
  • (并且成为一名真正的网民)确实配置一个在这个地址上回复的网络服务器,具有适当的资源和内容类型,即使它只是一个 1x1 像素的透明图像。

相关内容