Dns诊断方法

最近一直被vpn的各种问题所烦恼着。

在家里测试vpn连接google的时候,老是连接不上,反复装了2-3遍,调整参数等各种操作,还是不行。

最后都快绝望了,去下载了vpn的源代码,对照着找问题,代码没有看两天,倒是把这个问题给解决了。

由于晚上看了一晚上的代码,和实际开着pptpddebug模式对应着跑,查看日志输出,发现连接表现正常,就是连不上google。没办法只好第二天到公司再试一下在意料之外的,连上vpn之后,就可以直接连上google,整个流程如牛奶般丝滑,我就呆呆的看着这个过程发生,此时我意识到了,问题不出在我服务器上面,是家里的电脑配置问题。再思考家里和公司的区别在哪,最后我想到了几个区别:

 1 家里的电脑是新版的拯救者 才装上最新的win10系统 老版本的win10装上后报错,直接在巨硬网上下载了热乎的版本。安装后发现在操作和激活方面跟之前的版本还是有着很大区别。

 2 最近新搬了家,宽带从铁通变成了联通,网速那是杠杠的,游戏延迟很低(非广告,而且贵)。

考虑到以上两个问题关键因素之后 我开始了我苦逼的debug之旅。首先我们从书本中知道,当你访问一个具体的url的时候,实际发生了一下几项动作

1         url中提取 web站点地址

2         web站点地址 转换为ip地址

3         浏览器连接到ip地址上,请求对应资源

4         服务器返回对应资源,浏览器渲染展示。

想到了以上动作 我开始一点一点的尝试问题出在哪个环节。

于是我使用了最最最常用工具ping来测试第2步,先在我的远程服务器上ping www.google.com 得到一个ip简称为A,再在我本机上ping 得到一个ip简称为B

 

我们要知道,一个大的网站,为了提升访问速度,通常都做了cdn和多机负载均衡。基本上都是一个web站点对应多台服务器,也就是多个ip的。所以AB不想等,这对于我们来说,是很正常的事情。

 

但是我们要知道虽然AB不想等,但是对于一个客户端来说,都应该是可以访问通过的,只是访问速度的不同而已。于是我就在服务器上访问B pingB,在本机上访问A,结果本机上能测试通过,服务器上的不行,也就是说B地址其实是无效的。

 

但是为什么在我查找google的时候,会有B地址的出现呢?我们首先要知道,我们要翻墙的本质原因就是因为中国墙的存在。在这里我不讨论中国墙存在的是好是坏,我内心是不反对的。因为大部分外国网站都还是可以上的,被禁封的只有那几个网站而已,而且都有站得住脚的理由。不过对于我们来说,还是有需求登陆某些网站。那我们只好自己想办法。我首先是清缓存,再请求,重复这个动作好几遍之后,我发现B地址根本没有变化。这可能就是问题的关键。由于此时我对vpn的作用范围不太了解,不太清楚vpn会不会转发dhcpdns数据包,是采用的本地还是远程的,这些我都不了解。所以我就tracert www.google.com 发现数据包根本发不出去,才确认这个B是个假地址。所以为了探究dns的问题到底出现在哪一部分,我开始了解相关的概念,最快的方式还是去找相关著作的书记来看,所以我果断上了京东搜索关键字dns,一搜就搜到了这篇文章的关键dns的原理和调试,搭建,运行方法的书 DNSBIND》。我便开始果断下单买了一本,10秒就到了我的手里。

 

 

当然都听得出来我是瞎说的,我只是又在百度上找了相关书籍的pdf然后下载了下来查看,在这里我得表扬一下新浪微盘童鞋,这是我用过最好的网盘,没有之一,无需登录,无限速,文档资料多,下载快,完全不是百度网盘那种yyjh能比的。

打开pdf查看果然内容还是很丰富的,补充了我部分缺失的知识点。从中我学习了dns的查看调试技巧,这也是今天写这篇文章的原因,也是要分享的内容,也就是说,上面的话都是废话,看了也不亏,不看也不赚,好了,文章正式开始。

 

  Dns在计算机网络中扮演着极其重要的角色,一般来说,在电脑连上网络之后,遇到第一个有感知的服务那就是dhcp了,此服务提供给客户端ip地址,路由网关和dns服务器地址,其重要性就不在此展开。

       在客户端从dhcp协议中获取到dns服务器地址后,你就可以开始冲浪了。你输入的wwwBaiducom将会被客户端去dns服务器上请求对应的ip地址,然后才会通过网关发送到对应的Ip上进行访问。整个过程看起来dns仿佛是其不显眼的一个过程,但是这个过程所承担的角色是很重要的。中国墙为了ban掉某些网站的访问数据,使用了偷蒙拐骗等各种手段,比如偷(丢掉数据包),蒙(告知目的地不可访问),拐(使dns解析错误,定位到第三方的ip地址),骗(我还没想好怎么说)。—=

在这之中dns解析错误是一种很恶心的方法,与其可以相提并论的那就是防爬虫的蜜罐操作了。Dns协议起的作用很大,但是本身防伪能力全靠良心。显然搞这一套的这方面还是有所缺失,造成的最大的问题,就是中招的人并不一定知道自己中招了,这才是最恶心的。

 

Dns查询分为udp的方式和tcp的方式,一般终端对服务器是使用udp,服务器对服务器是使用的tcpTcp还是有着一定的防伪能力的,但是udp简直是傻白甜,明码的数据想改就改。

整个dns服务器构架为一颗树,自顶而下的查询方式,分别对应这域名的长短,比如www.google.com 这个域名,顶级服务器只记录了.com是由它下面那个节点在维护,然后告诉查询者,你去对应的服务器进行第二次查询。然后以此查询到了.google.com  www.google.com 这样通过进行多次查询dns的一种查询方式。于此对应的还有递归查询。

于此我们知道了dns出现的问题是很常见的,中国墙的dns污染,分布于中国dns服务器上的错误数据导致的此问题。就是故意的错误的数据.导致访问被ban的网址时候解析错误。要想规避这个问题就得把受到污染的dns服务器从本地查询列表中删除我在家里测试的时候,使用了8.8.8.8还是会失败,直到将对应关系写到了hosts文件之后才能正常访问,但是这样的操作太麻烦而且有手动更新的需求。不是一种良好的方法,所以我要先弄清楚问题出现的位置。学习了该书之后 了解到了nslookup命令的使用方式。Nslookup是用来查看和调试dns相关配置的   nslookup www.google.com 可以输出从本地默认配置的dns得出的ip地址和dns服务器地址,从这里我可以看出到底是不是ip地址的问题还是dns服务器的问题。今天就写到这,收工回去调试。错误的数据