Jun 012007
 

前几个月,在下穷极无聊写了篇文章《上海电信DNS劫持事件》,本意并未有向电信开炮的意思,怎料文章投递到cnbeta以后,引来无数人响应,一时间貌似全国都有人发现“劫持”,包括网通,铁通等ISP的类似行为都被曝光,甚至某些本来是由于某些低级失误造成的问题都被归于此类,自此大家又多了一条批判运营商的罪状–“劫持”。后经过各大网络媒体大肆炒作,影响甚众,果然现在还是靠骂人出名最快捷,矛头指向垄断企业才是个性,跟专家对着干才叫水平。事事如此,人人如此,也难怪网民们动不动就骂,所有业界文章,如果没有反对意见,那还真是另类了。

骂归骂,问题还是要解决。对于这个问题,如果不想享受电信的免费“服务”的话,总该想几招出来吧。

最简便的方法恐怕是“惹不起躲得起”,咱不用你大爷的DNS不就是了么,也就是找一些比较“正常”的DNS服务器作为自己的主解析服务器。这个根据各地不同的情况有不同的选择,恐怕拿不出在全国都好用的“正常”服务器。

第二个方法“没有枪没有炮,我们还要自己造”。架个自己的DNS,方法很多,最简单不过Windows Server家族的自带DNS服务了,不过缺点是由于只有自己使用,再加上经常关机,恐怕没有一个好的缓存命中率,如果算上DNS服务的内存和CPU损耗的话,对于个人用户,恐怕不是那么值得玩的。

第三个方法“以毒攻毒”。这个方法也是需要自己架设一个DNS Server的,但不同的是是要架设一个forwarder类型的Server。将DNS查询转发至上级ISP的服务器,这样能保证一个好的命中率。但问题是会把劫持的结果forward回来,因此这里要解决的就是把劫持的结果再劫持回原样,是谓“以毒攻毒”。

 要实现这种需求,首先是需要一个转发器(forwarder)软件,其次这个软件需要有条件过滤功能以便将NXDOMAIN劫持回来。最可行的方案恐怕就是dnsmasq了。这是一个*nix下的forwarder,很多家用宽带路由器的DNS功能其实就是这玩艺在起作用,因此如果你使用的宽带路由器有比较强的定制能力,例如使用dd-wrt,openwrt等第三方固件的路由器,所要做的只不过是修改一下dnsmasq的一项参数,然后将dns设置为你的路由器IP即可。

我现在使用的是一个Linksys WRT54G,这可谓一代经典了,就是这玩艺引发了第三方固件使用的大潮,估计很多网民都知道它的大名。我用的固件是Tomato,在其后台可以很方便的修改dnsmasq的参数,所要做的唯一工作就是在dnsmasq的配置选项中填入bogus-nxdomain=218.83.175.154即可。218.83.175.154这个IP就是在我这里被劫持到的地址,可以通过ping一个肯定不可能存在的域名得到。

manpage中关于这个配置项的说明如下:

-B, –bogus-nxdomain=<ipaddr>

Transform replies which contain the IP address given into “No such domain” replies. This is intended to counteract a devious move made by Verisign in September 2003 when they started returning the address of an advertising web page in response to queries for unregistered names, instead of the correct NXDOMAIN response. This option tells dnsmasq to fake the correct response when it sees this behaviour. As at Sept 2003 the IP address being returned by Verisign is 64.94.110.11

 

经由dnsmasq之后的解析服务,既能保证准确又能保证快速,可谓完美了。唯一的缺点恐怕就是既没有一个强悍的宽带路由器又没有一个能长期在线的*nix Box的兄弟们就只能看着干着急了XD。像我这样一有强悍的路由,二有home server,三还有n多Internet Server可以搭的人真是幸福,嘿嘿。没这些条件的兄弟们,继续把矛头指向ISP吧,在下我就不奉陪了。Shutup and code,说起来容易做起来难,还要继续加强修养,hoho。

 

 

  15 Responses to “DNS劫持之以毒攻毒–利用dnsmasq来对付ISP的DNS劫持”

  1. 有幸到你这里,搜索来的!哈哈!希望能管用!多谢!

  2. 又看到利文了,虽然实现不了,还是要看!

  3. sb
    本来就是不存在的域名,随便指向哪儿都无所谓,何必非那么大的力气把erro空白页还原呢,照你的用法很多被电信qj的人为了摆脱这种所谓的强奸还得买个路由.

    本来就是无所谓的东西

    你的目的无非就是显示一下自己的技术,像你这种人啊….(以下省略1w字)

  4. 是啊,确实是指向哪都无所谓,您要不要买路由也无所谓,我还有n种方法可以解决,我写不写在自己Blog上对您也无所谓,那您干骂非要有所谓的跑过来留下sb两个英文字母呢?

  5. 以下引用
    “是啊,确实是指向哪都无所谓,您要不要买路由也无所谓,我还有n种方法可以解决,我写不写在自己Blog上对您也无所谓,那您干骂非要有所谓的跑过来留下sb两个英文字母呢?”

    嘿嘿,大爷我喜欢.喜欢,懂不??

  6. Anonymous<–阁下素质之高,吾等自愧不如!
    作为一个人,尤其是中国人也未免太过为难阁下了!

  7. 谢谢Solo Estoy!!!
    你的两篇文章都看到了,很长见识。
    不要听那些别有用心的脏鸟乱叫,他们是有目的的。
    希望你多多发表这方面的研究成果或心得给大家分享。

    支持你!

  8. 你好,我用的是DD-WRT,但我照着你的设置,在附加的DNSMasq选项里写上bogus-nxdomain=218.83.175.154

    但好像没有效果。

    所以来请教一下,我网卡上的DNS已经设置为路由地址,但是没用,浏览器解析还是直接访问114,头大死了

  9. 对于每一个地方这个IP地址都是不一样的,你只要随便ping一个不存在的域名,得到的IP就是这个你需要填写的IP。

  10. @Anonymous
    老兄你有没有被劫持过?不只是不存在的网站会转到他那,稍微反应慢一点的也照样转过去。

  11. @Summer
    没错,不过这是最近才出现的。相信是加了某种Timeout设定,解析较慢的也直接返回fake的IP。相信是为了加强控制而做的新功能。

  12. 设置个香港或外国的DNS嘛。当然要选快的了。 怎么选快的了。用软件测试呀。
    有款软件专门设置DNS,自动从全国和世界的DNS中挑选相对于你的电脑最快的DNS设置。安装后,按一个按钮就全部自动搞定了。
    搜索”彗星DNS优化器”可找到。免费软件。

  13. 设置非local DNS会导致一些使用了CDN加速的站点变慢,不推荐。

  14. 请教楼主,如果我想仿中国电信的功能,在本地内网中实现不存在的或者无法解析的域名全部转向我架设的某台内网服务器,那么在dnsmasq上我应该怎么写指令呢?我这里的联通比较良心,没有不存在的域名劫持,所以我没办法借用官方的劫持做二次劫持。。所以只能想办法自己改指令了。还望楼主明示。。

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>