DNS:Domain Name System (域名系统)
DNS 是互联网上解决网络中机器命名的一种系统。在网络中,一台主机去访问另外一台主机时,必须要 知道目标主机的IP地址,虽然网络上的节点都可以用IP地址来标识,并且可以通过IP地址被访问。但对 于自然人而言,一组组由数字组成的IP地址,是难以被理解和记忆的。于是设计出了域名系统,用一组 有意义的字符来表示某个特定主机或某个网络,再将网络中主机IP地址和域名之间做成一个映射表。
DNS 就是负责维护主机IP地址和域名映射关系的服务,同时也提供域名解析服务,即人类通过域名访问 某个主机或节点时,由DNS服务将人类可读的域名转换为机器可读的IP地址,再通过IP地址找到对应的 主机。
域名 (Domain Name)
域名,又称网域,顾名思义,是一个域的名称。 是一串用点号分隔的字符,可以用来标识网络中某台主 机或某个节点,由DNS服务维护域名和主机IP地址之间的映射关系,当我们在网络中访问某个域名时, 实际上访问的是该域名对应的IP地址所标识的主机。
FQDN:(Fully Qualified Domain Name)全限定域名
域名是一个域的名称,一个网域或一个节点,可以有多台主机,所以为了精确表示域里面的某台主机, 我们在使用域名时,还需要加上主机名,FQDN指的就是同时带有主机名和域名的名称。
域名的组成
域名由英文字母,数字和英文连字符(-) 组成,且不区分大小写。
域名是分层次的,允许定义子域,子域名与上级域名之间用 . (点号)分隔,最上层节点的域名称为顶级 域名(TLD,Top-Level Domain),第二层节点的域名称为二级域名,依此类推。级别最低的域名写在最 左边,而级别最高的域名写在最右边。每一层级的域名长度不能超过63个字符,多级域名加起来不能超 过255个字符。域名最多可以有127级。
域名的管理
域名由因特网域名与地址管理机构(ICANN,Internet Corporation for Assigned Names and Numbers) 管理,这是为承担域名系统管理、IP地址分配、协议参数配置,以及主服务器系统管理等职能而设立的 非盈利机构。
ICANN为不同的国家或地区设置了相应的顶级域名,这些域名通常都由两个英文字母组成。例如:.uk代 表英国、.fr代表法国、.jp代表日本。中国的顶级域名是.cn,.cn下的域名由CNNIC进行管理。
一级域名:又称顶级域名,可分为三类,一类代表国家和地区(cn,hk,......),一类代表各类组织 (com,edu,......),以及反向域
二级域名:某个具体组织,单位,机构,商业公司或个人使用,需要向域名管理机构申请(付费)才能获得 使用权
二级域名以下的域名,由使用该域名的组织自行分配
主机中DNS客户端配置
当一台主机接入互联网时,在配置网络时,通常有两种方式,一种是从DHCP服务自动获得IP地址,另外 一种是手动指定静态地址;
从DHCP服务自动获取IP时,通常也会自动获得DNS服务器地址,手动配置静态地址时,也需要手动配置 DNS服务器地址;
当用户使用主机 发送/接收 邮件,或浏览网页时,就是由主机上配置的DNS服务器地址负责将域名转换 成对应的IP地址。
Rocky中手动配置的DNS服务器地址
查看Ubuntu 中的DNS
DNS服务解析域名流程
-
当客户端主机决定访问 百度一下,你就知道 这个域名时,首先会查询本机缓存;
-
如果本机缓存没有解析记录,则会向其配置的DNS服务器发起解析请求;
-
DNS代理解析服务器会先查询其缓存是否有这条解析记录,如果有,则直接返回,如果没有,则继 续向上解析;
-
DNS代理解析服务器会向根域名服务器发起解析请求,根域名服务器返回 com 域名的DNS地址;
-
DNS代理解析服务器继续向 com 域名服务器发起解析请求,com 域名服务器返回 baidu.com 域名服务器DNS地址;
-
DNS代理解析服务器继续向 baidu.com 域名服务器发起解析请求,baidu.com 域名服务器返 回 www.baidu.com 主机的IP;
-
DNS代理解析服务器将 www.baidu.com 的IP地址存入本机缓存,再读取缓存,将 IP地址发送给 客户端主机;
-
客户端主机通过IP地址顺利访问 百度一下,你就知道;
注意:DNS服务只负责域名解析,也就是说,DNS服务,只负责返回与域名对应的IP地址,但该IP地址在网络 上是否是可达的,并不由DNS决定
递归查询
是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地 没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。
一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器 本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户 机。
此查询的源和目标保持不变,为了查询结果只需要发起一次查询。
递归算法:客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->但它知道谁知道->他代 为帮客户端去查找-->最后再返回最终结果。
迭代查询
是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地 址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回权 威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,直到返 回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询。
迭代算法:客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->但它知道谁知道并推荐 客户端应该找谁-->客户端自己去找它。
DNS缓存
DNS缓存是将解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意位 置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果。
Windows系统
CentOS系统
Ubuntu系统
DNS服务器里面有两个区域,即 正向查找区域 和 反向查找区域
正向解析:将域名解析成IP地址
反向解析:根据IP地址得到该IP地址指向的域名
hosts文件是一个没有扩展名的系统文件,可以直接用文本编辑工具修改,在该文件中直接定义域名与IP 地址的对应关系,当主机访问某个域名时,会先从hosts文件中寻找与该域名对应的IP地址,如果找到, 则直接请求该IP地址,如果找不到,才会将该域名提交DNS服务请求解析该域名对应的IP地址。
操作系统规定,在进行DNS请求以前,先检查系统自己的Hosts文件中是否有这个域名和IP的映射关系。 如果有,则直接访问这个IP地址指定的网络位置,如果没有,再向已知的DNS服务器提出域名解析请 求。也就是说Hosts的IP解析优先级比DNS要高。
hosts文件是引入DNS服务之前的解析方案
早期的 internet 网络规模非常小,一个hosts文件就可以定义所有的域名与IP地址的映射关系,管理机 构提供该文件下载地址,并定期更新文件内容,以此来反映网络上的变化。
但随着时间的推移,接入 internet 的主机和域名越来越多,通过一个中心文件管理所有域名与IP地址映 射关系己经不再可取,于是便引入了DNS服务
dig:(Domain Information Groper) 域名信息查询工具
dig 命令不会查询本地 hosts文件中定义的域名和IP对应关系
查询结果说明
host 命令可以根据域名查询得到对应的服务器IP地址
host 命令不会查询本地 hosts文件中定义的域名和IP对应关系
nslookup:(name server lookup),一个命令行下的网络工具,主要用来查询DNS记录,查看域名解析 是否正常,也可用来诊断网络问题
nslookup 支持交互式和非交互式两种执行方式,在Windows系统中和Linux系统中都可以使用
nslookup 命令不会查询本地 hosts文件中定义的域名和IP对应关系,也不能查询dns的递归或者迭代
rndc 是 bind 程序的客户端工具,默认使用 TCP的 953 端口连接 bind 服务器,进行管理
whois 命令可以查询域名注册信息
在 ubuntu 系统中,虽然在网卡中配置了 DNS 服务器的IP地址,但在使用相关命令进行 DNS 解析时, 默认的 DNS 服务器使用的是 127.0.0.53,而并不是我们在网卡上配置的DNS 服务器地址。
systemd-resolved 服务为本地应用程序提供了网络名字解析服务, 系统通过它对外进行 dns 请求。
设置全局DNS
bind:(Berkeley Internet Name Domain)
bind 是一款实现DNS服务的开放源码软件,由伯克利大学开发,能够提供双向解析,转发,子域授权, view 等功能,使用广泛,目前Internet上半数以上的DNS服务器都是由Bind来实现的。
安装
启动服务
查看端口占用
named默认会占用TCP和UDP的53端口, 953是给管理工具使用的
将其它机器的DNS指向本机
Bind 的配置说明
配置文件解析流程
bind 配置文件
主配置文件 /etc/bind/named.conf
选项配置文件 /etc/bind/named.conf.options
该文件主要包括以下几部份内容,默认只有全局配置部份
中间配置文件 /etc/bind/named.conf.default-zones
该文件中定义了要解析的域名与具体解析规则之间的对应关系
allow 访问控制指令
在named配置中有四个allow开头的字段,主要用来实现访问控制
acl 地址集合
ACL:将一个或多个网段(或具体IP地址)定义在一个集合里面,并通过统一的名称进行调用。
ACL 只能先定义后调用,因此一般放在配置文件的最上面,在 options 之前定义。
ACL 有四个内置值
view 视图
view:视图,将ACL和具体的解析规则对应起来,实现根据条件解析,实现智能DNS
-
每个view用来匹配一个ACL;
-
一个bind服务可以可以定义多个view,每个view 中可定义的一个或多个zone;
-
不同的view中可以对同一个域名进行解析,返回不同的解析结果;
-
如果定义了view,则所有的zone规则都要写在view中了,不能再直接写在 /etc/named.conf 中 了;
-
客户端请求到达时,是自上而下检查每个view所对应的ACL的,也就是说,如果请求被命中了,就 进入解析,不再向后匹配;
具体解析规则 /etc/bind/db.*
该文件定义域名的具体解析规则,该文件有多条资源记录组成,每一行都是一条资源记录,在RFC文档 中,DNS解析记录被称为Resource Recode(资源记录),缩写为 RR
Resource Recode 定义
CLASS 字段说明
TYPE字段说明
常用的TYPE字段值有A,AAAA,CNAME,MX,NS,PTR,SOA 等
A 记录 和 AAAA记录
A 记录也称主机记录,是将主机域名解析到指定的物理机IPV4地址上
AAAA 记录是IPV6地址的主机记录,是将主机域名解析到指定物理机的IPV6地址上
A 记录是DNS解析服务中最常见的资源记录
CNAME 别名记录
记录别名,将域名解析到另一个域名
MX 记录
邮件交换 (MX) 记录将一个域的电子邮件定向到托管该域用户帐号的服务器(SMTP服务器)。
一个域可以定义多条MX记录,但每条MX记录的优先级不同,如果邮件通过最高优先级记录无法递送, 则采用第二优先级,以此类推。
每个MX记录的value之前有一个数字(0-99),表示此服务器的优先级,数字越小优先级越高;
对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
NS 记录
域名服务器 (NS) 记录用于确定哪些服务器为一个网域提供DNS解析服务。
一般来说,为了服务的安全可靠,一个域名,至少应该有两条NS记录,保证服务的冗余,防止出现单点 失败。
PTR 记录
PTR记录是A记录的逆向记录,又称做IP反查记录或指针记录,负责将IP反向解析为域名
SOA 记录
SOA记录是起始授权记录,用于设置当前DNS服务器的某些规则,SOA记录要放在整个文件的最开始。
SOA 记录表示此DNS是该域名的权威解析服务器,当在查询的过程中,各级缓存都没有要查询的内容 时,最后会通过递归查询的方式到达此DNS服务器,并请求此域名的SOA记录。
SOA记录同样符合 NAME TTL CLASS TYPE VALUE 这五个字段的格式定义,但VALUE字段值较多
VALUE 字段中从左到右具体内容如下:
TXT 记录
TXT记录是对域进行标识和说明的一种方式,一般用于验证记录,该记录的值可以是人工可读文本,也 可以是机器可读文本,也可为空。