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

Ale*_*lex -2 domain-name-system web-server nameserver

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

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

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

这是这样做的正确方法吗?有没有其他方法可以做到这一点?

我欣赏任何想法或想法。

Pat*_*zek 5

您无法关联 IP 地址。

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

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

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

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

因此,您有另一种方式:只给每个人,www.example.com但在内容中插入一些动态的东西(1x1 像素的图像,或者指向 CSS 或 JS 文件的链接),在主机名部分带有一些独特的标记。这可以使用通配符绑定到您的名称服务器上。如果没有任何 CNAME,您将能够轻松关联访问:

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