被我坑了一年半的项目pfdns,终于有望在今年写出来了

项目的地址在http://code.google.com/p/pfdns/,是给多线的网络设计的DNS。提出这个设想的背景自然是跟VPN有关。

虽然说既然是多线网络,路由表配置好了的话,也应该差不多好使了。过度蛋疼是不必要的。很多时候,选择dns的结果只是为了节省VPN流量和降低网络延时。

说说在教育网,大体上需要一个怎样的pfdns:

  • 尽可能把图片、视频、下载、门户流量弄到教育网,如果他们有针对教育网的解析的话,不然延时就要命了,用户受不了
  • 对于google等到处做了cdn的国际大站,不能解析到香港去,要用湾区的解析结果,这样从VPN出来只要不到10ms,各种有保证。
  • 接下来就是策略性的了,偏向电信还是偏向联通。比如北大到电信好,以及设想pfdns的时候清华到联通还挺好的。所以对北大来的询问返回偏向电信的好,对清华偏向联通不错(已经不成立了)。

不过说到DNS的解决方案,由于pfdns被我自己坑了这么久,我在做电信+VPN解析或者联通+VPN解析的时候,没有沿用教育网的思路。而是对解析用了中国内、中国外的分割方法,设定bind的路由表,让它递归解析。询问中国的权威时,使用电信/联通的地址,而询问国外时,通过VPN。这是基于假设有愿望做国内智能解析的网站,基本上会把权威放到国内的。这个方法实践效果其实我挺满意的。

对教育网,是不能用这个方法的。一来,我没有一个能访问整个国内IP范围的教育网的机器。二来,不少国内的智能解析服务商十分不靠谱(是基本没一个靠谱),给清华IP(有时候清华IP并不被认为是教育网IP,因为whois……)的解析结果经常会出乎意料。就算给的结果正确,也总有这种情况发生:似乎外界都认为联通到教育网挺好的,所以给教育网的解析IP就是联通IP。而这并不是我想得到的结果。三就是虽然都是教育网,每个学校的网络不怎么一样的,甚至很不一样。

DNS是很复杂的,这是我一直坑着pfdns的主要原因。加上以前写tcp的async server也写错过,最终写了一个无bug的后来也不想用。作为懒人我看了看libex,文档有一部分没有看懂,使用它干活还算可以接受吧。总之觉得自己写网络通信什么的有点烦,UDP什么的还要recvmsg去看IP_PKTINFO。

最近看wikipedia的DNS服务器对比列表的时候,发现libunbound(虽然很早就知道unbound,且机器上一直装着libldns-dev)支持async得解析,并且意外发现unbound有一个叫做pymod的模块可以让用户根据需求编辑递归resolver解析的结果。

虽然文档不怎么详细,demo没告诉我我能做的所有事情。看了看代码我觉得unbound的模块和状态机设计应该可以让我完成我想做的事情。另外这几天用libunbound-python写了一下async的解析,对每个域名同时问几个upstream的DNS,最终根据它们的结果选择到底使用哪个结果。只可惜用python的binding无法把answer_packet拿出来,只好写C了。

Advertisements

One response to this post.

  1. Posted by a on 10/08/2011 at 6:49 下午

    非常期待

    回复

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

w

Connecting to %s

%d 博主赞过: