我想为每个请求返回一个唯一的 CNAME,并将该 CNAME 的 IP 地址添加到区域文件中。可以吗?
答案1
您的问题缺乏细节。您为什么要这样做(为什么特别要使用 CNAME?)、谁进行查询、为什么需要将结果放入区域文件中,等等。
因此下面仅列出一些模糊的想法。
如果您的问题是关于生成动态记录,是的,您可以使用 bind 以及其他名称服务器来完成,让您使用某种编程语言选择“动态”后端。
看:
- Bind 可以提供“动态区域”,但这主要与数据库相关,请参阅http://bind-dlz.sourceforge.net/和动态可加载区域 | 互联网系统联盟;但你也可以开发自己的后端
- PowerDNS:Lua 后端 | PowerDNS 权威服务器文档 这个后端只是 PowerDNS 和您自己的 Lua 应用程序之间的“粘合剂”。;因此如果您编写了 Lua 应用程序,您可以自由地为每个查询提供所需的任何记录。
- Yadifa 和 NSD 似乎没有能力做到这一点(但有各种补丁和尝试将它们插入到 SQL 数据库等)
当然,您也可以根据需要,使用您选择的任何编程语言构建一个小型简单的权威名称服务器,该语言具有良好的 DNS 抽象库来处理 DNS 协议的所有细节(并且有很多)。
另一种廉价的方式是:使用通配符。但要谨慎。然而,通配符的核心是让您仅用一行即可立即获得区域文件中所需的所有 CNAME。但这一切都取决于谁查询您的名称服务器。
请记住,您的权威名称服务器的客户端是递归名称服务器,而不是最终客户端,因此它只会看到客户端使用的最后一个递归名称服务器的 IP 地址,而不是客户端 IP。您有 EDNS 客户端子网选项,如果递归解析器支持,它将为您提供客户端 IP 地址子网的指示,但出于隐私原因永远不会提供完整地址。
最后,让我们来看看 Geoff Huston 的各种作品。他是 APNIC 的 DNS 研究员,做过很多研究。为了进行研究,他经常购买广告,为每个解析到特定名称的客户端提供唯一链接。请参见以下示例:计算 DNS 中的 IPv6 | ISP 专栏 它可能会给你一些新的想法。
(请参阅我对您相关问题的详细回答:如何将 DNS 请求与托管该域名的 Web 服务器的请求关联起来?| 服务器故障)