智能DNS Smartdns 简介
smartdns
使用场景
smartdns是python3语言编写,smartdns基于小米smartdns二次开发,支持类似Dnspod的D监控功能,能够支持针对不同的dns请求根据配置返回不同的解析结果。smartdns获取dns请求的源IP或者客户端IP(支持edns协议的请求可以获取客户端IP),根据本地的静态IP库获取请求IP的特性,包括所在的国家、省份、城市、ISP等,然后根据我们的调度配置返回解析结果,smartdns的典型使用场景:
- 服务的多机房流量调度,比如电信流量调度到电信机房、联通流量调度到联通机房;
- 用户访问控制,将用户调度到离用户最近或者链路质量最好的节点上。
举个简单的例子,我们的一个站点test.test.com同时部署在电信和联通两个机房,该站点在电信机房的ip为1.1.1.1、在联通机房的ip为2.2.2.2,就可以通过smartdns做到该站点域名解析时判断源IP为电信的IP时返回1.1.1.1、判断源IP为联通的IP时返回2.2.2.2,从而达到不同运营商机房流量调度的目的。
安装方法
- 安装python-devel以及bzip2包,以centos为例:yum install -y bzip2 python-devel
- 执行pip install smartdns脚本即可完成安装
用以上两条命令安装成功!!
支持的功能
支持A、SOA、NS记录的查询,支持DNS forward功能
性能
在虚拟机2.4G CPU上能够处理1000QPS查询请求,打开debug日志后可以到800QPS。3-5台dns server组成的集群已经能够满足大部分站点的需求。
目前我们正在实现和小流量测试go语言实现的smartdns,能够达到3wQPS以上,后续测试稳定后会开源出来,大家敬请期待:)
原理
smartdns响应dns请求的处理流程如下:
IPPool类的初始化和该类中FindIP方法进行解析处理是smartdns中最关键的两个要素,这两个要素在下面详细介绍。其他的特性比如继承twisted中dns相关类并重写处理dns请求的方法、升级twisted代码支持解析和处理edns请求等大家可以通过代码了解。edns知识可以猛戳这里:DNS support edns-client-subnet
IPPool初始化
ip.csv内容格式如下: 200000001, 200000010,中国,陕西,西安,电信
其中各个字段含义分别为 IP段起始,IP段截止,IP段所属国家,IP段所属省份,IP段所属城市,IP段所属ISP
a.yaml配置文件格式:
test.test.com:
ttl: 3600
default: 5.5.5.5 2.2.2.2
中国,广东,,联通: 1.1.1.1 3.3.3.1
中国,广东,,电信: 1.1.1.2 3.3.3.2
配置中地域信息的key包括四个字段,分别带有不同的权重:
- 国家: 8
- 省份: 4
- 城市: 2
- 运营商: 1
初始化阶段,会生成一个名为iphash的dict,具体数据结构如下图:
其中,iphash的key为ip.csv每一条记录的起始IP,value为一个list,list长度为6,list前5个字段分别为以该key为起始IP记录的IP段截止、IP段所属国家、IP段所属省份、IP段所属城市、IP段所属ISP,第六个字段是一个hash,key为a.yaml里面配置的域名,value为长度为2的list,iphash[IP段起始][6][域名1][0]为域名1在该IP段的最优解析,iphash[IP段起始][6][域名1][1]为该最优解析的总权值,该总权值暂时只做参考。
iphash初始化过程中最关键的是iphash[IP段起始][6][域名1]的最优解析的计算,最简单直接的方式是直接遍历域名1的所有调度配置,挑选出满足条件且总权值最高的解析,即为最优解析。这种方式记录整个iphash的时间复杂度为O(xyz),x为ip.csv记录数,y为域名总数量,z为各个域名的调度配置数。为了优化启动速度,优化了寻找最优解析的方法:事先将每个域名调度配置生成一颗树,这棵树是用dict模拟出来的,这样需要最优解的时候就不需要遍历所有调度配置,而是最多检索15次即可找到最优,即时间复杂度为O(15xy),具体实现参考IPPool的LoadRecord和JoinIP两个方法。
有了初始化后的iphash数据结构之后,每次请求处理的时候,只需要定位请求IP处在哪个IP段,找到IP段起始IP,然后从iphash中取出最优解析,取出最优解析的过程是O(1)的。具体流程如下:
监控
监控配置详见配置目录的monitor.yaml,内容如下:
test.test.cn:
interval: 30
frequency: 3
url: https://www.baidu.com
分别代表监控域名、监控周期(秒)、容错次数、监控url,监控失败的次数大于容错次数则停止该条记录的解析。
代码
github: https://github.com/duanhongyi/smartdns
本文地址:
https://github.com/sk-xie/smartdns
安装
依赖:
gcc bzip2 python3以及相关dev包 Twisted
安装:
git clone smartdns到本地路径,执行python setup.py install命令安装。
启动:
执行sdns /etc/smartdns即可启动smartdns
测试
本地测试 dig test.test.com @127.0.0.1
或者将搭建的smartdns加到测试域名的ns中进行测试。
支持
mail: duanhongyi@doopai.com
github: duanhongyi
EDNS相关请参考:DNS support edns-client-subnet
mkdir /etc/smartdns
cd /etc/smartdns/
cp /home/root.adminssh/smartdns-master/templates/sdns.yaml .
cp /home/root.adminssh/smartdns-master/templates/* .
启动:
sdns /etc/smartdns
智能DNS Smartdns 简介相关推荐
- mysql与dns_借助mysql和DNS view实现智能DNS(centos6.3 x64环境)
开篇说明 关于智能DNS和CDN的东西可以看我之前的一篇博文 上次的博文简单使用了BIND的视图功能实现了简单的智能dns,此篇博文结合了mysql实现真正意义上的智能DNS系统 需要准备东西 首先y ...
- 智能化服务器怎么调,怎么设置dns 智能dns设置方法 【图文】
智能 dns 是关于域名频道的一种智能解析服务,它能够根据访问者的 IP 地址,自动判断出对应的地址,使访问者达到相应的服务器.这样解释是不是还是不太了解这个服务,就让小编带你了解一下如何设置智能 D ...
- Linux随笔16-主从DNS服务搭建以及智能DNS服务搭建、基于CentOS7.6编译安装MySQL-5.7.32
Contents 1. DNS主从服务器搭建 1.1. DNS简介 1.2. DNS主从服务搭建 1.2.1. 主DNS服务器配置 1.2.2. 从DNS服务器配置 1.2.3. Web服务器准备 1 ...
- bind9 dlz mysql_利用BIND+DLZ+MYSQL构建企业智能DNS
目录: 一.简介 二.服务规划 三.安装BIND及基本环境 四.配置Bind-View-DLZ-MYSQL 五.添加相关记录并进行测试 六.配置从DNS 七.本文以FreeBSD 10.2 stabl ...
- 用bind架设自己的智能DNS
中国的南北网络问题,是许多做网站的人的心病 除了使用双通或者多通机房以外,还可以通过多台镜像服务器的方法来提高用户的访问速度 但是,如果使用的双通机房并不是单IP的,或者使用多台镜像的做法,就会面临多 ...
- 才知道百度也提供了智能DNS服务 - 加速乐
http://jiasule.baidu.com/ 智能DNS 依托百度多年积累的高精度DNS识别库,平均只需5秒全球DNS服务器全部生效,百度蜘蛛1秒生效.抗攻击.无限解析记录,免费支持电信.联通. ...
- 实易智能DNS单台设备QPS高达28万
在国内某电子商务旗舰企业11月智能DNS采购入围测试中,通过专业测试仪,实易智能DNS单台设备QPS峰值高达28w,稳定在24W,遥遥领先国内在测同类产品.测试数据达到国际领先水平,得到了用户的认可. ...
- 智能DNS解析+JBOSS集群(一)
智能DNS+JBOSS集群<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...
- CDN和智能DNS原理和应用 (原)
CDN是什么? CDN的全称是Content Delivery Network,即内容分发网络. CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调 ...
- 在Win2003中安装bind【部署智能DNS】
http://369369.blog.51cto.com/319630/811179 前言: 搞LINUX的朋友都知道,bind是linux下的DNS服务软件,但很多人不清楚,它也可以运行在w ...
最新文章
- 慌!年中总结完全没思路,这份安全汇报让你抄作业
- 小白们应当知道的配置系统变量PATH 的小技巧。
- C#中关键字ref与out的区别(转)
- python简单编程例子-Python实现的简单万年历例子分享
- [转]十分钟搞定Vue搭建
- JPA关系映射之one-to-many和many-to-one
- 磁盘与文件系统管理( 认识磁盘,了解磁盘,文件系统的建立与自动挂载)
- 配置Chrome支持本地(file协议)的AJAX请求
- 小技巧教你解决此windows副本不是正版的问题
- python编程软件排行榜_PYPL 9月编程语言排行榜发布 Python一枝独秀
- 【SGU】SGU每日练1·Little shop of flowers【DP】
- JS 与 后台如何获取 Cookies
- 幼儿-综合素质【1】
- 大学计算机考试考操作吗,大学计算机期末考试系统操作流程.doc
- 量子计算机怎样输入数据,量子计算入门
- 微软mes杀毒更新服务器搭建,我的系统的不能用Microsoft Update更新的啊
- VBox 虚拟机完美迁移/复制(带快照)
- 数据分析师需要学什么?数据分析师必备的7种能力
- AOSP ~ Camera - RK HAL3 ( 一 )
- 数据分析进阶必看干货!销售额下滑详细分析案例