是否可以基于查找在BIND中执行脚本


9

是否可以将BIND设置为我的本地网络上的DNS服务器,并在查找时制作执行脚本?

我想根据传入的DNS查找执行Python或Bash脚本,我该如何解决呢?

如果可以,请告诉我如何,如果不能,请告诉我在Ubuntu上运行的其他DNS服务器实现中是否可行。

非常感谢你。


1
这对我来说似乎有些奇怪,请问您要达到什么目标?
sr_

可能有点奇怪;)我要尝试的是在数据库中查找,如果查找的目的IP在某个特定国家/地区,如果是,则要在我的数据库上建立路由服务器,它还充当特定ISP或某些情况下VPN连接的路由器。我尝试设置很多路由,永远不会使用99%,并且性能非常差。如果我可以按需进行操作,则DNS性能会很差,但是就我而言,这没有任何影响。
Gunnar

嗯,如果匈牙利网站使用Google Ad-blah,这可能会失败,不是吗?(但是我也没有其他想法,对不起。)
sr_

我很想知道您要完成的工作,因为将要发生的事情是您会从IP中获得一个请求,该请求必须与地理位置匹配(可能是错误的),然后在DNS上设置路由服务器通过特定的路由响应该IP,这是没有意义的,因为请求已将其发送到BIND?
Karlson '02

如果我对您要实现的目标的猜测是正确的(通过非标准网关路由某些连接),那么BIND这样做的地方不对吗?您是否研究过策略路由和/或iptables?
Alexios

Answers:


1

我可以想到另外两个不需要解析BIND日志或完全不干扰BIND的选项。

1)端口镜像-复制数据包并将其发送到应用程序正在侦听,解析DNS请求并采取措施的单独端口。dpktscapy类似的数据包制作库将帮助您解析原始请求。

2)使用某种类型的数据包嗅探库来被动监视请求。这是一个使用示例scapy

from scapy.all import *

def handler(req):
    if req.haslayer(DNS) and req.getlayer(DNS).qr == 0:
        ip = req.getlayer(IP)
        dns = req.getlayer(DNS)

        q = dns.qd
        print q.qname # simply print domain name


if __name__ == '__main__':
    sniff(iface="eth0", filter="udp and port 53", prn=handler, store=0)

显然,这只是一个原始示例。它仅显示所查询域的名称,但是您当然可以添加很多逻辑。如果您参考scapy文档,您会发现DNS请求中的所有字段都随时可用。


这看起来很有趣。我将对此进行调查。谢谢:-)
Gunnar 2012年

0

您可以通过监视绑定服务器日志(必须打开查询日志)来做到这一点。祝好运...


请注意,记录所有绑定查询会严重消耗性能。我不会在任何生产级权威服务器上建议这样做。
沙杜尔2012年

取决于该绑定服务器的负载。而且,也可以将日志写入ram磁盘,例如/dev/shm
Nils

日志,然后swatch在日志上运行或OSSEC来调用您的脚本。从长远来看,这不是一个好主意。
朱迪·C

0

没有在绑定中实现事件的事情,不需要它。

您可以环顾应用防火墙,在某些组织中使用该防火墙来限制对某些用户的访问。在那里,您将有更多机会实现自己想要的。

设置路由似乎也是一个好主意,最后,想要通过绑定和触发的脚本执行实现的效率也将很低:您必须:

for each dest IP 
look up through your database  
if match set the route
then the OS will see and use the root

设置路由负载不是问题,不会以明显的方式影响性能。您认为公司路由器有几条路由?几百个?不完全是...而且它们不一定具有精美的硬件配置。认真地说,您很好,认真的操作系统专门设计用于处理许多路由并优化查找。

除了首先要执行的操作外,还要在路由表顶部使用一个数据库,这将是另一种数据库。把事情简单化。在BGP服务器上,出于政治/财务原因实际上选择/首选了许多路由,每个ISP /组织都可以这样做,并且它们为此添加了特定的路由。运输或法院命令的费用通常是采取此类措施的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.