|
0x00 定义
DNS( Domain Name System)是“域名系统”的英文缩写,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53[1]。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
开始时,域名的字符仅限于ASCII字符的一个子集。2008年,ICANN通过一项决议,允许使用其它语言作为互联网顶级域名的字符。使用基于Punycode码的IDNS系统,可以将Unicode字符串映射为有效的DNS字符集。因此,诸如“XXX.中国”、“XXX.美国”的域名可以在地址栏直接输入并访问,而不需要安装插件。但是,由于英语的广泛使用,使用其他语言字符作为域名会产生多种问题,例如难以输入,难以在国际推广等。
简单来说就是一个将域名翻译成ip地址的系统。
总结以下几点:
1)映射域名与IP
2)使用TCP/UDP:53端口
3)每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符
4)早期的DNS是只支持英文域名解析。在IDNs(国际化域名Internationalized Domain Names)推出以后,为了保证兼容以前的DNS,所以,对IDNs进行punycode转码,转码后的punycode就由26个字母+10个数字,还有“-”组成。
例如:企鹅.com,用Punycode转换后为:xn--hoq754q. com
中国.cn,用Punycode转换后为:xn--fiqs8s. cn
0x01 域名结构
DNS 系统采用的是分布式的解析方案,整个 DNS 架构是一种层次树状结构,这个树状结构称为 DNS 域名空间,如图:
树状结构最顶层称为根域,用 “.” 表示,相应服务器称为根服务器,整个域名空间解析权都归跟服务器所有,但根服务器无法承担庞大的负载,采用“委派”机制,在根域下设置了一些顶级域,然后将不同顶级域解析权分别委派给相应的顶级域服务器,如将 com 域 的解析全委派给 com 域服务器,以后但凡跟服务器收到以 com 结尾的域名解析请求,都会转发给com 域服务器,同样道理,为了减轻顶级域的压力,又下设了若干二级域,二级域又下设三级域或主机
根域 位于域名空间最顶层,一般用一个 “.” 表示
顶级域 一般代表一种类型的组织机构或国家地区,如 net、com、org、edu、gov、mil、cn、jp、hk
二级域 用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,如 .cn 顶级域名下面设置的二级域名:.com.cn、.net.cn、.edu.cn …
子域 二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名
主机 主机位于域名空间最下层,就是一台具体的计算机,如 www、mail、都是具体的计算机名字,可用www.sina.com.cn.、mail.sina.com.cn. 来表示,这种表示方式称为 FQDN (完全合格域名),也是这台主机在域名中的全名
0x02 DNS记录
转载了一篇比较全的DNS记录说明,可以看一下
下面说一下比较常见一些记录信息
A/AAAA、CNAME、MX、NS、TXT、SPF
下面挨个介绍一下。
A记录/AAAA记录
IPv4:
- 示例:ns1.exmaple.com. IN A 198.51.100.2
- 解释:【domain】 IN A 【IP地址】
IPv6:
- 示例:ns1.exmaple.com. IN AAAA 8fe0::8f61:ac8:30cd:a16e
- 解释:【domain】 IN AAAA 【IP地址】
※IN的意思是「Internet」,不是IN/OUT的「IN」。
干什么用呢?
我们在浏览器输入域名后,需要向DNS服务器请求,找到这个域名对应的服务器IP。上面示例就是这么一条记录。
虽然域名和IP都可以变更,但是相比来说域名变更更加简单和随意。所以当网站更换自己域名的时候,就需要修改这条记录。
CNAME
- 示例:sub.example.com. IN CNAME hoge.example.com.
- 解释:【別名】 IN CNAME 【原名】
干什么用呢?
给某一个domain起多个名字。
类似于,jd.com,jd360.com,jingdong.com虽然是不同名字的域名,但是可以指向同一个原名jd.com。可以让企业的对外展示更加灵活。
举例:
jd360.com IN CNAME jd.com
jingdong.com IN CNAME jd.com
jd.com IN A 123.123.123.123 (这条是A记录例子)
MX记录
- MX记录(Mail Exchange):邮件路由记录
在DNS上设定,用于将邮箱地址@符号后的域名指向邮件服务器。
- 示例:example.com. IN MX 10 mail.example.com.
- 解释:【domain】 IN MX 【优先度】 【邮件服务器】
干什么用呢?
当发信侧服务器给受信侧发邮件时,首先会要求DNS服务器解析受信侧邮箱地址中@后面部分的域名对应的MX记录(DNS的写法可以理解成example.com 的A记录下面,有一行上面示例的MX记录,当然邮箱服务器也有对应的A记录)。
这样,邮件就直接发到对应的MX记录的A记录里的IP了。
例子:给test@exmaple.com发邮件的话,
DNS会返回给发信侧198.51.100.3这个IP
exmaple.com. IN A 198.51.100.2
example.com. IN MX 10 mail.example.com.
mail.example.com. IN A 198.51.100.3
※如果是普通用户通过【exmaple.com】浏览主页,那么DNS继续返回 198.51.100.2 。这个其实也需要DNS判断请求服务器是邮件服务器还是普通的访问。
NS记录
- 指定域名解析服务器。
- 示例:example.com. IN NS ns1.example.com.
- 解释:【domain】 IN NS 【DNS服务器】
干什么用呢?
指定该域名由哪个DNS服务器来进行解析。
TXT记录
- 示例:ns1.exmaple.com. IN TXT "联系电话:XXXX"
- 解释:【domain】 IN TXT 【任意字符串】
干什么用呢?
一般指某个主机名或域名的说明,或者联系方式,或者标注提醒等等。
SPF记录
SPF记录是TXT记录的一个运用。后面的备注需要按照指定的格式才能有效。
- 示例:exmaple.com. IN TXT "v=spf1 ip4:198.51.100.1 ~all"
- 解释:【domain】 IN TXT 【送信侧邮件服务器确认规则】
干什么用呢?
从发信侧服务器设定到DNS上的这条记录中,读取信息,判断发信侧是否合法。
如果不符合规则,那么按照约定的规则处理掉。
跟MX记录正好相反。
MX:我是收件服务器,你找我时,请参考我设定到DNS服务器上的MX记录。
SPF:我是发信服务器,你接受邮件时,请参考我设定到DNS服务器上SPF规则。如果不是我发的信,你可以删掉或者接收。
SPF记录规则
-
格式:
版本 空格 定义 空格 定义 (空格 定义的循环)
跟着例子看的话,比较好理解。
example.com. IN SPF "v=spf1 ip4:192.0.2.1 -all"
- v=spf1 是版本。只出现一次。
- ip4:192.0.2.1 第一个定义
- -all 第二个定义
-
定义的格式。
- 种类
| all | ip4 | ip6 | a | mx | ptr | exists | include|
- 前缀
"+" Pass(通过)
"-" Fail(拒绝)
"~" Soft Fail(软拒绝)
"?" Neutral(中立)
-
定义测试
测试时,将从前往后依次测试每个定义。
如果一个定义命中了要查询的 IP 地址,则由相应定义的前缀决定怎么处理。默认的前缀为+。
如果测试完所有的 定义也没有命中,则结果为 Neutral。
结果及处理方法一览
| 结果 | 说明 | 服务器处理办法 |
| Pass |
发件IP是合法的 |
接受来信 |
| Fail |
发件 IP 是非法的 |
退信 |
| Soft Fail |
发件 IP 非法,但是不采取强硬措施 |
接受来信,但是做标记 |
| Neutral |
SPF 记录中没有关于发件 IP 是否合法的信息 |
接受来信 |
| None |
服务器没有设定 SPF 记录 |
接受来信 |
| PermError |
发生了严重错误(例如 SPF 记录语法错误) |
没有规定 |
| TempError |
发生了临时错误(例如 DNS 查询失败) |
接受或拒绝 |
0x03DNS服务器类型
因特网上的域名服务器用来存储域名的分布式数据库,并为DNS客户提供域名解析。它们也是按照域名层次来安排的,每一个域名服务器都只对域名体系中的一部分进行管辖。根据它们的用途,域名服务器有以下几种不同类型。
(1)主域名服务器:负责维护这个区域的所有域名信息,是特定的所有信息的权威信息源。也是说,主域名服务器内所存储的是该区域的正本数据,系统管理员可以对它进行修改。从DNS域名空间可以看出,根域是最大的,但因为他的工作方式是委派,委派给顶级域进行解析,所以其实主域名服务器就是顶级域服务器
(2)辅助域名服务器:当主域名服务器出现故障、关闭或负载过重时,辅助域名服务器作为备份服务提供域名解析服务。辅助域名服务器中的区域文件内的数据是从另外一台域名服务器复制过来的,并不是直接输入的,也是说这个区域文件只是一份副本,这里的数据是无法修改的。
(3)缓存域名服务器:可运行域名服务器软件但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的回答,一旦获取一个答案,将它放在高速缓存中,以后查询相同的信息时用它予以回答。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。
(4)转发域名服务器:负责所有非本地域名的本地查询。转发域名服务器接到查询请求时,在其缓存中查找,如找不到把请求依次转发到指定的域名服务器,直到查询到结果为止,否则返回无法映射的结果。
0x04 域名解析过程
域名解析总体可分为一下过程: (1) 输入域名后, 先查找自己主机对应的域名服务器,域名服务器先查找自己的数据库中的数据. (2) 如果没有, 就向上级域名服务器进行查找, 依次类推 (3) 最多回溯到根域名服务器, 肯定能找到这个域名的IP地址 (4) 域名服务器自身也会进行一些缓存, 把曾经访问过的域名和对应的IP地址缓存起来, 可以加速查找过程
具体过程可描述如下: 1. 主机先向本地域名服务器进行递归查询 2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询 3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址 4. 本地域名服务器向顶级域名服务器进行查询 5. 顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的IP地址 6. 本地域名服务器向权限服务器进行查询 7. 权限服务器告诉本地域名服务器所查询的主机的IP地址 8. 本地域名服务器最后把查询结果告诉主机
上文我们提出了两个概念:递归查询和迭代查询 (1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机 (2)迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。
通俗地说,递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。 迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。
下面采用了Amazon的例子
- 用户打开 Web 浏览器,在地址栏中输入 www.example.com,然后按 Enter 键。
- www.example.com 的请求被路由到 DNS 解析程序(即本地DNS服务器),这一般由用户的 Internet 服务提供商 (ISP) 进行管理,例如有线 Internet 服务提供商、DSL 宽带提供商或公司网络。
- ISP 的 DNS 解析程序将 www.example.com 的请求转发到 DNS 根名称服务器。
- ISP 的 DNS 解析程序再次转发 www.example.com 的请求,这次转发到 .com 域的一个 TLD 名称服务器。.com 域的名称服务器使用与 example.com 域相关的四个 Amazon Route 53 名称服务器的名称来响应该请求。
- ISP 的 DNS 解析程序选择一个 Amazon Route 53 名称服务器,并将 www.example.com 的请求转发到该名称服务器。
- Amazon Route 53 名称服务器在 example.com 托管区域中查找 www.example.com 记录,获得相关值,例如,Web 服务器的 IP 地址 (192.0.2.44),并将 IP 地址返回至 DNS 解析程序。
- ISP 的 DNS 解析程序最终获得用户需要的 IP 地址。解析程序将此值返回至 Web 浏览器。DNS 解析程序还会将 example.com 的 IP 地址缓存 (存储) 您指定的时长,以便它能够在下次有人浏览 example.com 时更快地作出响应。有关更多信息,请参阅存活期 (TTL)。
- Web 浏览器将 www.example.com 的请求发送到从 DNS 解析程序中获得的 IP 地址。这是您的内容所处位置,例如,在 Amazon EC2 实例中或配置为网站终端节点的 Amazon S3 存储桶中运行的 Web 服务器。
- 192.0.2.44 上的 Web 服务器或其他资源将 www.example.com 的 Web 页面返回到 Web 浏览器,且 Web 浏览器会显示该页面。
来源:https://www.cnblogs.com/alummox/p/11173449.html |