基于windows系统的智能DNS

导读:
  基于windows系统的智能DNS
  1 智能域名服务器
  简单的说,就是域名服务器能够按照请求用户的网络地址范围,做出不同的地址解析。
  智能域名服务器在中国的主要作用是解决中国电信和中国网通间存在的问题 -- 当你设置一个服务器在电信的网络上,这个时候网通的用户访问往往很慢,而如果设置在网通则电信访问很慢,要解决这个问题有很多方法,比较容易采用的是:在电信和网通都设置服务器,而后让用户使用不同的域名访问,如电信用户用www.xxx.com,而网通用户用 www2.xxx.com访问,但是这样带来的问题是要用户自己判断,并且还需要输入不同域名导致麻烦。
  这个时候自然希望能够让用户输入www.xxx.com的时候,能够由域名服务器自动判断用户的网络情况,而后提供不同的地址解析,即:当网通的用户访问的时候,域名服务器判断(通过访问的域名服务器IP地址范围)到该用户来自网通,则给出设置在网通的机器IP,而如果来自电信则给出电信的。
  推而广之,你不仅仅可以作为这个用途,还可以按照网络的情况进行优化,按照不同的IP范围(代表不同的网络区域),将用户带到不同的服务器节点上。
  2、设置基于Windows 2000/2003平台下的智能域名服务器
  Windows 2000/2003本身带有内置的域名服务器系统,但是好像没有找到方法进行这样的设置,因此只好另外找替代方案。
  1、下载并且安装 Bind 9.3.2 (Bind 9是Unix/Linux下普遍采用的域名服务器的最新版本)
  a. 到这个地址
  http://www.isc.org/index.pl?/sw/bind/
  or
  http://www.mingfor.com/download/cmf/BIND9.3.2.zip
  下载安装版本,而后解压到一个临时目录,而后运行 BINDInstall.exe
  b.按照提示,默认安装到 windowssystem32dns目录下,请注意,将账号名称named 更改为你认为比较复杂的,而后密码请设置足够复杂,并且安全强度足够高的,而后选择 Install 就可以了,这个时候系统会自动帮你创建一个 账号,该帐号只有Log on as services的权限。
  c. 进入安装目录,而后给 etc 目录授予刚才你输入的那个用户具有读写的权限。
  2、配置
  a. 进入安装目录(windowssystem32dns)下面的bin目录,而后运行
  rndc-confgen -a (运行完成后会在etc目录下生成rndc.key)
  rndc-confgen >..etcrndc.conf
  b.下载我已经配置好的
  http://www.mingfor.com/download/cmf/etc.rar
  ,将文件解压到etc目录下,而后按照以下步骤完成配置;
  c.进入etc目录,用 notepad 打开 rndc.conf,找到下面这一段,并且将蓝色字符的部分前面的#去掉,拷贝到 named.conf文件中去(取代原来里面的同样内容)。
  # Use with the following in named.conf, adjusting the allow list as needed:
  # key "rndc-key" {
  # algorithm hmac-md5;
  # secret "EaECWVnjPcnq23yyApSgi==";
  # };
  #
  # controls {
  # inet 127.0.0.1 port 953
  # allow { 127.0.0.1; } keys { "rndc-key"; };
  # };
  # End of named.conf
  c. 按照你的需要,更改 named.conf 里面的 xxxx的东西,改为你自己的域名;
  d.而后修改 cnc.xxxx.com.txt 和 tel.xxxx.com.txt 里面的具体内容(如果你需要,也可以修改文件名)
  e. 全部配置完成后,可以进入Windows 服务管理器,找到那个叫 ISC Bind的服务,而后选择启动,如果出现错误,请打开你的事件查看器,到应用程序部分看看什么错误。如果没有问题,则已经运行起来了。
  3、测试
  使用 windows 自带的 nslookup 测试,进入Dos,而后输入: nslookup - 域名服务器IP,而后输入域名看看
  测试不同的地方不同的结果:
  1、只需要用notepad打开 acl.conf ,加上一行: 你指定的IP地址,例如 192.168.1.3/32 (一定记住加上/32);保存,重新将ISC Bind 停止/启动一次,在你刚才输入IP地址的那台机器上使用nslookup -域名服务器IP来查看,看看给你的这台机器的地址是否已经是网通的了? 而在不是这个IP的机器上测试,则会给你电信的IP。
  *如果你的Windows 系统开启了防火墙,请配置一个特例,以便DNS服务可以被访问, UDP/Port:53

本文转自
http://arthorzhou888.blog.163.com/blog/static/3130915320076241156172/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
smartdns 是 python 语言编写,基于 twisted 框架实现的dns server,能够支持针对不同的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,从而达到不同运营商机房流量调度的目的。 支持的功能 支持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)的。具体流程如下: 代码 github: https://github.com/xiaomi-sa/smartdns 安装 依赖: python 2.6或者2.7 Twisted 12.2.0 zope.interface 4.0.1 安装: git clone smartdns到本地路径,进入script目录,执行install_smartdns.sh即可将smartdns安装在本地,同时python环境和相关的依赖都是使用virtualenv来进行管理,不会对系统环境造成影响。 启动: 进入smartdns的bin路径下,执行sh run_dns.sh即可启动smartdns 测试 本地测试 dig test.test.com @127.0.0.1 或者将搭建的smartdns加到测试域名的ns中进行测试。 支持 mail: fangshaosen@xiaomi.com github: jerryfang8 EDNS相关请参考:DNS support edns-client-subnet 标签:smartdns

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值