我正在构建一个 DNS 管理器。数据库中包含有关客户端和目标的信息,以及必须阻止或绕过某些目标或源的某些标准。
我对名称服务器的可能性有些困惑......
我知道我需要的是可以通过使用 bind 中的视图和 rpz 来实现(我目前的方法),但我想知道在返回答案之前是否有一种更“即时”的方式进行检查,例如查看请求源和目标,查询数据库和然后决定返回什么(假设状态会不时改变),而不是在区域文件中“等待”答案。
那么,进行这种检查是否意味着从头开始编写名称服务器程序?
这会违反某种标准吗?
有没有比 bind 更“适合”这一点的?
看起来 rpz 是实现这一目标的“合法”方式,但从我读过的所有文档来看,我无法弄清楚为什么(我的意思是,这是一个标准吗?这是一个 NS 生存的条件吗?我会破坏互联网吗?或者网络警察会来抓我吗?)
我感觉我失去了一些东西。
答案1
对我来说,您的问题不够清楚。
RPZ 不是一个标准(从 IETF 标准的意义上来说),它只是一些名称服务器现在提供的新功能。
除了 bind 之外,其他一些名称服务器还为您提供了动态接口,您可以在其中插入一个程序来决定要回复什么。
看看这个例子:https://doc.powerdns.com/md/authoritative/backend-lua/
许多名称服务器允许插入数据库。它不如程序动态,但仍允许更多“实时”配置。它存在于 bind 中,请参阅http://bind-dlz.sourceforge.net/
如果您愿意,可以从头开始开发名称服务器,但请注意,这不是一项简单的任务。名称服务器远不止在请求的名称和回复的 IP 地址之间进行映射。您需要理解和正确实施许多细节,并且文档(标准)被分成许多不同质量的相互交互的文件中(事实上,这是 IETF 工作组目前正在讨论的一个主题,自最近的 IETF 会议以来也是如此;例如,请参阅有关 DNS 协议的一些清晰且全面的文档的最新尝试:https://powerdns.org/hello-dns/)
如果你做错了,虽然没有网络警察来关闭你的网站,但你肯定会得到恼火的客户(如果他们在你这里托管他们的区域,而它在任何地方都不能正常工作),纯粹主义者会以你的情况为例,在这里点名批评:https://github.com/dns-violations/dns-violations