dnsmasq github,开源dns管理系统

  dnsmasq github,开源dns管理系统

  智能DNS

  使用场景

  Smartdns是用python语言编写的,基于twisted框架实现的dns服务器。根据不同dns请求的配置,支持不同的分析结果。Smartdns获取dns请求的源IP或客户端IP(客户端IP是支持dns协议的请求),基于本地静态IP库,基于调度,获取被请求IP的特征(如国家、州、城市、ISP)。

  智能dns使用场景:

  多个房间的服务调度,例如将通信业务调度到通信房间或者将通信业务调度到通信房间。

  用户访问控制将用户调度到离用户最近或链路质量最高的节点。

  举个简单的例子,我们的网站test.test.com同时部署在电信和联通的两个机房。这个网站的ip地址是电信机房的1.1.1.1和联通机房的2.2.2.2。当该网站的域名通过smartdns解析后,当源ip判断为电信ip时,可以返回给1.1.1.2。

  支持的功能

  支持查询A、SOA和NS记录,支持d NS前端功能

  表演

  虚拟机的2.4G CPU可以处理1000QPS的查询请求,调试日志可以达到800QPS。一个由3-5台DNS服务器组成的集群现在可以满足大多数站点的需求。

  现在已经实现了小流量测试的go语言和smartdns,可以达到3wQPS以上。后续测试稳定后会变成开源,敬请期待:)

  原则

  smartdns响应dns请求的过程如下。

  IPPool类的初始化和基于该类的FindIP方法的分析处理是smartdns中最重要的两个要素。这两个元素将在下面详细解释。您可以了解代码中的其他特性,例如继承twisted的dns相关类,重写处理dns请求的方法,升级twisted代码以支持e dns请求的解析和处理等。Edns知识可以戳这里:dns支持edns-client-subnet

  IPPool初始化

  ip.csv的内容格式如下:

  2000001,2000010,中国,陕西,xi,电信

  每个字段的含义是IP段起始、IP段结束、IP段国家、IP段省份、IP段城市、IP段ISP。

  A.yaml配置文件格式:

  test.test.com:

  ttl: 3600

  缺省值

  3.3.3.1、1.1.1.1、中国、广东和中国联通

  3.3.3.2、1.1.1.2、中国、广东和电信

  中的配置区域信息的关键字包含四个字段,每个字段具有不同的权重。

  国家:8个

  省份:4个

  城市:2

  操作员:1

  在初始化阶段,会生成一个名为iphash的dict。具体数据结构如下图所示。

  其中,iphash的关键字是ip.csv的每条记录的起始IP,值是一个列表,列表的长度是6。列表的前五个字段以此键开头,表示IP记录的IP段截断、IP段所属城市的IP设置、ISPIP段所属的地址。第六个字段是值为2的列表;混合IP列[IP段开始][6][域名1][0]是该IP段中域名1的第一个字段。

  IP hash初始化过程中最重要的是计算IP hash的最佳解析[IP段开始][6][域名1]。最简单直接的方法就是直接遍历域名1的所有调度配置,选择满足条件且总权重最高的方案。该方法中,IP洗牌的整体时间复杂度取为o(XYZ),X取为ip.csv记录数,Y取为域名总数,Z取为每个域名要记录的调度结构数。为了优化启动速度,对寻找最优解的方法进行了优化。生成一棵树,通过dict提前模拟每个域名的调度配置。如果需要优化方案,最多搜索15次就能得到最好的结果,即时间复杂度为o(15xy),而不用遍历所有调度配置,参考IPPool。

  利用初始化的IP散列数据结构,每当处理请求时,o(1)确定所请求的IP在哪个IP段中,找到IP段的报头IP,从IP散列中检索最佳分析,并检索最佳分析。具体流程如下。

  密码

  固定

  依赖性:

  Python 2.6或2.7

  扭转12.2.0

  接口4.0.1

  安装:

  将git克隆smartdns移动到本地路径,移动到脚本目录,然后运行install_smartdns.sh,在不影响系统环境的情况下,管理与python环境相关的依赖关系。

  开始:

  进入rou

  测试当地挖test.test.com @ 127 . 0 . 0 . 1

  或者将内置的smartdns添加到测试域名的ns中进行测试。

  支持

  github: xhdty8

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: