DNS基础知识
域名(Domain Name)
由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。
什么是DNS?
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
例如:网站“百度”,它的IP地址是202.108.22.5。我们经常使用是域名地址www.baidu.com
来访问该网站,就是因为DNS服务器在我们输入www.baidu.com 域名地址后,根据数据库中的映射关系自动将网址转换为IP地址,所以我们通过网址也可以进行访问。
DNS从概念上可以分为三部分
域名空间:就是我们经常说到 的 “域名+网站空间”,是二者的一个统称。是标识一组主机并提供相关信息的树结构的详细说明。树上的每一个节点都有其控制下的主机相关信息的数据库。查询命令试图从这个数据库中提取适当的信息。这些信息是域名、IP地址、邮件别名等在DNS系统中能找到的内容。
域名服务器:保持和维护域名空间中数据的程序。由于域名服务是分布式的,每一个域名服务器含有一个域名空间自己的完整信息,并保存其他有关部分的信息。一个域名服务器拥有其控制范围内的完整信息。控制范围称为区(Zone),对于本区的请求,由负责本区的域名服务器实现域名解析;对于其他区的请求,将由本区的域名服务器联系其他区的域名服务器实现域名解析。
解析器:简单的程序或子程序库,它从服务器中提取信息以相应对域名空间中主机的查询,用于DNS客户。
FQDN
Full Qualified Domain Name,完全合格的域名,即每个域在全球网络都是唯一的;域(Domain),并不是指诸如www.baidu.com这样的域名,而baidu.com才是域。
域名空间
在域名系统中,每台计算机的域名由一系列用点分开的字母数字组成。例如:某台计算机的FQDN为www.ubuntu.org.cn,其具有的域名为:ubuntu.org.cn。
域名空间是层次结构的,域名中最重要的部分位于右边(cn)。FQDN最左边的段(www)是单台计算机的主机名或主机别名。
根域(root domain)
只有一个,没有上级域,以圆点“.”来表示。在Internet中,根域是默认的,一般不需要表示出来。
全球13台根域名服务器以英文字母A到M依序命名,域名格式为“字母.root-servers.net”。
在根域服务器中,并没有保存全世界的所有Internet网址,只保存着顶级域的“DNS服务器到IP”的对应数据。
每一层的DNS服务器,只负责管理其下一层的“DNS到IP”的对应数据。
顶级域名(Top-Level Domain,TLD)
以根域为上级域,顶级域名又分为两类:一类是国家顶级域名(national top-level domainnames,简称nTLDs),200多个国家都按照ISO3166国家代码分配了顶级域名,例如中国是cn,美国是us,日本是jp等;另一类是国际顶级域名(international top-level domain names,简称iTDs),例如表示工商企业的 .com .Top,表示网络提供商的.net,表示非盈利组织的.org,表示教育.edu,以及没有限制的中性域名如.xyz等。
各级子域(Subdomain)
除了根域和顶级域之外,其他域都称为子域。一个域可以有许多层子域。在已经申请成功的域名下,一般都可以按自己的需求来设置一层或多层子域。比如www.ubuntu.org.cn,ubuntu.org是cn的子域,ubuntu是org.cn的子域。
反向域(in-addr.arpa)
为了完成反向解析过程,需要使用到另外一个概念,即反向域,通过它来讲一个ip地址解析为相应的全域名。
所以一个服务器实际上至少要负责管理两个域,即本地域和相应的反向域。
例如:对于xyz公司,如果加入Internet,它所获得的管理域将包括两个:xyz.com域和in-addr.arpa反向域。若xyz公司所获得的ip地址为C类地址199.34.51.0,则其域名服务器将负责管理反向域51.34.199.in-addr.arpa。
DNS的解析过程
- 第1步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
- 第2步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
- 第3步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
- 第4步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
- 第5步:重复第四步,直到找到正确的纪录。
- 第6步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
DNS的查询模式
- 按查询方式分类
- 递归查询
只要发出递归查询,服务器必须回答目标IP地址与域名的映射关系。一般客户机和服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机。 - 迭代查询
服务器收到一次循环查询回复一次结果,这个结果若不是目标IP与域名的映射关系,将会继续向其他服务器进行查询,直到找到含有所查询的映射关系的服务器为止。一般DNS服务器之间属于循环查询,若DNS服务器2不能响应DNS服务器1的请求,则它会将DNS服务器3的IP发给DNS服务器1,以便DNS服务器1向DNS服务器3发出请求。
- 递归查询
- 按照查询的内容分类
- 正向解析:通过域名查找ip
- 反向解析:通过ip查找域名
DNS服务器的类型
因特网上的域名服务器用来存储域名的分布式数据库,并为DNS客户提供域名解析。它们也是按照域名层次来安排的,每一个域名服务器都只对域名体系中的一部分进行管辖。
根据它们的用途,域名服务器有以下几种不同类型:
- ①主域名服务器
- ②辅助域名服务器
- ③缓存域名服务器
- ④转发域名服务器
DNS资源记录
DNS服务器在提供域名解析服务时,会查询自己的数据库。在数据库中包含描述DNS区域资源信息的资源记录(Resource Record,简称RR)。常用的资源记录有:
- ①区域记录
- a.SOA:起始授权机构记录,定义了区域的全局参数,进行整个域的管理设置一个区域内是唯一的。一个区域文件值允许存在唯一的SOA记录。
格式为:区域名 SOA 主域名服务器(FQDN) 管理员邮箱地址 (序号 刷新时间 重试时间 过期时间 生存时间) - b.NS:名称服务器(NS)资源记录表示该区的授权服务器,它们表示SOA 资源记录中指定的该区的主和辅助服务器,也表示了任何授权区的服务器。每个区在区根处至少包含一个NS记录。
格式为: 区域名 IN NS 完整主机名(FQDN)
- a.SOA:起始授权机构记录,定义了区域的全局参数,进行整个域的管理设置一个区域内是唯一的。一个区域文件值允许存在唯一的SOA记录。
- ②可选记录
- a.CNAME:别名记录,为主机记录别名。
格式为:别名 IN CNAME 主机名 - b.TXT:文本记录,表示注释。
- a.CNAME:别名记录,为主机记录别名。
- ③基本记录
- a. A :地址(A)资源记录把FQDN映射到IP地址,因而解析器能查询到FQDN对应的IP地址。
格式为:完整主机名(FQDN)IN A IP地址 - b.AAAA:ipv6地址记录,域名解析为ipv6地址的映射。
- c.PTR:反向地址记录,相对于A资源记录,指针(PTR)记录把IP地址映射到FQDN。
格式为:IP地址 IN PTR 主机名(FQDN) - d.MX:邮件交换记录,用于控制邮件的路由。
格式为:区域名 IN MX 优先级(数字) 邮件服务器名称(FQDN) #区域名一般为空代表本区域
- a. A :地址(A)资源记录把FQDN映射到IP地址,因而解析器能查询到FQDN对应的IP地址。
DNS服务器的配置文件
/etc/named.conf #主配置文件,用于定义全局选项部分,以及当前域名服务器负责维护的域名地址解析信息。 /etc/named.rfc1912.zones #主配置文件的扩展文件,用于指示引用了哪些区域文件。 /var/named/named.ca #包含全球主要的根域名服务器的主机名和IP地址。 /var/named/named.localhost #定义回环网络接口主机名localhost的正向解析记录。 /var/named/named.loopback #定义回环网络接口IP地址127.0.0.1的反向解析记录。
主配置文件
主配置文件 /etc/named.conf options { listen-on port 53 { any; }; #服务监听的端口和IP地址 listen-on-v6 port 53 { ::1; }; #服务(ipv6)监听的端口和IP地址 directory "/var/named"; #区域文件存放的位置 dump-file "/var/named/data/cache_dump.db"; #转储文件存放的位置 statistics-file "/var/named/data/named_stats.txt"; #静态缓存的位置 memstatistics-file "/var/named/data/named_mem_stats.txt"; #服务器输出的内存使用统计文件位置 allow-query { any; }; #允许查询的客户机 recursion yes; #是否使用递归查询 dnssec-enable yes; #是否使用DNS加密 dnssec-validation yes; #是否使用DNS加密高级算法 bindkeys-file "/etc/named.iscdlv.key"; #密钥文件的位置 managed-keys-directory "/var/named/dynamic";#管理密钥文件的位置 }; logging { #日志文件 channel default_debug { file "data/named.run"; #运行状态文件 severity dynamic;#静态服务器地址 }; }; zone "." IN { #“.”根区域 type hint; #区域类型为根域 file "named.ca"; #区域配置文件 }; include "/etc/named.rfc1912.zones";#包含扩展配置文件 include "/etc/named.root.key";
其中type选项指定的区域类型有:
- ①master:表示定义的是主域名服务器。拥有区域数据文件,并对此区域提供管理数据。
- ②slave:表示定义的是辅助域名服务器。拥有主DNS服务器的区域数据文件的副本,辅助DNS
服务器会从主DNS服务器同步所有区域数据。 - ③hint:表示是互联网中根域名服务器。当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表。
- ④forward:一个forward zone是每个域的配置转发的主要部分。
- ⑤stub:和slave类似,但是只复制主DNS服务器上的NS记录而不像辅助DNS服务器会复制所有区域数据。
- ⑥delegation-only:用于强制区域的delegation.ly状态。
BIND
1、BIND:Berkeley Internet Name Domain,是一个域名服务软件包,Linux使用这个软件包来提供域名服务。BIND的服务端软件是被称作named的守护进程。
BIND的服务端软件是被称为named的守护进程,其主要功能如下:
若查询的主机名与本地区域信息中相应的资源记录匹配,则使用该信息来解析主机名并为客户机做出应答(UDP:53)。
若本区域信息中没有要查询的主机名,默认会以递归方式查询其他DNS服务器并将其响应结果缓存于本地。
执行“区传输(zone transfer)”,在服务器之间复制zone数据(TCP:53)。
2、解析器库程序:联系DNS服务器实现域名解析。
3、DNS的常用命令行:nslookup、host、dig。
项目实施
基本的DNS服务器的搭建流程主要分为五个步骤:
- 安装bind软件包
- 编辑主配置文件named.conf,设置DNS服务器管理的区域(zone)及这些区域所对应的区域文件名和存放目录;
- 建立被主备配文件包含的区域文件named.rfc1912.zones;
- 配置正向解析数据库文件和反向解析数据库文件;
- 重新加载配置文件或重新启动named服务,使用配置生效。
安装DNS服务
yum -y install bind*
DNS服务器配置
- 1、DNS服务的主配置文件named.conf:/etc/named.conf
//常用配置全局字句 options { listen on port 53 { any;}; #指定监听的端口和接口的IPV4 listen-on-v6 port 53 { ::1; }; #指定监听的端口和接口的IPV6 directory "/var/named"; #包含的区数据文件存储目录 dump-file "/var/named/data/cache_dump.db"; #服务器缓存信息存储文件 statistics-file "/var/named/data/named_stats.txt"; #统计信息存储文件 memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; #允许查询的客户机列表,默认是所有主机。 recursion yes|no; #是否使用递归式DNS服务器,默认为yes。 dnssec-enable yes|no; #是否返回DNSSEC相关的资源记录。 dnssec-validation yes|no; #指定确保资源记录是经过DNSSEC验证为可信的,默认为yes。 };
- 2、主配置文件(/etc/named.conf)中配置区(Zone)声明
- 3、DNS服务的主配置文件named.conf:/etc/named.conf
- 4、主配置包含的区(Zone)配置文件(/etc/named.rfc1912.zones)
//添加正向域声明 zone “xxx.com" IN { type master; 主区域 file "/var/named/xxx.com.zone"; #正向区域数据配置文件名 allow-update { none; }; #允许动态更新客户端IP地址(none表示全部禁止) }; //添加反向域声明 zone “3.168.192.in-addr.arpa” IN { #某IP网段的反向解析 type master; #主区域 file "/var/named/192.168.3.zone"; #反向区域数据配置文件名 allow-update { none; }; }
- 5、配置正向解析数据库文件(/var/named/xxx.com.zone
$TTL 1D @ IN SOA xxx.com. 123213123.qq.com ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS dns.xxx.com. dns IN A 192.168.3.166 www IN A 192.168.3.167 ftp IN CNAME www.xxx.com mail IN A 192.168.3.168 IN MX mail.xxx.com.
- 6、配置反向解析数据库文件/var/named/192.168.3.zone
$TTL 1D @ IN SOA xxx.com. 12123123.qq.com( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS dns.xxx.com. 166 IN PTR dns.xxx.com. 167 IN PTR www.xxx.com.
启动和检查DNS服务