设想用python实现类httpdns的dns服务

看到了以前dnspod的同事发布了一个httpdns的服务,突然记起了来,奶罩最一开始的设想,就是要在手机app里面集成一个httpdns的服务,在当时想法还是很时尚的。  随着腾讯大量的使用httpdns后,紧接着dnspod也发布了类似的产品了。   


原文地址是 xiaorui.cc ,能不能别被爬了。。。。

xiaorui.cc

xiaorui.cc

xiaorui.cc


[ruifengyun@devops ~ ]curl http://119.29.29.29/d\?dn\=xiaorui.cc
106.186.21.252%                                                                                                                         [ruifengyun@devops ~ ]
[ruifengyun@devops ~ ]curl http://114.114.114.114/d\?dn\=www.google.com\&ip\=1.2.3.4\&ttl\=y\&type\=a
74.125.235.240,30;74.125.235.242,30;74.125.235.243,30;74.125.235.244,30;74.125.235.241,30%                                              [ruifengyun@devops ~ ]

部分内容转自:     http://www.arey.cn/article/show/19

一些大点的互联网公司如果想提高旗下产品的用户体验,也就是全局调度,但受限于运营商和第三方递归服务提供商,只能通过自身的递归监测系统和商务能力去改变。

对于互联网公司不满意运营商和第三方递归服务提供商,其原因主要有两点

1、 大部分递归服务器不支持智能解析(谷歌扩展协议),其实现在支持edns的递归,没几家…. 国外的都支持,国内的貌似就阿里和114支持dns扩展协议

2、运营商ISP其DNS服务的处理能力比较差,网络时延和服务质量都不能令互联网公司满意

3、一些小区宽带往往没有自建递归节点,而是将DNS请求转发到第三方服务提供商;

4、即使有第三方服务提供商能够提供智能解析、满足时延要求,例如8.8.8.8,但是运营商可能会封杀该服务器或者进行DNS劫持。


那么咱们再来说说 httpdns的整个流程:

HttpDNS的原理非常简单,主要有两步:
A、客户端直接访问HttpDNS的接口,获取你在配置系统中,现在最优质的IP,返回给用户。
B、客户端向获取到的IP后就向直接往此IP发送业务协议请求。以Http请求为例,通过在header中指定host字段,向HttpDNS返回的IP发送标准的Http请求即可。

获取到了IP地址,因为web端配置了虚拟主机,所以在header的HOST域里加入域名
curl -H "host: www.xiaorui.cc" -v 106.186.21.252



咱们的标题是如何搞一个dns服务,是基于http协议的。    也看了dnspod的api接口,貌似没什么太多的附带参数, 可以加一个ttl的值。

周六周天用tornado和redis做一个简单的httpdns,对于请求应该是支持get和post的,get应对与普通的访问,post是应对那种批量的查询,支持json body的请求体。 

对于返回什么ip,肯定是经过你自己的调度运算,或者是类dns view。除此之外还可以在header里面加一个max-age当做超时的ttl,通知用户是否命中http dns cache等等   


关于上面所说的python实现httpdns的代码还没写  , 那么我这边就httpdns提前先总结下:

      httpdns其实不算是dns,单纯的看字眼,好家伙…. 是http协议的dns,大家看了上面的介绍,以及朋友圈里面关于腾讯httpdns的使用,会发现httpdns是个调度系统…  某种意义上来说,只能dns也是调度系统。  记得在乐视的时候,用户的访问节点就是靠一部分的httpdns来控制的,通过这个接口不仅能传递edns-client-subnet的数据,而且可以各个区域的cdn热度及全局负载情况进行下一步的调度。 



大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

2 Responses

  1. devopser 2015年4月16日 / 上午8:32

    然后呢,就没有然后了?

发表评论

邮箱地址不会被公开。 必填项已用*标注