美文网首页
dns小科普

dns小科普

作者: 与狼共舞666 | 来源:发表于2022-08-20 21:09 被阅读0次

    目的

    掌握DNS的两种工作方式:递归查询和迭代查询,以及它们的差别。了解DNS包中的A记录、AAAA记录、PTR记录、SRV记录和CNAME记录以及DNS的循环工作(round-robin)模式。了解DNS的缺点和存在的风险。

    原理

    当我们在浏览器上输入一个域名时,其实不是根据该域名直接找到服务器,而是先用DNS解析成IP地址,再通过IP地址找到服务器。有时甚至不输入任何域名,也会用到DNS。比如用域账号登录操作系统时,就是依靠DNS找到 域控制器(Domain Controller简写为DC)来验证身份。DNS在解析IP地址时有两种工作方式:递归查询和迭代查询。递归查询的特点是客户端完全依赖服务器直接返回的结果,并不知道服务器是如何做到的。迭代查询的特点是客户端先查到根服务器的地址,再从服务器查到权威服务器,然后再从权威服务器查······直到返回想要的结果。

    DNS的循环工作模式是一个很有用的特性,可以用于负载均衡。比如某个网站有10台Web服务器,管理员就可以在DNS里创建10个同名记录指向这些服务器的IP。由于不同客户端查到的结果顺序不同,而且一般会选用结果中的第一个IP,所以大量客户端就会被均衡地分配到10台Web服务器上。

    步骤]

    注意:本节部分实验操作需要连接互联网,如果不具备互联网条件可以跳过相关内容,或者自行在有互联网连接的电脑上使用wireshark做实验。

    当前操作机的IP为192.168.1.123,DNS服务器的IP为192.168.1.1。若要查看这两个IP地址,可以打开命令行,输入“ipconfig /all”查询,图1为查询的部分结果。

    image.png
    在打开www.example.com的过程中抓包,就可以看到图2所示的结果,在图中红框处输入“dns”能迅速查询出所有使用DNS协议的记录。
    image.png
    用文字来表达,过程就是这样的:

    操作机:“请问www.example.com的A记录是什么?”
    服务器:“是93.184.216.34。”
    获得IP后,就可以和93.184.216.34建立HTTP连接了。这个例子中的A(Address)记录,指的是从域名解析到IP地址,DNS包中还会有很多其他类型的记录。

    AAAA记录:用来将域名解析到IPv6地址。
    PTR记录:与A记录功能相反,是从IP地址解析到域名。
    SRV记录:它指向域里的资源,可以用来查询域内有哪些域控制器,Windows的域管理员会特别关心SRV记录。
    CNAME记录:又称 Alias记录,就是别名的意思。它可以将多个域名定义到一个IP地址上。
    图3是依次访问sports.sina.com.cnnews.sina.com.cnwww.sina.com.cn时抓包的结果。其中包括了A记录、AAAA记录、PTR记录和CNAME记录。观察CNAME记录可以发现,那三个域名都指向了同一个服务器,如图红框中所示。当客户查询那三个域名时,DNS服务器通过spool.grid.sinaedge.com找到IP地址,然后把结果返回客户端。直接把IP地址分配给那三个域名也是可以的,但如果某一天要改变IP地址,就不得不在DNS上修改3项纪录了。而在使用别名的情况下,只需要修改1项IP就行了。别名的使用节省了管理时间,站长们会喜欢这个功能。

    image.png
    前面解析www.example.com时,用到了DNS服务器192.168.1.1。由于使用的是无线路由,且路由器内置了DNS转发器,因此分配到的DNS就是路由器自身。这个服务器是不权威的,事实上就连电信等宽带提供商的DNS服务器也不是权威的。所谓“不权威”,不是指它们不值得信任,而是因为它们本身不包含DNS的注册信息。当收到新的DNS查询时,它们要从权威DNS服务器(属于一个叫ICANN的非营利性组织)那里查到结果,然后再返回给客户端。

    在本节第一次抓包时,只知道不权威DNS服务器成功解析了www.example.com,却不知道它是怎么做到的。有可能是在收到请求后,查询了权威DNS服务器,然后返回结果,这种方式称为递归查询。

    除了递归之外,还有迭代查询方式,使用这个查询方式需要用到“dig”命令。该命令全称为Domain Information Groper,是一个Linux下用来DNS查询信息的工具,与nslookup类似,但比nslookup功能更强大。安装完成后,在命令行输入“dig”命令加上“+trace”参数可以强制使用迭代查询。图4为查询过程和结果,可见迭代查询要比递归查询麻烦得多,但结果与使用递归查询相同。

    image.png
    迭代查询的网络包如图5所示,从中可以看到经过若干个查询才得到最终的结果(递归方式只需要一个查询)。分析前面的包还可以得到域名服务器a.iana-servers和b.iana-servers的IP:199.43.133.53。
    image.png
    DNS有一个很有用的特性,当我们连续两次在命令行输入“nslookup www.baidu.com”时,抓到的网络包如图6所示。可见两次返回的IP地址是一样的,但顺序却是相反的,如果第三次执行“nslookup”,那么结果又会和第一次一样,这就是DNS的循环工作(round-robin)模式。它可以广泛应用于负载均衡,随着 分布式系统的流行,这个特性的应用场景将会越来越多。
    image.png

    总结

    我们每天都在使用DNS,即使未必能意识到它的存在。如果有一天突然失去DNS,世界将会立即陷入混乱。不过虽然DNS技术的功能非常强大,但它也有许多缺陷:

    • DNS上存在山寨域名。比如招商银行的域名是www.cmbchina.com,但是www.cmbchina.com.cnwww.cmbchina.cn却不一定属于招行。如果这两个域名被指向外表和招行一样的钓鱼网站,就可能会骗到部分用户的银行账号和密码。
    • DNS服务器被恶意修改也是很危险的。比如登录招行网站时虽然用了正确域名www.cmbchina.com,但由于DNS服务器是黑客控制的,很可能解析到一个钓鱼网站的IP。
    • 即便配了正规的DNS服务器,也有可能中招。比如遭遇 缓冲投毒之后,正规的DNS服务器也会变得不可信。
    • DNS除了能用来欺骗,还能当做攻击性武器。例如DNS放大攻击,利用回复包比请求包大得多的特点,黑客只要控制少量电脑就能把一个大网站拖垮。

    相关文章

      网友评论

          本文标题:dns小科普

          本文链接:https://www.haomeiwen.com/subject/wxymgrtx.html