简短问题:
由于DNS是任播,DNS服务器有没有办法知道“第一个”源DNS查询源自哪个?
长问题: 我使用PowerDNS开发了一个自定义DynDNS服务器,我希望用户通过Web界面提供信息。我希望Web界面“基于IP”更新每个用户的记录。
因此,当DNS服务器获取请求时,如果它可以确定源IP,则很容易返回与该IP相关联的记录。
只要我测试过,DNS服务器只能知道DNS链上的“最后”节点IP,而不是源。有什么办法吗?
问候
答案 0 :(得分:6)
谷歌和雅虎!向draft-vandergaast-edns-client-ip-01提交了一份草案(IETF DNS Extensions Working Group),该草案在DNS请求中提出了一个新的EDNS0选项,递归服务器可以使用该选项向上游权威服务器指示他们自己的客户端IP地址。
目的是通过确保返回的Web服务器地址是基于最终用户的IP地址而不是最终用户的DNS服务器的地址来理论上优化内容交付网络的使用。
这个想法没有得到很好的接受,工作组也没有接受,因为它故意打破了DNS的缓存层,草案随后到期了。
更新 - 对此的变体随后发布为RFC 7871。
答案 1 :(得分:2)
也许您可以控制执行查找的软件?如果是这样,您可以将IP地址作为请求的一部分包括在内,例如
23-34-45-56.www.example.com
自定义编写的服务器回复
23-34-45-56.www.example.com 1800 CNAME www-europe.example.com
或
23-34-45-56.www.example.com 300 A 34.45.56.67
等
如果客户端是Web浏览器,则由于NAT,HTTP代理以及无法直接从Javascript查询主机接口地址而出现复杂情况。但是,您可以对what-my-ip服务执行AJAX样式查找,该服务可以理解X-Forwarded-For。
答案 2 :(得分:1)
DNS不是任播。一些内容DNS服务器所有者使用任播来在全球多个物理位置分发服务器,但DNS / UDP和DNS / TCP协议本身不是任播。该协议层根本不存在这个概念。
没有
如上所述,DNS协议中没有任何内容。此外,caching resolving proxy DNS server的前端和后端交易之间的关系不是一对一的。
您必须使用您正在使用的实际服务协议中存在的任何客户端差异机制,而不是将您的客户端区分在名称→IP地址查找机制中。无论如何,其他服务的客户端区别不属于名称→IP地址查找。对于初学者来说,这种查找对于多种协议是通用的。使用与您的服务器通信的客户端正在使用的任何实际服务协议的机制。