实验环境: DNS服务端:base1 IP:192.168.245.130 DNS客户端:base2 IP:192.168.245.131
特别说明: 在以下的实验当中,配置文件中的内容说明或调整配置时,如书面上没有出现的内容并在实验主机中的配置文件中出现的内容,则不需要修改,仅需要修改书面上出的加粗字体部分的内容。
1、DNS服务概述
DNS(Domain Name System)域名系统,在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。 DNS协议运行在TCP和UDP协议之上,使用端口号53。 DNS是一个分布式数据库,命名系统采用层次的逻辑结构,如同一棵倒置的树,这个逻辑的树形结构称为域名空间,由于DNS划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息,如图5-1所示。 注:DNS域名空间中,树的最大深度不得超过127层,树中每个节点最长可以存储63个字符。
图5-1 DNS树形结构示意图
1.1域和域名
DNS树的每个节点代表一个域,通过这些节点,对整个域名空间进行划分,成为一个层次结构。域名空间的每个域的名字,通过域名进行表示。
域名:通常由一个完全合格域名(FQDN)标识。FQDN能准确表示出其相对于DNS域树根的位置,也就是节点到DNS树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用“.”分隔,对于DNS域google来说,其完全正式域名(FQDN)为google.com。 例如,google为com域的子域,其表示方法为google.com,而www为google域中的子域,可以使用www.google.com表示。
注意:通常,FQDN有严格的命名限制,长度不能超过256字节,只允许使用字符a-z,0-9,A-Z和减号(-)。点号(.)只允许在域名标志之间(例如“google.com”)或者FQDN的结尾使用。域名不区分大小,由最顶层到下层,可以分成:根域、顶级域、二级域、子域。
Internet域名空间的最顶层是根域(root),其记录着Internet的重要DNS信息,由Internet域名注册授权机构美国 ICANN 机构https://www.icann.org/管理,该机构把域名空间各部分的管理责任分配给连接到Internet的各个组织,“.”全球有13个根(root)服务器:9台在美国,1台在英国,1台在瑞典,1台在日本,1台备用
DNS根域下面是顶级域,也由Internet域名注册授权机构管理。
共有3种类型的顶级域。
组织域:采用3个字符的代号,表示DNS域中所包含的组织的主要功能或活动。比如com为商业机构组织,edu为教育机构组织,gov为政府机构组织,mil为军事机构组织,net为网络机构组织,org为非营利机构组织,int为国际机构组织。
地址域:采用两个字符的国家或地区代号。如cn为中国,kr为韩国,us为美国。
反向域:这是个特殊域,名字为in-addr.arpa,用于将IP地址映射到名字(反向查询)。 对于顶级域的下级域,Internet域名注册授权机构授权给Internet的各种组织。当一个组织获得了对域名空间某一部分的授权后,该组织就负责命名所分配的域及其子域,包括域中的计算机和其他设备,并管理分配的域中主机名与IP地址的映射信息。
1.2.区(Zone)
区是DNS名称空间的一部分,其包含了一组存储在DNS服务器上的资源记录。 使用区的概念,DNS服务器回答关于自己区中主机的查询,每个区都有自己的授权服务器。
1.3主域名服务器与辅助域名服务器
当区的辅助服务器启动时,它与该区的主控服务器进行连接并启动一次区传输,区辅助服务器定期与区主控服务器通信,查看区数据是否改变。如果改变了,它就启动一次数据更新传输。 每个区必须有主服务器,另外每个区至少要有一台辅助服务器,否则如果该区的主服务器崩溃了,就无法解析该区的名称。
辅助服务器的优点: (1)容错能力 配置辅助服务器后,在该区主服务器崩溃的情况下,客户机仍能解析该区的名称。一般把区的主服务器和区的辅助服务器安装在不同子网上,这样如果到一个子网的连接中断,DNS客户机还能直接查询另一个子网上的名称服务器。 (2)减少广域链路的通信量 如果某个区在远程有大量客户机,用户就可以在远程添加该区的辅助服务器,并把远程的客户机配置成先查询这些服务器,这样就能防止远程客户机通过慢速链路通信来进行DNS查询。 (3)减轻主服务器的负载 辅助服务器能回答该区的查询,从而减少该区主服务器必须回答的查询数。
1.4DNS相关概念
(1)DNS服务器 运行DNS服务器程序的计算机,储存DNS数据库信息。DNS服务器会尝试解析客户机的查询请求。在解答查询时,如果DNS服务器能提供所请求的信息,就直接回应解析结果,如果该DNS服务器没有相应的域名信息,则为客户机提供另一个能帮助解析查询的服务器地址,如果以上两种方法均失败,则回应客户机没有所请求的信息或请求的信息不存在。 (2)DNS缓存 DNS服务器在解析客户机请求时,如果本地没有该DNS信息,则可以会询问其他DNS服务器,当其他域名服务器返回查询结果时,该DNS服务器会将结果记录在本地的缓存中,成为DNS缓存。当下一次客户机提交相同请求时,DNS服务器能够直接使用缓存中的DNS信息进行解析。 (3)DNS查询方式:递归查询和迭代查询 一个DNS查询过程,通过8个步骤的解析过程就使得客户端可以顺利访问www.163.com这个域名,但实际应用中,通常这个过程是非常迅速的,如图5-2所示。
图5-2DNS查询过程示意图
<1>客户机提交域名解析请求,并将该请求发送给本地的域名服务器查找hosts文件与 resolv.conf文件 (网卡配置文件的DNS优先级要高于此文件,重启网卡会覆盖此文件,解决方案如下2.3.1)。 <2>当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。 <3>根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。 <4>本地服务器再向返回的域名服务器发送请求。 <5>接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知客户机下级的域名服务器的地址。 <6>本地域名服务器将查询请求发送给返回的DNS服务器。 <7>域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应。 <8>本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。
查询域名解析流程 [root@home ~]# yum install bind-utils -y [root@home ~]# nslookup www.baidu.com [root@home ~]# dig @8.8.8.8 www.baidu.com +trace
1.5.两种查询方式
(1)递归查询 递归查询是一种DNS服务器的查询模式,在该模式下DNS服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS服务器本地没有存储查询DNS信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
(2)迭代查询 DNS服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS服务器并不-直接回复查询结果,而是告诉客户机另一台DNS服务器地址,客户机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止。
1.6正向解析与反向解析
**正向解析: 正向解析是指域名到IP地址的解析过程,如图5-3所示。 图5-3正向解析域名
反向解析: 反向解析是从IP地址到域名的解析过程。反向解析的作用为服务器的身份验证,如图5-4所示。https://site.ip138.com/ 图5-4反向解析域名
1.7DNS资源记录
1.SOA资源记录 每个区在区的开始处都包含了一个起始授权记录(Startof Authority Record),简称SOA记录。SOA定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA记录。
2.NS资源记录 NS(NameServer)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。每个区在区根处至少包含一个NS记录。
3.A资源记录 地址(A)资源记录把FQDN映射到IP地址。因为有此记录,所以DNS服务器能解析FQDN域名对应的IP地址。
4.PTR资源记录 相对于A资源记录,指针(PTR)记录把IP地址映射到FQDN。用于反向查询,通过IP地址,找到域名。
5.CNAME资源记录 别名记录(CNAME)资源记录创建特定FQDN的别名。用户可以使用CNAME记录来隐藏用户网络的实现细节,使连接的客户机无法知道真正的域名。
语法格式: 别名 CNAME 主机名 www1.lin.com. CNAME www.lin.com.
例:ping百度时,解析到了百度的别名服务器。百度cname=www.a.shifen.com的别名,如图5-5所示。 图5-5FQDN别名
6.MX资源记录 邮件交换(MX)资源记录,为DNS域名指定邮件交换服务器,邮件交换服务器是为DNS域名处理或转发邮件的主机。处理邮件指把邮件投递到目的地或转交另一不同类型的邮件传送者。转发邮件指把邮件发送到最终目的服务器,用简单邮件传输协议SMTP把邮件发送给离最终目的地最近的邮件交换服务器,或使邮件经过一定时间的排队。例:1234564789@qq.com
MX 资源记录语法格式: mail A 192.168.1.63 MX 192.168.1.63
DNS监听的端口号: [root@base ~]# vim /etc/services #查看services文件。 端口: tcp/53 udp/53 #用于客户端查询 tcp/953 udp/953 #用于DNS主从同步
2、安装DNS
BIND简介: BIND全称为Berkeley Internet Name Domain(伯克利因特网名称域系统),BIND主要有三个版本:BIND4、BIND8、BIND9。 BIND8版本:融合了许多提高效率、稳定性和安全性的技术,而BIND9增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等。 安装程序 [root@base ~]# yum install bind bind-chroot bind-utils -y
bind-9.9.4-50.el7.x86_64 #该包为DNS服务的主程序包。 bind-chroot-9.9.4-50.el7.x86_64 #提高安全性。 #bind-chroot是bind的一个功能,使bind可以在一个chroot的模式下运行,也就是说,bind运行时的/(根)目录,并不是系统真正的/(根)目录,只是系统中的一个子目录而已,这样做的目的是为了提高安全性,因为在chroot的模式下,bind可以访问的范围仅限于这个子目录的范围里,无法进一步提升,进入到系统的其他目录中。 bind-utils-9.9.4-50.el7.x86_64.rpm#该包为客户端工具,它用于搜索域名指令。
2.1DNS服务器相关配置文件
/etc/named.conf named.conf是BIND的核心配置文件,它包含了BIND的基本配置,但其并不包括区域数据。
/var/named/目录为DNS数据库文件存放目录,每一个域文件都放在这里
2.2启动服务
[root@base ~]# systemctl start named #启动DNS服务。 [root@base ~]# systemctl enable named #设置为开机自动启动。 [root@base ~]# netstat -antup | grep 53 #查看53号端口是否监听。 tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1417/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1417/named tcp 0 0 192.168.245.139:34502 198.97.190.53:53 TIME_WAIT - tcp 0 0 192.168.245.139:46156 192.203.230.10:53 FIN_WAIT2 - tcp 0 0 192.168.245.139:60674 192.203.230.10:53 TIME_WAIT - tcp6 0 0 ::1:53 ::😗 LISTEN 1417/named tcp6 0 0 ::1:953 ::😗 LISTEN 1417/named
2.3服务的使用方法
在客户端上配置好DNS服务器地址。 [root@base2 ~]# vim /etc/resolv.conf #编辑resolv.conf文件,添加DNS,此文件的生效范围是全局的,即是所有网卡的可以有效。 # Generated by NetworkManager search localdomain nameserver 192.168.245.2
修改网卡配置文件添加DNS,此方式添加的DNS仅生效当前网卡。 [root@base2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 DNS1=8.8.8.8
2.3.1.配置resolv.conf文件
[root@teach ~]# cat /etc/resolv.conf ; generated by /usr/sbin/dhclient-script search localdomain nameserver 192.168.1.2 参数说明: search 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。 nameserver 表明DNS服务器的IP地址。可以有很多行的nameserver,每一个带一个IP地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver。
系统后默认网络由NetworkManager管理, 而NetworkManager 或 network 实现网络重启时会修改/etc/resolv.conf文件. 解决方案 1:<NetworkManager管理时> [root@upl ssh]# vim /etc/NetworkManager/NetworkManager.conf [main] plugins=ifcfg-rh dns=none —增加该语句,对DNS不修改,但是 网卡配置文件中的DNS将无效 重启服务无生效:systemctl restart NetworkManager
解决方案 2:<network管理时> 在网卡配置文件中加入以下语句,同样修改后不可在网卡配置文件中指定DNS服务地址,指定无效 NM_CONTROLLED=no PEERDNS=NO
2.4配置文件详解
配置DNS服务器解析: [root@base named]# vim /etc/named.conf #编辑DNS配置。 DNS配置中,整体分3段,如图 5-6 所示。 options:对全局生效。 zone:针对某个区域生效。
图5-6DNS配置 重点讲解type参数,如图5-7所示。 图5-7file参数
type字段指定区域的类型,对于区域的管理至关重要,一般分为四种: Master:主DNS服务器:拥有区域数据文件,并对此区域提供管理数据 Slave:从DNS服务器:拥有主DNS服务器的区域数据文件的副本,从DNS服务器会从主DNS服务器同步所有区域数据。 Forward:转发域服务器,保留缓存 Hint:根域名服务器的初始化组指定使用线索区域hint zone,当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表。
3、实战:为公司内网搭建一个DNS服务器
首先备份DNS配置文件 [root@home named]# cp /etc/named.conf /etc/named.conf_bak
3.1.配置正向与反向解析区域
修改配置文件,授权DNS服务器管理lin.com 区域做正向解析,并把该区域的区域文件命名为lin.com.zone
管理192.168.245网段区域做反向解析,并把该区域的区域文件命名为lin.com.arpa
[root@base ~]# vim /etc/named.conf #编辑DNS配置文件,修改如下配置文件区域的内容,其他区域不需要做修改,保持默认。 options { listen-on port 53 { any; }; #把原来的127.0.0.1改为any:意为监听所有地址。 listen-on-v6 port 53 { ::1; }; 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; }; #把原来的localhost,改为any:意为允许使用本DNS服务器的地址。 }; zone “lin.com” IN { #把原来的 . 改为lin.com。 正向解析记录 type master; #把原来的hint,改为master。 服务器类型 file “/var/named/lin.com.zone”; #把原来的named.ca,改为lin.com.zone。指定区域数据文件的位置 };
zone “245.168.192.in-addr.arpa” IN { #把原来的 . 改为245.168.192.in-addr.arpa。 反向解析记录 type master; #把原来的hint,改为master。 服务器类型 file “/var/named/lin.com.arpa”; #把原来的named.ca,改为lin.com.arpa。指定区域数据文件的位置 };
include “/etc/named.rfc1912.zones”; include “/etc/named.root.key”;
**[root@home named]# named-checkconf #语法检查 **
3.2.创建正向解析zone文件
[root@base ~]# cd /var/named #切换工作目录至/var/named目录下。 [root@base named]# cp -a named.localhost lin.com.zone #复制named.localhost文件为lin.com.zone文件,在复制过程中需要加-a选项,保持原有的权限。 [root@base named]# vim lin.com.zone #编辑该文件中的内容,如图 5-8 所示。
图5-8 lin.com.zone文件 $TTL 1D 设置有效地址解析记录的默认缓存时间,默认为1天也就是1D。 @ IN SOA ns1.lin.com. admin.lin.com. ( 当前区域 起始授权记录 指示了当前区域中 ns1.lin.com 这台主机为主DNS服务器 联系管理员邮箱。 0 ; serial 0 :更新序列号,用于标示数据库的变换,可以在10位以内,如果存在辅助DNS区域,建议每次更新完数据库,手动加1。 1D ; refresh 1D :刷新时间,从域名服务器更新该地址数据库文件的间隔时间,默认为1天。 1H ; retry 1H :重试延时,从域名服务器更新地址数据库失败以后,等待多长时间,默认为1小时。 1W ; expire 1W :到期,失效时间,超过该时间仍无法更新地址数据库,则不再尝试,默认为一周。 3H ) ; minimum 3H :设置无效地址解析记录(该数据库中不存在的地址)默认缓存时间。设置无效记录,最少缓存时间为3小时。 @ NS ns1.lin.com. #本域的DNS服务器名称 ns1 A 192.168.245.130 ##对DNS服务器本机做解析。 www A 192.168.245.130 www1.lin.com. CNAME www.lin.com.
注: #在此配置文件中写域名时,都把根 . 也需要写上。 #域管理邮箱admin.lin.com. 由于@有其他含义,所以用“.”代替@。
3.3.创建反向解析arpa文件
[root@base named]#cp -a lin.com.zone lin.com.arpa [root@base named]#vim lin.com.arpa $TTL 1D @ IN SOA ns1.lin.com. admin.lin.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ NS ns1.lin.com. 130 PTR ns1.lin.com. 130 PTR www.lin.com.
3.4.根区域设置及对应区域文件
根区域是一个较为特殊的区域,记录列出了全球根域名服务器的信息,域名通常用“.”表示,如表 5-1 所示。 表 5-1 根区域设置及对应区域文件 重启DNS服务器: [root@base named]# systemctl restart named
修改DNS地址: [root@base2 ~]# vim /etc/resolv.conf nameserver 192.168.245.130 #DNS修改为base 主机IP。
[root@base2 ~]# systemctl restart network #重启动网络服务。
3.5.测试:
[root@base ~]# ping www.lin.com #ping 域名测试。 [root@home named]# nslookup ns1.lin.com #正向解析
[root@home named]# nslookup 192.168.245.130 #反向解析
zone “91.128.192.in-addr.arpa” IN { type master; file “wyhhs.com.arpa”;
4、搭建DNS主从服务器
4.1.搭建一个主DNS服务器A,配置内容如下
[root@base ~]# vim /etc/named.conf options { listen-on port 53 { any; }; #把原来的127.0.0.1改为any。 listen-on-v6 port 53 { ::1; }; 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; }; #把原来的localhost,改为any。 recursion yes;
#dnssec-enable yes; #dnssec-validation yes; #dnssec-lookaside auto;
zone “lin.com” IN { type master; #指定类型为master。 file “lin.com.zone”; #指定为lin.com.zone。 allow-transfer { 192.168.245.0/24; }; #指定允许哪个网段的从DNS服务器,可以同步主DNS服务器zone文件,不写默认为所有。 }; include “/etc/named.rfc1912.zones”;
重启DNS服务,使配置文件生效: [root@base ~]# systemctl restart named
4.2.从DNS服务器的配置
要求:主从系统时间一定要保持一致。
安装程序: [root@base2 ~]# yum install bind bind-chroot bind-utils -y
[root@base2 ~]# systemctl start named
[root@base2 ~]# vim /etc/named.conf options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; 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; #dnssec-validation yes;
zone “lin.com” IN { type slave; file “slaves/lin.com.zone.file”; masters { 192.168.245.130; }; }; include “/etc/named.rfc1912.zones”;
注:这样从DNS服务器就可以从主DNS服务器上获取DNS解析记录信息了。写时注意slave slaves master 单词的书写,有的加s有的不加 重启从DNS服务器会在:/var/named/slaves文件夹下自动创建一个文件lin.com.zone.file 这个文件是从DNS服务器从主DNS服务器上获取的数据
注:主DNS记录中应该有两NS记录,一条是主DNS的NS记录,一条是从DNS服务器的域名记录。
4.3.测试:
[root@base2 etc]# systemctl restart named #重启DNS服务。 [root@base2 etc]# ls /var/named/slaves/ #看到这个文件,说明成功了 lin.com.zone.file
5、测试工具
nslookup 测试域名解析 [root@base1 named]# which nslookup /usr/bin/nslookup [root@base1 named]# rpm -qf /usr/bin/nslookup bind-utils-9.11.4-26.P2.el7_9.3.x86_64
- 非交互式模式 语法: nslookup 域名或IP地址 例: [root@base1 named]# nslookup www.g.cn Server: 192.168.245.2 Address: 192.168.245.2#53
Non-authoritative answer: Name: www.g.cn Address: 203.208.41.66
- 交互模式 [root@base ~]# nslookup #直接输入命令,并回车,而后输入需要解析的域名 > www.g.cn Server: 192.168.245.2 Address: 192.168.245.2#53
Non-authoritative answer: Name: www.g.cn Address: 203.208.40.34
7、命令dig Linux下使用dig命令来查询域名信息,当然也可以使用nslookup,但dig比nslookup更方便更强大一些。 安装: [root@base ~]# rpm -qf bind-utils-9.7.3-8.P3.el6.x86_64
例:使用114.114.114.114 DNS服务器解析www.g.cn [root@base1 named]# dig @114.114.114.114 www.g.cn
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> @114.114.114.114 www.g.cn ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22575 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;www.g.cn. IN A
;; ANSWER SECTION: www.g.cn. 36 IN A 101.200.128.35
;; Query time: 30 msec ;; SERVER: 114.114.114.114#53(114.114.114.114) ;; WHEN: 二 12月 29 17:24:52 CST 2020 ;; MSG SIZE rcvd: 58 d) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22575 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;www.g.cn. IN A
;; ANSWER SECTION: www.g.cn. 36 IN A 101.200.128.35