智能DNS Smartdns 简介

smartdns

使用场景

smartdnspython3语言编写,smartdns基于小米smartdns二次开发,支持类似DnspodD监控功能,能够支持针对不同的dns请求根据配置返回不同的解析结果。smartdns获取dns请求的源IP或者客户端IP(支持edns协议的请求可以获取客户端IP),根据本地的静态IP库获取请求IP的特性,包括所在的国家、省份、城市、ISP等,然后根据我们的调度配置返回解析结果,smartdns的典型使用场景:

  • 服务的多机房流量调度,比如电信流量调度到电信机房、联通流量调度到联通机房;
  • 用户访问控制,将用户调度到离用户最近或者链路质量最好的节点上。

举个简单的例子,我们的一个站点test.test.com同时部署在电信和联通两个机房,该站点在电信机房的ip1.1.1.1、在联通机房的ip2.2.2.2,就可以通过smartdns做到该站点域名解析时判断源IP为电信的IP时返回1.1.1.1、判断源IP为联通的IP时返回2.2.2.2,从而达到不同运营商机房流量调度的目的。

安装方法

  1. 安装python-devel以及bzip2包,以centos为例:yum install -y bzip2 python-devel
  2. 执行pip install smartdns脚本即可完成安装

用以上两条命令安装成功!!

支持的功能

支持ASOANS记录的查询,支持DNS forward功能

性能

在虚拟机2.4G CPU上能够处理1000QPS查询请求,打开debug日志后可以到800QPS3-5dns server组成的集群已经能够满足大部分站点的需求。

目前我们正在实现和小流量测试go语言实现的smartdns,能够达到3wQPS以上,后续测试稳定后会开源出来,大家敬请期待:)

原理

smartdns响应dns请求的处理流程如下:

IPPool类的初始化和该类中FindIP方法进行解析处理是smartdns中最关键的两个要素,这两个要素在下面详细介绍。其他的特性比如继承twisteddns相关类并重写处理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

初始化阶段,会生成一个名为iphashdict,具体数据结构如下图:

其中,iphashkeyip.csv每一条记录的起始IPvalue为一个listlist长度为6list5个字段分别为以该key为起始IP记录的IP段截止、IP段所属国家、IP段所属省份、IP段所属城市、IP段所属ISP,第六个字段是一个hashkeya.yaml里面配置的域名,value为长度为2listiphash[IP段起始][6][域名1][0]为域名1在该IP段的最优解析,iphash[IP段起始][6][域名1][1]为该最优解析的总权值,该总权值暂时只做参考。

iphash初始化过程中最关键的是iphash[IP段起始][6][域名1]的最优解析的计算,最简单直接的方式是直接遍历域名1的所有调度配置,挑选出满足条件且总权值最高的解析,即为最优解析。这种方式记录整个iphash的时间复杂度为O(xyz)xip.csv记录数,y为域名总数量,z为各个域名的调度配置数。为了优化启动速度,优化了寻找最优解析的方法:事先将每个域名调度配置生成一颗树,这棵树是用dict模拟出来的,这样需要最优解的时候就不需要遍历所有调度配置,而是最多检索15次即可找到最优,即时间复杂度为O(15xy),具体实现参考IPPoolLoadRecordJoinIP两个方法。

有了初始化后的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

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 旁路由SmartDNS是一种网络技术,用于提供更快速、稳定的域名解析服务。通常,在我们使用互联网时,当我们输入网站的域名时,计算机会首先去DNS服务器查询对应的IP地址,然后根据IP地址连接到网站。 然而,传统的DNS解析可能存在一些限制,比如速度较慢、无法解锁特定地区的受限内容等。而SmartDNS就是为了解决这些问题而设计的。 旁路由SmartDNS的使用方法相对简单。首先,我们需要购买一台支持SmartDNS的路由器。接下来,将这台路由器接入到我们的网络中,并进行相关设置。一般来说,我们需要在路由器的设置页面中输入SmartDNS服务商提供的相关信息,例如DNS IP地址等。完成设置后,该路由器将会自动将我们的DNS请求转发给SmartDNS服务器。 相比传统的DNS服务器,旁路由SmartDNS的优势主要体现在两个方面。首先,它可以加速网页加载速度。通过优化DNS解析流程,SmartDNS可以在短时间内解析出目标网站的IP地址,从而加快网页的加载速度,提高用户体验。 其次,旁路由SmartDNS可以绕过地理限制。有些网站或内容可能会根据用户所在地区进行限制,让用户无法正常访问或收看。但通过使用SmartDNS,我们可以将DNS请求转发到支持解锁受限内容的服务器上,让我们获得更多的内容自由。 总的来说,旁路由SmartDNS是一种方便实用的网络技术,在提供更快速、稳定的域名解析服务的同时,还能帮助我们绕过地理限制,获得更好的网络体验。 ### 回答2: 旁路由(smartdns)是一种网络配置技术,其作用是通过路由器来实现DNS解析的功能。一般而言,互联网服务提供商(ISP)会提供他们自己的DNS服务器,用于将域名转换为IP地址,以便用户能够访问网址。然而,这些ISP的DNS服务器的速度和稳定性可能不尽如人意。 而使用旁路由(smartdns)技术,可以将DNS解析的任务交给第三方提供的DNS服务器,如谷歌DNS或者腾讯DNS,以提高网络访问速度和稳定性。使用旁路由(smartdns)的好处主要有以下几点: 首先,使用旁路由(smartdns)可以提高网络访问速度。第三方DNS服务器通常具有更强大的处理能力和更稳定的网络环境,相比于ISP提供的DNS服务器,其解析速度更快,能够更快地将域名转换为IP地址,从而加快了网页加载速度。 其次,使用旁路由(smartdns)可以提高网络稳定性。ISP的DNS服务器可能会面临负载过大、故障时断时续等问题,导致网络连接不稳定,甚至访问不了某些网址。而使用第三方DNS服务器可以避免这些问题,提高网络的稳定性。 此外,旁路由(smartdns)还可以解决一些特殊的访问问题。例如,有些网站可能因为地区限制无法访问,而通过修改DNS服务器可以突破这种限制,实现访问。 总而言之,旁路由(smartdns)是一种通过路由器配置的技术,能够将DNS解析的任务交给第三方提供的DNS服务器,以提高网络访问速度和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值