DNS的备忘

最近稍微深入的了解了一下DNS,本文记录过程中的一些知识点作为备注。

1. 权威应答or非权威应答

在用nslookup来查询域名的DNS时有时候会出现“Non-authoritative answer“的情况。其现象如下:

lxg@lxg-ThinkPad-X240:~$ nslookup baidu.com
Server:     127.0.1.1
Address:    127.0.1.1#53

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

这里我们看到查询的结果显示这是一个Non-authoritative answer,那么我能信任这次的查询结果吗?

权威和非权威应答是根据DNS数据包的flags标记中的AA位来判断的:

什么情况下返回的是权威应答,什么情况返回的是非权威的应答呢?我理解就是查询的时候选择的nameserver如果不是直接管理该查询域名那么返回的就是非权威应答。譬如/etc/resolv.conf中配置的nameserver为192.168.1.1,这个IP是公司自己搭建的nameserver,此时nslookup baidu.com那么公司搭建的这个域名服务器肯定是不能直接解析(也就是不直接管理)baidu.com的,它是通过递归解析或者从自己的缓存cache中获得baidu.com这个域名的IP的,此时返回的就是非权威应答。

lxg@lxg-ThinkPad-X240:~$ nslookup baidu.com 119.75.219.82
Server:     119.75.219.82
Address:    119.75.219.82#53

Name:   baidu.com
Address: 111.13.101.208
Name:   baidu.com
Address: 123.125.114.144
Name:   baidu.com
Address: 180.149.132.47
Name:   baidu.com
Address: 220.181.57.217

上面这个执行nslookup的时候我指定了nameserver,没有用系统默认的/etc/resolv.conf中配置的nameserver,最后查询出来的结果就是权威的应答。因为119.75.219.82这个nameserver是baidu.com的primary name server

从上面的这两个查询结果来看最后查询的结果其实是一致的,也就是说非权威的应答并不是不可信的,非权威的意思就是说:我的应答不是权威的,是我通过其它nameserver查询到的。

2. EDNS(扩展DNS)

不知道大家有注意过没,大部分的DNS服务器没有超过13台(当然其实不止13台,后面其实是一个集群)。这是为什么呢?我猜这是跟DNS的UDP数据包长度不能超过512字节有关,DNS规定UDP数据包(不包括UDP头部)不能超过512,如果超过则会被截断(设置TC标志位)。

DNS大概在1983年被定义,随着时间增长我们对DNS的需求在不断增加,而且Internet也变得越来越复杂和多样,在1983年定义的DNS规格(RFC 1035RFC 1034)已经不能满足我们对DNS的需求。于是,RFC 2671提出了一种扩展的DNS机制,在RFC 2671中就“举例”描述了一种扩展的DNS机制EDNS0,用来打破前面我们提到的UDP 512字节的限制。

关于EDNS的更多内容可以参考:EDNS: What is all about?使用 DNS 的扩展名机制 (EDNS0)EDNS

3. DNSSEC(DNS安全扩展)

DNS协议跟HTTP协议一样,是Internet的重要组成部分,必然是”黑客”重点攻击的地方。在DNS建立之初也没有考虑协议的安全性,随着Internet的发展DNS协议的安全性问题也越来越突出,此时就不得不考虑DNS协议的安全性了,DNSSEC就是为了加强DNS协议的安全性被提出来的。

DNSSEC是在保持DNS协议的兼容性前提下加入的一种扩展,可以理解为HTTP中的安全扩展HTTPS。

DNSSEC的详细内容可以参考:how-dnssec-worksUnderstanding DNSSECDNSSEC安全技術簡介

时间: 2024-09-21 10:42:16

DNS的备忘的相关文章

linux下常用命令备忘

转自:Linux 命令集锦 linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl +M -i4 如果退格键变成了:"^h". 终端连接unix删除退格键,按住CTL键同时按delete Linux搜索 # find / -name "xxx.conf" 查看linux是32位还是64位的命令 #file /sbin/init #getconf LONG_BIT #getconf -a 在Linux和Windows下都可以用nslo

Nmap备忘单:从探索到漏洞利用(Part 4)

这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下防火墙的一些基础知识以便绕过它. 什么是防火墙? 防火墙是用来控制网络访问的软件或硬件.分为以下两类:1.基于主机的防火墙:2.基于网络的防火墙. 基于主机的防火墙 这是在单台主机上运行的软件,用来控制入站流量(从网络向主机)和出站流量(从主机向网络).这些软件安装于操作系统之上,常见例子就是Lin

Nmap备忘单:从探索到漏洞利用(Part 2)

这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫描选项是有一定原因的.它可以在不受防火墙限制的高速网络每秒扫描数千个端口 .同时也是相对不显眼的和隐蔽的,因为它永远不会完成TCP连接. 命令:NMAP -sS 目标 TCP连接扫描 当SYN扫描不可用的时候,TCP连接扫描是默认的TCP扫描类型.这是在用户不具有发送RAW数据包的特权的情况下.不是

RxJava & RxAndroid备忘

"你问我要去向何方,我指着大海的方向" 今天在刷G+的时候看到Dave Smith推荐了一个视频 <Learning RxJava (for Android) by example> 点进去看了一下,原来是位熟悉的"阿三哥",视频封面如下:(没有歧视的意思,不要喷我啊~,为什么感到熟悉?接着往下看) 几乎同时也看到了JetBrains在G+也推荐了篇在Medium上的博文 <RxAndroid And Kotlin (Part 1)> ,然后

工作备忘:cacti&nagios登录密码修改方法

[[email protected]]# mysql -u root -p mysql> use cacti; mysql> select * from user_auth; mysql> update user_auth set password=md5("cactipasswd") where id='1'; 现在cacti登录的新密码就是cactipasswd [[email protected]]# /usr/bin/htpasswd /usr/local/n

备忘-linux文件系统结构

用apache的时候总是要进入/var/www, 用久了开始好奇这些个目录都是派什么用处的,简单整理了一下 /bin 存放二进制命令文件,这个目录下面不允许存在子目录/boot bootloader的静态文件,当然OS的文件也必须在这里/dev 设备文件,MAKEDEV命令可以创建设备/etc 特定主机的配置文件,必须是静态文件,非可执行文件: opt, X11, sgml, xml/home 用户目录 /lib 存放主要的共享库和核心模块/media 可移除媒体的挂载点: floppy, cd

[转]Windows环境下尝试安装并配置PHP PEAR备忘

转自:http://wangye.org/blog/archives/266/ 什么是PEAR 来自百度百科:PEAR 是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写.它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR之于PHP就像是CPAN(Comprehensive Perl Archive Network)之于Perl. 由此可见PEAR是PHP代码的仓库,在这里可以找到很多有用的代码,避免我们重复写一些功能,

Table view 备忘

Table view 备忘 本篇会以备忘为主,主要是一些基础的代理方法和数据源方法具体的优化好点子会后续跟上. Table view的数据源方法 必须实现的数据源方法 // 返回每一行的cell,可以做缓存处理,同样也可能会造成复用问题. func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // tableview 和 cell 都是在s

oracle下 启动subversion命令 及 oracle相关服务启动备忘

linux shell下  svnserve - d -r + 目录   例如:svnserve -d -r /svn 启动 svn服务. 访问svn://192.168.0.120/kjcg 测试. 启动oracle: 一.如何启动数据库实例 1.进入到sqlplus启动实例 [[email protected] ~]$ su - oracle --“切换到oracle用户” 2. Password: [[email protected] ~]$ lsnrctl start  --“打开监听”