长城宽带劫持DNS以及绕过

问题发现

研究生招生考试网站上不去,一开始以为是教育部吃屎了,后来才发现同学可以上去,马上换到手机流量登录正常。

  • 查看路由器配置发现路由器配置的dns没什么毛病
114.114.114.114 //114 dns
8.8.8.8   // google dns

加上最近91也上不去,学习之余都没法放松,我觉得出了一些问题,遍开始一顿测试…

测试方法

nslookup

  • 清理dns缓存(每次)
➜  ~ sudo killall -HUP mDNSResponder #OS X
  • nslookup测试
➜  ~ nslookup www.baidu.com    

Server:		114.114.114.114      
Address:	114.114.114.114#53   //默认114dns,貌似正常

Non-authoritative answer:  //非权威相应
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com
Address: 111.13.100.91
Name:	www.a.shifen.com
Address: 111.13.100.92

没看出什么毛病继续测试

➜  ~ nslookup baidu.com dns.baidu.com 
Server:		dns.baidu.com
Address:	202.108.22.220#53

Name:	baidu.com     //正常响应
Address: 111.13.101.208
Name:	baidu.com
Address: 123.125.114.144
Name:	baidu.com
Address: 220.181.57.217

好像还是挺对,继续

➜  ~ nslookup baidu.com ns4.baidu.com
Server:		ns4.baidu.com
Address:	220.181.38.10#53

Non-authoritative answer:
Name:	baidu.com
Address: 111.13.101.208
Name:	baidu.com
Address: 220.181.57.217
Name:	baidu.com
Address: 123.125.114.144

发现毛病了,我明明用的百度的dns为什么会返回非权威响应!

让我们换成手机流量来试一下相同的测试

➜  ~ nslookup baidu.com ns4.baidu.com
Server:		ns4.baidu.com
Address:	220.181.38.10#53

Name:	baidu.com    //正常了
Address: 111.13.101.208
Name:	baidu.com
Address: 123.125.114.144
Name:	baidu.com
Address: 220.181.57.217

果然有猫腻!然后我瞎编了一个dns服务器,居然还特么能查出结果

➜  ~ nslookup baidu.com 12.34.56.78  
Server:		12.34.56.78    //呵呵呵
Address:	12.34.56.78#53

Non-authoritative answer:
Name:	baidu.com
Address: 220.181.57.217
Name:	baidu.com
Address: 123.125.114.144
Name:	baidu.com
Address: 111.13.101.208

正常应该是如下这样

➜  ~ nslookup baidu.com 12.34.56.78
;; connection timed out; no servers could be reached

所以估计是长城宽带把所有的dns请求都拦掉了,然后换成他们的查询结果,MMP!!!也就是说你修改路由器的配置一点卵用没有

快速检测

在网上找到一个办法快速检测是否你家的网络的dns遭到劫持

➜  ~ nslookup whether.114dns.com 114.114.114.114

这是114家自己的黑科技,如果真的是通过114.114.114.114这台dns服务器来查询whether.114dns.com的结果是会返回给你一个公网地址的,否则会给你个回环地址,如下:

➜  ~ nslookup whether.114dns.com 114.114.114.114                        
Server:		114.114.114.114
Address:	114.114.114.114#53

Non-authoritative answer:
Name:	whether.114dns.com
Address: 58.217.249.139   //正常
➜  ~ nslookup whether.114dns.com 114.114.114.114
Server:		114.114.114.114
Address:	114.114.114.114#53

Non-authoritative answer:
Name:	whether.114dns.com
Address: 127.0.0.1    // 妈蛋

绕过

经过热心的网友提示,发现运营商们大部分都是劫持的udp53的dns查询流量,而没有动tcp的流量,所以尝试一下:nslookup -vc 可以强制使用tcp解析域名

➜  ~ nslookup -vc whether.114dns.com 114.114.114.114
Server:		114.114.114.114
Address:	114.114.114.114#53

Non-authoritative answer:
Name:	whether.114dns.com
Address: 58.217.249.139

果然可以,所以想办法让你的dns流量使用tcp协议咯

  • liunx下解决方案
git clone git://github.com/heiher/hev-dns-forwarder

没时间研究了,有兴趣的自行研究下哈

乱象

  • 网友有个记录挺有意思,traceroute 8.8.8.8,结果发现上一跳是个10开头的内网
  • 劫持dns,伪造网速,投放广告,虽然发现这些应该都已经持续很久了,行业中也应该都是默许的规矩,投诉也没什么用,不过欺骗消费者仍是一个无耻的行为!!!
  • 关于dns还有好多可以说的,有空继续