目录
DNS是什么
DNS概述
当利用Internet传输数据时,需要使用到IP地址,但人对于数字组成的IP地址记忆较差,因此利用特定文件(hosts文件)将主机名称和IP地址做对应,让主机名称和IP地址关联起来,这样就可以通过主机名称获取该主机的IP地址。
hosts文件是本地负责ip地址与域名快速解析的文件。hosts文件包含了ip地址与主机名之间的映射,还包括主机的别名。在没有DNS服务的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的ip地址(在私有网段内部,最好将所有IP都写入/etc/hosts文件中)。
- Linux:/etc/hosts
- Windows: %WINDIR%/system32/drivers/etc/hosts
但Internet上主机众多,无法将所有主机都输入到/etc/hosts文件中,也无法立刻让所有计算机都同步更新/etc/hosts文件,于是域名系统(DNS)应运而生。
DNS(Domain Name System,域名系统)是一个由分层的DNS服务器实现的分布式数据库,是使得主机能够查询分布式数据库的应用层协议。DNS协议运行在UDP之上,使用53端口。DNS服务器通常是运行BIND(Berkeley Internet Name Domain)软件的UNIX机器。DNS提供的服务有:主机名到IP地址的转换、主机别名、邮件服务器别名、负载分配。
DNS与BIND的区别:
- DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
- BIND:Bekerley Internet Name Domain, 用来实现DNS服务的软件。
DNS架构
DNS使用了大量的服务器,它们以层次方式组织,并且分布在全世界范围内,没有一台DNS服务器拥有因特网上所有主机的映射,这些映射分布在所有的DNS服务器上。大致有三种类型的DNS服务器:
- 根DNS服务器:标识为(.)点 。根域名服务器是最高层次的域名服务器,每个根域名服务器都知道所有顶级域名服务器的域名和ip。根域名服务器一版情况下不会把待查询的域名直接转换IP,而是告诉本地域名服务器下一步应该找哪一个顶级域名服务器进行查询。
- 顶级域DNS服务器:顶级域名服务器管理在该顶级域名服务器注册的所有二级域名,但受到DNS查询就会有相应应答。(可能是给出最后的结果或下一步一应当找的域名服务器ip),顶级域名服务器分为三类:
通用顶级域:.com(商业机构) .org(非营利性组织) .net(网络服务机构)等;
国家顶级域:.cn(中国) .uk(英国) .us(美国) .jp(日本)等;
反向域(基础建设顶级域):.arpa, 即从IP到FQDN的反向解析。 - 权威DNS服务器:每个域都会有域名服务器,也叫权威域名服务器,可以理解为二级域名下负责一个区的域名服务器。
- 本地域名服务器:本地域名服务器并不属于域名架构的层级结构,但对域名系统非常重要。一台主机发出DNS请求时就是发给本地域名服务器。
任何连接到因特网上的主机或路由都有唯一层次结构的名字即域名(domain name),因特网采用层次树状结构命名方法。域是名字空间中一个可被管理的划分(按机构组织划分),域可被划分为子域,子域可再被划分,即形成了顶级域名、二级域名、三级域名等(最多可达127级域名)。从右向左为顶级域名、二级域名、三级域名等,用点隔开。如:www.baidu.com
com为顶级域名、baidu为二级域名、www为三级域名。
DNS查询类型
- 递归模式(主机与本地域名服务器之间):如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户机的身份继续向DNS域名服务器进行查询,直到返回最终的查询结果,或者报错表示无法查询。
- 迭代模式(本地域名服务器与各DNS域名服务器之间):本地域名服务器发出查询请求,对方如果没有授权回答(授权回答:向dns服务器查询一个域名,刚好这个域名是本服务器负责,返回的结果就是授权回答),就会返回一个能解答这个查询的其它名称服务器列表,本地域名服务器会再向返回的列表中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果,或者报错表示无法查询。
DNS解析方式
DNS系统最主要的功能就是互查主机名与IP,由于计算机在网络上只认识IP,所以一般由主机名查找IP的过程为正解,由IP查询得到主机名为反解。
- 正向解析:FQDN→IP
- 反向解析:IP→FQDN
通常一个正解或者反解的设置就是一个Zone,每一个Zone都有一个配置文件,若要规定这些配置文件名,可以让/etc/named.conf这个参数文件来设置。即DNS服务器使用的BIND软件的主要参数文件是/etc/named.conf,而这个文件记录了每一个Zone的配置文件名。实际上主机名称与IP的对应关系就是记录在各个Zone的配置文件内。
DNS解析流程
Client -->hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion) --> DNS Server Cache -->iteration(迭代) --> 根–> 顶级域名DNS–>二级域名DNS…
当在浏览器的地址栏输入www.baidu.com时:
- 本地hosts文件
操作系统会先检查自己本地的hosts文件是否有该网址的映射关系,如果有则调用该映射取得IP地址,完成域名解析。 - 本地DNS解析器缓存
如果hosts文件没有该域名的映射,则查找本地DNS解析器缓存是否有该域名的映射关系,如果有则直接返回,完成域名解析。 - 本地DNS服务器
如果本地hosts文件与本地DNS解析器缓存都没有相应的网址映射关系,则查找TCP/IP参数中设置的首选DNS服务器——本地DNS服务器,此服务器收到查询时,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。 - 根域名服务器
如果本地DNS服务器本地区域文件与缓存解析都失效,则本地DNS服务器将请求发至13台根DNS服务器,根DNS服务器收到请求后会判断这个域名(.com)由谁授权管理,并会返回一个负责该顶级域名服务器的IP。 - 下一级域名服务器
DNS服务器收到IP信息后,则去联系负责.com域的顶级域名服务器。这台负责.com域的DNS服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(baidu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找baidu.com域服务器,重复上面的动作,进行查询,直至找到www.baidu.com主机,并将结果返回给客户机。
DNS的部署
DNS所需软件
DNS使用的是Berkeley发展的BIND(Berkeley Internet Name Domain)软件,BIND相关程序包:
- bind.x86_64:服务端
- bind-utils.x86_64:客户端
- bind-chroot.x86_64:安全包,将DNS相关文件放至/var/named/chroot 。chroot表示change to root,root表示根目录,CentOS默认将/var/named/chroot指定为BIND程序的根目录,如此若该程序被攻击,也仅此目录下的文件被破坏而已。
在/etc/sysconfig/named文件中可以查看chroot是否启动。若chroot启动将BIND的根目录变更为/var/named/chroot,但BIND的相关程序需要/etc/、/var/named/、/var/run/等目录的,所以BIND的相关程序所需的所有数据会链接到以下目录中:
/var/named/chroot/etc/named.conf
/var/named/chroot/var/named/Zone-file1
/var/named/chroot/var/run/named/
BIND在DNS服务器的设置需要有以下文件:
- 配置文件:主要规范主机的设置、Zone的所在、权限的设置等
- 数据库文件:记录主机名称和IP的对应等
在CentOS中,BIND的默认目录通常为以下:
-
/etc/named.conf:配置文件
option{};:全局配置
logging{};:日志子系统配置
zone “Zone_Name” IN {}; :本机能够为哪些Zone进行解析 -
/etc/sysconfig/named:该文件控制是否启动chroot及额外的参数
-
/var/named/:数据库文件放置目录
-
/var/run/named/:named程序执行时默认将pid-file放置在此目录
DNS M/S架构
DNS服务器类型
DNS服务器类型大致可分为三类:Master、Slave、Cache-Only
- Master:主DNS服务器,管理和维护所负责解析的域内解析库的服务器。
- Slave:从DNS服务器,从主DNS服务器或从DNS服务器复制解析库副本。
- Cache-Only:缓存DNS服务器,没有自己的数据库文件,仅用于帮助Client向外部DNS主机请求数据。
Master/Slave数据更新
- Slave判断是否需要更新:在Slave上设置向Master DNS主机请求数据更新的周期时间,每当更新时间到达,Slave就会向Master询问是否更新数据(是否更新数据以Serial number是否不同为依据)。
- Master判断是否需要更新:Master如果确定DNS数据已经变更,且想让Slave同步更新,也可以主动向Slave发布更新通知。
- 数据同步:数据由Master传输到Slave来更新Slave的DNS数据。
Cache-Only DNS
什么是Cache-Only?
Cache-Only DNS Server,也成为forword DNS,这个DNS服务器只有Cache缓存功能,其本身没有主机名称与IP正反解的配置文件,完全是由对外的查询来提供数据来源,相当于一个转发器。
什么时候使用Cache-Only?
将客户端的DNS服务器的IP设置为防火墙IP,在防火墙服务器加设一个Cache-Only DNS服务器,即可利用防火墙与DNS帮助防火墙内的客户机解析主机名与IP之间的对应关系。
DNS记录类型
共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射,每个DNS回答报文包含一条或多条资源记录。资源记录是一个包含了下列字段的四元组:
(Name,Value,Type,TTL)
- TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间;Name和Value的值取决于Type。
资源记录定义格式:
Name [TTL] IN Type Value
- Name:@符号可用于引用当前区域的名字(占位符)
- TTL:可从全局继承
- IN:表示互联网
- 同一Name可以通过多条记录定义多个不同的值,DNS服务器会以轮询方式响应
- 同一Value可以定义多个不同的Name,表示多个Name可以找到同一个主机
Type | Name | Value | Function |
---|---|---|---|
SOA | 当前区域名称 | 由多部分组成 | Start Of Authority,起始授权记录,一个区域解析库只能有一个SOA记录,必须位于解析库的第一条记录 |
NS | 当前区域名称 | 知道如何获取该域中主机IP地址的权威DNS服务器的主机名 | 标明当前区域的DNS服务器 |
A | FQDN | FQDN对应的IP | FQDN→IP |
PTR | IP(需遵循特定格式将IP反过来写,并加上特定后缀in-addr.arpa.) | FQDN | IP→FQDN |
CNAME | 主机别名 | 别名为Name的主机对应的规范主机名 | 别名记录 |
MX | 当前区域名称 | 别名为Name的邮件服务器的规范主机名 | 邮箱别名 |
-
SOA记录
domain.com. IN SOA ns1.domain.com. admin.domain.com. ( 12083 ; serial number 3h ; refresh interval 30m ; retry interval 3w ; expiry period 1h ; negative TTL )
domain.com.: 区域的根,表示该区域文件用于domain.com.域名(通常会看到使用@占位代替)
IN SOA: IN表示互联网,SOA表示起始授权记录
ns1.domain.com.: 定义了该域的主名称服务器,名称服务器可以是主DNS服务器或从DNS服务器
admin.domain.com.: 该区域文件管理员的邮箱地址,邮箱的@使用 . 代替(admin@domain.com变成admin.domain.com)
12083: 区域文件序列号,从服务器将检查主服务器的区域序列号是否大于它们在系统上的序列号。如果是,它请求新的区域文件,如果不是,它继续服务原始文件。
3h: 区域的刷新间隔,从服务器向主服务器轮询检查区域文件是否变更之间等待时间。
30m: 区域的重试间隔,从服务器在刷新周期结束时无法连接到主服务器,则它将等待此时间并重试轮询主服务器。
3w: 到期时间,从服务器在此时间内无法与主服务器联系,则它不再作为此区域的权威来源的返回响应。
1h: 名称服务器在此文件中找不到所请求的名称时缓存找不到结果的时间量。 -
NS记录
domain.com. IN NS ns1.domain.com. domain.com. IN NS ns2.domain.com.
注意:
- 相邻的两个资源记录的Name相同时,后续可省略;
- 对NS记录而言,任何一个NS记录后面的服务器名称,都应该在后续有一个A记录;
- 一个区域可以有多个NS记录。
-
A记录
ns1.domain.com. IN A 10.0.0.1 ns2.domain.com. IN A 10.0.0.2 *.domain.com. IN A 10.0.0.5
注意:避免用户写错名称给出错误响应,可以通过泛域名解析至特定地址
-
PTR记录
1.0.0.10.in-addr.arpa. IN PTR ns1.domain.com. 2.0.0.10.in-addr.arpa. IN PTR ns2.domain.com. # 若10.0.0为网络地址,可简写为: 1 IN PTR ns1.domain.com.
注意:网络地址及后缀可省略,主机地址需要反写
-
CNAME记录
www.domain.com. IN CNAME complex.domain.com.
Name:FQDN别名
Value:FQDN原名 -
MX记录
domain.com. IN MX 10 mx1.domain.com. IN MX 20 mx2.domain.com.
注意:
- 一个区域内,MX记录可有多个,但每个记录的Value之前应该有一个数字(0-99)表示此服务的优先级,数字越小优先级越高。
- 对MX记录而言,任何一个MX记录后面的服务器名称,都应该在后续有一个A记录。
DNS相关命令
- named-checkconf:主配置文件语法检查
- named-checkzone:解析库文件语法检查
- dig:只用于测试DNS系统,而不会测试hosts文件
- host:分析域名查询工具,可以用来测试域名系统工作是否正常
- nslookup:用于查询DNS的记录,查询域名解析是否正常,可在网络故障时用来诊断网络问题
- rndc:DNS内置命令,rndc reload可重载主配置文件和区域解析库文件
DNS部署实战
实现DNS正向主服务器
定义正向区域格式为:
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
实验目的
搭建DNS正向主服务器,实现Web服务器基于FQDN的访问
主机规划
主机 | IP |
---|---|
DNS服务端 | 192.168.1.8 |
DNS客户端 | 192.168.1.7 |
Web服务器 | 192.168.1.6 |
环境准备
- 关闭防火墙
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
- 关闭SELinux
[root@localhost ~]# setenforce 0 [root@localhost ~]# sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
- 时间同步
[root@localhost ~]# rpm -qa | grep ntpdate ntpdate-4.2.6p5-29.el7.centos.2.x86_64 [root@localhost ~]# ntpdate ntp1.aliyun.com 21 Sep 14:15:35 ntpdate[58580]: step time server 120.25.115.20 offset -28798.724976 sec [root@localhost ~]# which ntpdate /usr/sbin/ntpdate [root@localhost ~]# crontab -e no crontab for root - using an empty one crontab: installing new crontab [root@localhost ~]# crontab -l */1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com>/dev/null 2>&1
实验步骤
DNS服务端
-
安装BIND软件
[root@dns-server ~]# yum install -y bind
-
编辑BIND配置文件/etc/named.conf
[root@dns-server ~]# vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; --监听的地址和端口 // allow-query { localhost; }; --允许使用本DNS服务的网段
编辑BIND配置文件/etc/named.rfc1912.zones
[root@dns-server ~]# vim /etc/named.rfc1912.zones zone "hawava.com" IN { type master; file "hawava.com.zone"; };
-
编辑DNS区域数据库文件
[root@dns-server ~]# cp -p /var/named/named.localhost /var/named/hawava.com.zone $TTL 1D @ IN SOA master admin.hawava.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 192.168.1.8 www A 192.168.1.6
-
检查配置文件和数据库文件格式,并启动named服务
[root@dns-server ~]# named-checkconf [root@dns-server ~]# named-checkzone hawava.com /var/named/hawava.com.zone zone hawava.com/IN: loaded serial 0 OK [root@dns-server ~]# systemctl start named
Web服务端
-
安装httpd服务
[root@web-server ~]# yum install -y httpd
-
配置主页面
[root@web-server ~]# echo Congratulations! > /var/www/html/index.html
-
启动httpd服务
[root@web-server ~]# systemctl start httpd.service
DNS客户端
-
配置DNS服务器地址为192.168.1.8
[root@dns-client ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32 DNS1=192.168.1.8
-
重启网络服务
[root@dns-client ~]# systemctl restart network
-
测试访问web界面
[root@dns-client ~]# curl www.hawava.com Congratulations! [root@dns-client ~]# nslookup www.hawava.com Server: 192.168.1.8 Address: 192.168.1.8#53 Name: www.hawava.com Address: 192.168.1.6
实现反向解析区域
定义反向区域格式为:
zone "ZONE_NAME" IN {
type {master|slave|forward};
file "网络地址.zone"
};
DNS服务器
-
编辑BIND配置文件/etc/named.rfc1912.zones
[root@dns-server ~]# vim /etc/named.rfc1912.zones zone "1.168.192.in-addr.arpa" IN { type master; file "1.168.192.zone"; }
-
编辑DNS区域数据库文件
[root@dns-server ~]# cp -p /var/named/named.localhost /var/named/1.168.192.zone [root@dns-server ~]# vim /var/named/1.168.192.zone $TTL 1D $ORIGIN 1.168.192.in-addr.arpa. @ IN SOA master.hawava.com. admin.hawava.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master.hawava.com. 8 PTR master.hawava.com. 6 PTR www.hawava.com.
-
检查配置文件和数据库文件格式,并启动named服务
[root@dns-server ~]# named-checkconf [root@dns-server ~]# named-checkzone 1.168.192.in-addr.arpa /var/named/1.168.192.zone zone 1.168.192.in-addr.arpa/IN: loaded serial 0 OK [root@dns-server ~]# rndc reload server reload successful
DNS客户端
-
DNS客户端进行反向测试
[root@dns-client ~]# nslookup 192.168.1.8 8.1.168.192.in-addr.arpa name = master.hawava.com. [root@dns-client ~]# nslookup 192.168.1.6 6.1.168.192.in-addr.arpa name = www.hawava.com.
实现DNS从服务器
只有一台Master服务器存在单点故障的问题,因此可以建立DNS服务器的备份服务器,从服务器可以自动和主服务器进行单向的数据同步,从而和主DNS服务器一样,也可以对外提供查询服务,但从服务器不提供数据更新服务。
注意点:
- 从服务器应该为一台独立的名称服务器
- 主服务器的数据库解析文件必须有一条NS记录指向从服务器
- 从服务器只需要定义区域,而无需提供解析库文件,解析库文件应放置于/var/named/slaves/目录中
- 主服务器要允许从服务器作区域传输
- 主从服务器时间要保持同步
- BIND程序的版本应保持一致,或从高主低
定义从区域的格式为:
zone "ZONE_NAME" IN {
type slave;
masters { MASTER_IP; };
file "slaves/ZONE_NAME.zone";
};
实验目的
搭建DNS主从服务器架构,解决DNS服务器单点故障问题,实现DNS服务高可用。
主机规划
主机 | IP |
---|---|
DNS主服务器 | 192.168.1.8 |
DNS从服务器 | 192.168.1.18 |
DNS客户端 | 192.168.1.7 |
Web服务器 | 192.168.1.6 |
实验步骤
DNS主服务器
-
安装BIND软件
[root@dns-server ~]# yum install -y bind
-
编辑BIND配置文件/etc/named.conf
allow-update { 从服务器IP; };[root@dns-server ~]# vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; --监听的地址和端口 // allow-query { localhost; }; --允许使用本DNS服务的网段 allow-update { 192.168.1.18; }; --只允许从服务器进行区域传输
-
编辑数据库解析文件/var/named/hawava.com.zone,加入指向从数据库的NS记录和A记录
NS slave
slave A 192.168.1.18[root@dns-server ~]# vim /var/named/hawava.com.zone $TTL 1D @ IN SOA master admin.hawava.com. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master NS slave master A 192.168.1.8 slave A 192.168.1.18 www A 192.168.1.6
-
重启named服务
[root@dns-server ~]# systemctl restart named
DNS从服务器
-
安装BIND软件
[root@dns-slave ~]# yum install -y bind
-
编辑BIND配置文件/etc/named.conf
[root@dns-slave ~]# vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; --监听的地址和端口 // allow-query { localhost; }; --允许使用本DNS服务的网段
编辑BIND配置文件/etc/named.rfc1912.zones
[root@dns-slave ~]# vim /etc/named.rfc1912.zones zone "hawava.com" { type slave; --slave表示从服务器 masters { 192.168.1.8; }; --指明主服务器IP file "slaves/hawava.com.slave"; --指定从服务器解析库位置 };
-
启动named服务
[root@dns-slave ~]# systemctl start named
-
查看区域数据库文件是否生成
[root@dns-slave ~]# ls /var/named/slaves/ hawava.com.slave
DNS客户端
-
编辑网卡DNS信息
[root@dns-client ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32 DNS1="192.168.1.8" DNS2="192.168.1.18"
-
停止主服务器上的DNS服务
[root@dns-server ~]# systemctl stop named
-
验证从DNS服务器是否可以查询
[root@dns-client ~]# nslookup www.hawava.com Server: 192.168.1.18 Address: 192.168.1.18#53 Name: www.hawava.com Address: 192.168.1.6
实现DNS父域和子域服务
父域将子域委派给其它主机管理,实现分布式DNS数据库。
实验目的
搭建DNS父域和子域服务器。
主机规划
主机 | IP |
---|---|
DNS父域服务器 | 192.168.1.8 |
DNS子域服务器 | 192.168.1.18 |
父域的Web服务器 | 192.168.1.7 www.hawava.com |
子域的Web服务器 | 192.168.1.17 www.nanjing.hawava.com |
DNS客户端 | 192.168.1.6 |
实验步骤
DNS父域服务器
-
安装BIND软件
[root@dns-server ~]# yum install -y bind
-
编辑BIND配置文件/etc/named.conf
[root@dns-server ~]# vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; --监听的地址和端口 // allow-query { localhost; }; --允许使用本DNS服务的网段
编辑BIND配置文件/etc/named.rfc1912.zones
[root@dns-server ~]# vim /etc/named.rfc1912.zones zone "hawava.com" IN { type master; file "hawava.com.zone"; };
-
编辑DNS区域数据库文件
nanjing NS nanjingns
nanjingns A 192.168.1.18[root@dns-server ~]# cp -p /var/named/named.localhost /var/named/hawava.com.zone $TTL 1D @ IN SOA master admin.hawava.com. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master nanjing NS nanjingns master A 192.168.1.8 nanjingns A 192.168.1.18 websrv A 192.168.1.7 www CNAME websrv
-
检查配置文件和数据库文件格式,并启动named服务
[root@dns-server ~]# named-checkconf [root@dns-server ~]# named-checkzone hawava.com /var/named/hawava.com.zone zone hawava.com/IN: loaded serial 0 OK [root@dns-server ~]# systemctl start named
DNS子域服务器
-
安装BIND软件
[root@dns-server ~]# yum install -y bind
-
编辑BIND配置文件/etc/named.conf
[root@dns-server ~]# vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; --监听的地址和端口 // allow-query { localhost; }; --允许使用本DNS服务的网段
编辑BIND配置文件/etc/named.rfc1912.zones
[root@dns-server ~]# vim /etc/named.rfc1912.zones zone "nanjing.hawava.com" IN { type master; file "nanjing.hawava.com.zone"; };
-
编辑DNS区域数据库文件
[root@dns-server ~]# cp -p /var/named/named.localhost /var/named/nanjing.hawava.com.zone $TTL 1D @ IN SOA master admin.hawava.com. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 192.168.1.18 websrv A 192.168.1.17 www CNAME websrv
-
检查配置文件和数据库文件格式,并启动named服务
[root@dns-server ~]# named-checkconf [root@dns-server ~]# named-checkzone nanjing.hawava.com /var/named/nanjing.hawava.com.zone zone hawava.com/IN: loaded serial 0 OK [root@dns-server ~]# systemctl start named
Web服务器
- 父域Web服务器
yum install httpd echo www.hawava.com > /var/www/html/index.html systemctl start httpd
- 子域Web服务器
yum install httpd echo www.nanjing.hawava.com > /var/www/html/index.html systemctl start httpd
DNS客户端
[root@dns-client ~]# curl www.hawava.com
www.hawava.com
[root@dns-client ~]# curl www.nanjing.hawava.com
www.nanjing.hawava.com
实现DNS缓存服务器
利用DNS转发,可以将用户的DNS请求转发至指定的DNS服务,而非默认的根DNS服务器,并将指定服务器查询的返回结果进行缓存,提高效率。
转发方式:
-
全局转发:对本机所负责解析区域的请求,全转发给指定的服务器。
在全局配置中实现:Options { forward first|only; forwarders { ip;}; };
-
特定区域转发:仅转发特定区域的请求,比全局转发优先级高。
zone "ZONE_NAME" IN { type forward; forward first|only; forwarders { ip;}; };
first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询。
only: 先转发至指定DNS服务器,如果无法解析查询请求,则本服务器将不再去根服务器查询。
实验目的
搭建DNS缓存服务器
主机规划
主机 | IP |
---|---|
DNS主服务器 | 192.168.1.8 |
DNS缓存服务器 | 192.168.1.18 |
Web服务器 | 192.168.1.6 |
DNS客户端 | 192.168.1.7 |
实验步骤
DNS缓存服务器
-
安装bind软件
[root@dns-cache ~]# yum install -y bind
-
编辑bind配置文件/etc/named.conf
forward first;
forwarders { 192.168.1.8; };[root@dns-cache ~]# vim /etc/named.conf //listen-on port 53 { 127.0.0.1; }; //allow-query { localhost; }; dnssec-enable no; dnssec-validation no; forward first; forwarders { 192.168.1.8; };
-
启动named服务
[root@dns-cache ~]# systemctl start named
实现Internet的DNS服务架构
架构图
主机规划
主机 | IP |
---|---|
DNS客户端 | 192.168.1.7 |
本地DNS服务器(只缓存) | 192.168.1.8 |
Forward转发服务器 | 192.168.1.18 |
根域DNS服务器 | 192.168.1.28 |
com域DNS服务器 | 192.168.1.38 |
hawava.com域主DNS服务器 | 192.168.1.48 |
hawava.com域从DNS服务器 | 192.168.1.58 |
www.hawava.com Web服务器 | 192.168.1.68 |
实验步骤
Web服务器
yum install httpd
echo Congratulations! > /var/www/html/index.html
systemctl start httpd
hawava.com域主DNS服务器
yum install bind -y
vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#只允许从服务器进行区域传输
allow-update { 192.168.1.58;};
vim /etc/named.rfc1912.zones
#加上这段
zone "hawava.com" {
type master;
file "hawava.com.zone";
};
vim /var/named/hawava.com.zone
$TTL 1D
@ IN SOA master admin.hawava.com. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave
master A 192.168.1.48
slave A 192.168.1.58
www A 192.168.1.68
chgrp named /var/named/hawava.com.zone
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
hawava.com域从DNS服务器
yum install bind -y
vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#不允许其它主机进行区域传输
allow-update { none;};
vim /etc/named.rfc1912.zones
zone "hawava.com" {
type slave;
masters { 192.168.1.48;};
file "slaves/hawava.com.slave";
};
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
ls /var/named/slaves/magedu.org.slave #查看区域数据库文件是否生成
com域DNS服务器
yum install bind -y
vim /etc/named.conf
#注释掉两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
vim /etc/named.rfc1912.zones
zone "com" {
type master;
file "com.zone";
};
vim /var/named/com.zone
$TTL 1D
@ IN SOA master admin.hawava.com. ( 1 1D 1H 1W 3D )
NS master
hawava NS hawavans1
hawava NS hawavans2
master A 192.168.1.38
hawavans1 A 192.168.1.48
hawavans2 A 192.168.1.58
chgrp named /var/named/com.zone
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
根域DNS服务器
yum install bind -y
vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
zone "." IN {
type master;
file "root.zone";
};
vim /var/named/root.zone
$TTL 1D
@ IN SOA master admin.hawava.com. ( 1 1D 1H 1W 3D )
NS master
com NS comns
master A 192.168.1.28
comns A 192.168.1.38
#安全加固
chgrp named /var/named/root.zone
chmod 640 /var/named/root.zone
systemctl start named #第一次启动
rndc reload #不是第一次启动
Forward转发服务器
yum install bind -y
vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
vim /var/named/named.ca
. 518400 IN NS a.root-servers.net.
a.root-servers.net. 3600000 IN A 192.168.1.28
systemctl start named #第一次启动
rndc reload #不是第一次启动
本地DNS缓存服务器
yum install bind -y
vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
forward only;
forwarders { 192.168.1.18;};
dnssec-enable no;
dnssec-validation no
systemctl start named #第一次启动
rndc reload #不是第一次启动
客户端测试
cat /etc/resolv.conf
nameserver 192.168.1.8
curl www.hawava.com
Congratulations!