xdns,将DNS请求处理下发送出去,防止DNS污染,测试可以访问facebook - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX    DNS

xdns,将DNS请求处理下发送出去,防止DNS污染,测试可以访问facebook

  •  
  •   isayme 2013-04-06 18:10:33 +08:00 7687 次点击
    这是一个创建于 4658 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知各位大牛有没有兴趣~

    原理很简单:
    1、本地机器的DNS服务器设为127.0.0.1;
    2、本地运行xdns,将本机的DNS请求包数据每个字节取反发送到墙外的xdns;
    3、墙外的xdns将包再次取反数据包后向8.8.8.8之类的DNS以请求报文,将收到的结果取反然后返回给本地的xdns;
    4、本地的xdns再次将数据包取反后返回给最原始的请求者。

    经测试 https://www.facebook.com 可以正常访问!
    Twitter无法访问,我看过结果,返回的twitter服务器IP直接被封了。。。
    G+和google主站貌似也无压力~

    详情可以参见我的项目:https://github.com/isayme/xdns
    20 条回复    1970-01-01 08:00:00 +08:00
    adspe
        1
    adspe  
       2013-04-06 18:13:23 +08:00
    好主意。
    isayme
        2
    isayme  
    OP
       2013-04-06 19:03:10 +08:00
    @adspe 哈哈~ 多谢支持
    jasontse
        3
    jasontse  
       2013-04-06 19:31:07 +08:00 via iPad
    为什么要在墙外搭建xdns这个门槛呢?用tcp请求8.8.8.8有什么缺点吗?
    AstroProfundis
        4
    AstroProfundis  
       2013-04-06 19:35:40 +08:00
    @jasontse +1

    在墙外完成解析会造成使用了CDN的网站十分悲剧
    isayme
        5
    isayme  
    OP
       2013-04-06 19:37:21 +08:00
    @jasontse GFW可以监听到你与8.8.8.8的通信数据包,然后可以伪造数据包发给你,同样可以污染你。只是一般机器的DNS都是UDP报文,GFW可能现在只会污染UDP查询,没有处理TCP的DNS查询~
    isayme
        6
    isayme  
    OP
       2013-04-06 19:39:49 +08:00
    @AstroProfundis 这个。。。我不懂CDN,难道墙外和墙内与8.8.8.8通信有什么不同么?
    jasontse
        7
    jasontse  
       2013-04-06 19:44:50 +08:00 via iPad
    @isayme 过dns污染是简单的科学上网方法 不用在意窃听
    tcp确实不会污染
    AstroProfundis
        8
    AstroProfundis  
       2013-04-06 19:54:54 +08:00
    @isayme 唔...怎么说呢,很多CDN都是基于DNS查询时客户端所在的地理位置(一般应该是用来源IP判断,细节没有研究过)来返回相应地区最快的一个/一组IP的,比如你在天朝和在欧洲查询 google.com 出来的就不是同一个IP段的地址,再比如 iTunes 的下载加速也是基于类似的原理。

    所以从境外发起查询,对应 xdns 的话就是从公共 DNS 服务器看来实际的查询是由 xdns 的服务端所在IP发起的,所以返回的IP是对于服务器来说最好的,而很多情况下这个IP对天朝用户来说就是个杯具...
    另一方面,使用的公共 DNS 在海外的话,这台服务器本身缓存的IP数据就是上游(网站自己的服务器)经过优化过后最适合该地区的IP, 同理,美帝访问最快的节点从天朝过去的效果应该不难理解...

    当然,可以通过选择中国附近,比如香港、台湾、日本等地的公共 DNS 服务器作为上游来一定程度改善这个问题,但是效果比起直接用本地 ISP 的服务器还是有一定差距,所以我感觉只是出于规避污染这一个目的的话,用 TCP 查询的效果应该是最好的,就像楼主之前也说到了的,因为用 TCP 的比例很小,基本也不用担心被干扰。(另外有个问题有疑惑,印象中 TCP 貌似是有验证的,真的可以像 UDP 那样简单的污染吗?)
    isayme
        9
    isayme  
    OP
       2013-04-06 20:14:26 +08:00
    @jasontse 可能目前没有做TCP的污染吧~ 毕竟TCP的包也是可以伪造的

    @AstroProfundis 多谢科普CDN~ TCP有个握手包,但说到底还是简单的数据包,握手是为了验证确保对方在线(UDP是直接发包,不管对方在不在),所以GFW完全可以在你握手之后的TCP数据请求包之后给你回一个符合TCP协议头的报文,甚至可以直接回你一个FIN包,结束这次TCP通信。
    jasontse
        10
    jasontse  
       2013-04-06 20:15:51 +08:00 via iPad
    @AstroProfundis tcp污染我目前只想到一种方法 就是nat转发到另一台服务器 挺暴力的
    AstroProfundis
        11
    AstroProfundis  
       2013-04-06 20:19:41 +08:00
    @isayme 嗯嗯,了解了,不过目前看来墙应该没有那么高兴致去对付小众的东西,至少目前 TCP 查询是不会被污染的;另外在53以外端口的 UDP 查询也不会被污染

    @jasontse 对,我也只能想到这个,真要这样干还是有点蛋疼...
    jasontse
        12
    jasontse  
       2013-04-06 20:30:17 +08:00 via iPad
    @AstroProfundis nat有一个致命的缺点它会暴露后面递归服务器的IP地址 从域名的ns服务器上就可以查到:-)
    isayme
        13
    isayme  
    OP
       2013-04-06 20:36:01 +08:00
    @AstroProfundis 貌似还真可以直接改个端口就行。。。。虽然是同样的报文,但是估计GFW没有那么智能,对DNS它只会管53端口的。。
    isayme
        14
    isayme  
    OP
       2013-04-07 07:20:17 +08:00
    @AstroProfundis 又想了下,如果用53以外的端口,那么本地的服务端和墙外的服务端就要开不同的监听端口(如开54端口,那么本地还是53,对外连54,而墙外的开54端口,对外连53端口),这样反而会导致配置项多。
    fqrouter2
        15
    fqrouter2  
       2013-04-07 10:43:30 +08:00
    我在此文 (http://fqrouter.tumblr.com/fqrouter) 中详细描述了DNS的问题
    非标准端口: 工作正常
    DNS over TCP: 只是一般不屑于封你, dig +tcp @8.8.8.8 dl.dropbox.com 你试试看
    丢弃错误的应答: 工作正常
    AstroProfundis
        16
    AstroProfundis  
       2013-04-07 11:17:07 +08:00
    @isayme 本地没必要开服务端啊...不是只有服务器才需要监听端口么... 你试试 dig twitter.com @ns-us-1.wobu.se -p 233
    powerfj
        17
    powerfj  
       2013-04-07 14:36:06 +08:00
    哥用nodejs做了一个dnsproxy+socket5proxy,proxy里面设置哪些域名被墙了,如果被墙的域名都到外面获取dns或者做socket5请求,facebook,twitter还有youtube都没问题..不敢多用,怕被封..
    isayme
        18
    isayme  
    OP
       2013-04-07 19:04:14 +08:00
    @fqrouter2
    @powerfj 两位大牛 膜拜!
    code4craft
        19
    code4craft  
       2013-05-31 19:56:33 +08:00
    gfw的DNS污染只是旁路一条错误结果,自己本地用个程序筛掉就行了,没有必要在墙外建DNS跳板的(至少在我这里的网络是这样),我写过一个本地DNS服务器做这个事:
    github:https://github.com/code4craft/blackhole Java写的,主要代码在antipollution包里
    博客:http://my.oschina.net/flashsword/blog/110276
    isayme
        20
    isayme  
    OP
       2013-06-01 08:31:52 +08:00
    @code4craft 哈哈 有个人和我说西厢计划第三季也是类似的方法,你们的方法更有针对性~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3082 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 13:46 PVG 21:46 LAX 05:46 JFK 08:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86