-
环境:centOS6.1虚拟机
[zhang@server ~]$ cat /etc/centos-release CentOS release 6.10 (Final)
-
原理:
域名是分等级的,最上面是 “.”根域(全球共有13个根域服务器)
根下面是顶级域名(一级域名),像组织域,比如“com、edu”等
以及国家域比如“cn、tw”等;
再下面是二级域名,依次往下推。不过一般到三级都成了主机名了。主机都会配置dns服务器(下面暂称为直接dns服务器)。解析的时候,比如www.baidu.com,直接dns服务器先查看自己缓存中是否有该域名对应的ip,没有的话,dns服务器会直接向根dns服务器发起查询请求,根服务器也没有该域名的ip,但是它保存有一级dns服务器的ip,它会将一级dns服务器的ip地址告知直接dns服务器,然后该服务器再向一级dns服务器发起请求查询,这样逐级往下查,当查到com域的dns服务器时,它保存了www.baidu.com域名的ip地址,然后它告知了直接dns服务器。直接dns服务器拿到后先缓存起来,然后告知查询的主机。
从上面可以看出,每个dns服务器只保存它域内的机器的ip地址(每个域对应一个网段),它并不保存它上面和域外面的主机的ip的记录。我们创建自己dns服务器的目的,就是要管理记录我们自己的域内的主机,以便域外部的其它主机访问。(当然域名还是要买的)
主机向直接dns服务器查询,只查询了一次,其它由dns代劳,这样的称为“递归查询”,直接dns服务器先向根dns服务器,然后又向一级域名dns服务器,然后依次查询下去,这样多次查询称为“迭代查询”。
递归:客户端只发一次请求,要求对方给出最终结果。
迭代:客户端发出一次请求,对方如果没有授权回答,它就会返回一个能解答这个查询的其它名称服务器列表,客户端会再向返回的列表中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果。
授权回答:向dns服务器查询一个域名,刚好这个域名是本服务器负责,返回的结果就是授权回答。
环境如下:
客户端-----本地dns服务端----外网
从递归和迭代查询可以看出:
客户端-本地dns服务端:这部分属于递归查询。
本地dns服务端---外网:这部分属于迭代查询。一般情况下,dns client发送的请求,都是属于递归查询请求。
横向的话,dns服务器还可以分为主服务器(主从服务器都不是绝对的,一个主服务器也可是是其他主服务器的区域的从服务器)、从服务器、缓存服务器、转发器(代理服务器)
-
步骤
1 关闭selinux:[zhang@server ~]$ getenforce Enforcing [zhang@server ~]$ sudo setenforce 0 [zhang@server ~]$ getenforce Permissive
永久关闭的话:
vim /etc/selinux/config,将里面的“SELINUX=enforcing”修改为“SELINUX=disabled”2 关闭防火墙(不关闭的话,也可以设置策略):
关闭防火墙服务 sudo service iptables stop
关闭开机启用防火墙设置[zhang@server ~]$ sudo chkconfig --list iptables iptables 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭 [zhang@server ~]$ sudo chkconfig iptables off [zhang@server ~]$ sudo chkconfig --list iptables iptables 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
3 安装bind软件包(dns服务的软件包):
yum install bind -y4 查看其安装文件列表(确定其可执行文件和配置文件)
rpm -ql bind5 配置文件、程序文件
文件 位置 脚本程序文件 /etc/named rndc配置文件 /etc/rndc.conf(rndc:remote name domain control) 检测/etc/named.conf文件语法 /usr/sbin/named-checkconf 检测zone和对应zone文件的语法 /usr/sbin/named-checkzone 远程dns管理工具 /usr/sbin/rndc 生成rndc密钥 /usr/sbin/rndc-confgen 主配置文件 /etc/named.conf 区域配置文件 /etc/named.rfc1912.zones zone文件的默认路径 /var/named ①、主配置文件/etc/name.conf
[zhang@server 桌面]$ sudo cat /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { 127.0.0.1; };//类似套接字socket(ip+端口)的意思,监听该地址的网卡的53号端口,如果机器有多个网卡的话,可在分号后面继续添加,any表示监听所以网卡接进来的请求。 listen-on-v6 port 53 { ::1; };//同上,只不过网卡的地址是ipv6 directory "/var/named";//默认的区域(zone)数据文件的保存基目录 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 { localhost; };//接受哪些主机或网段内的机器发送dns请求 recursion yes;//是否递归查询 dnssec-enable yes;// dns安全扩展,可以改为no关闭 dnssec-validation yes;//可以改为no关闭 /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN {//区域信息配置,zone后面跟的是待解析的域,比如“baidu.com”等, . 表示根域 type hint;//区域类型,hint表根域,master表示主服务器,即本机负责该域名内的主机解析,slave表示从服务器,表示该机也是dns服务器,但是是从服务器,资源记录从另外一台主dns服务器传递而来 file "named.ca";//表示区域数据文件名,结合上面的基目录,即该文件是在“/var/named/named.ca”,该文件保存了全球13个根服务器的资源记录,是安装服务时,自动创建的。其他的区域数据文件,需要自己在该文件夹中手动创建。 }; include "/etc/named.rfc1912.zones";//表示引入该文件中的配置,其实该文件中也是保存的一些区域配置的列表,可以不引入,像上面的zone一样,一个个直接写在该文件中也可以。 include "/etc/named.root.key";
其实,完全可以将该文件备份,自己手动创建一个,下面写个最简单的named.conf文件
options { directory "/var/named";//默认的区域数据文件的保存基目录 } zone "lingfu.com" IN { type master;//表示是该dns服务器为其解析该域的主服务器 file "lingfu.com.zone";//保存资源记录的文件的名称 } zone "1.168.192.in-addr.arpa" IN {//反向域,域的名称是将网段到过来写,然后后面跟随“.in-addr.arpa”,反向域解析是将ip地址解析为域名 type master; file "192.168.1.zone" }
这就是最简单的配置方法,没有的配置项会采用默认值。
下面再介绍几个配置项,named.conf文件,options { directory "/var/named";//默认的区域数据文件的保存基目录 allow-query { 192.168.0.0/24;192.168.1.20; };只允许这个网段和这个地址查询 recursion yes; // yes|no|off 是否允许客户递归查询,因为dns服务器保存有其域内主机的ip,所以查询域内主机ip的时候不需要通过上级dns一级一级查询;(允许递归就是别人请求你,你好人做到底,一定帮别人拿到答案,而不是让别人去自己一级一级找答案。通常设置为只为自己域内主机递归) 该值如果是yes,并且一个DNS询问要求递归,那么服务器将会做所有能够回答查询请求的工作。如果recursion是off的,并且服务器不知道答案,它将会返回一个推荐(referral)响应。默认值是yes。注意把recursion设为no,不会阻止用户从服务器的缓存中得到数据,它仅仅阻止新数据作为查询的结果被缓存。服务器的内部操作还是可以影响本地的缓存内容,如NOTIFY地址查询。 notify yes;//表示版本更新时(有新纪录添加时),会给区域中的所有服务器(区域的掌管者,即主从服务器)发送版本更新通知(但从服务器的真正版本更新,是从服务器向主服务器发送传递请求)。信息更新分为“全量传递”和“增量传递”,刚创建的从服务器,区域数据文件内容是空的,从主服务器传递资源记录是全量传递;主服务器资源记录有新增或修改内容时,更新版本,从服务器只从主服务器传递新增信息就是“增量传递” } zone "lingfu.com" IN { type master;// master|slave|hint|forword,master表示是该dns服务器为其解析该域的主服务器,slave表示是从服务器,该区域的资源记录需要从指定的master服务器上传递,hint表示根域,forword表示转发域(把客户机的对该域的查询请求转发给指定的其他dns服务器,通常指定给该域的管理dns服务器) file "lingfu.com.zone";//保存资源记录的文件的名称 allow-transfer {192.168.0.3;};//表示允许哪台从服务器从该服务器传递该域的资源记录,none表示不允许任何其他从服务器从此传递。 } zone "wuai.com" IN { type slave;// slave表示是从服务器,该区域的资源记录需要从主服务器传递过来 master {192.168.0.4;};//指定主服务器 file "slaves/wuai.com.zone";//保存资源记录的文件的名称为/var/named/slaves/wuai.com.zone allow-transfer {none;};表示不允许其他任何从服务器从此传递资源记录 }
②、/var/named
这是个文件夹,里面保存的是跟/etc/named.conf文件中zone项目中指定的区域数据文件(文件里面保存的称为资源记录:RR)[zhang@server 桌面]$ sudo ls -l /var/named 总用量 28 drwxrwx---. 2 named named 4096 6月 19 2019 data drwxrwx---. 2 named named 4096 6月 19 2019 dynamic -rw-r-----. 1 root named 3289 4月 11 2017 named.ca -rw-r-----. 1 root named 152 12月 15 2009 named.empty -rw-r-----. 1 root named 152 6月 21 2007 named.localhost -rw-r-----. 1 root named 168 12月 15 2009 named.loopback drwxrwx---. 2 named named 4096 6月 19 2019 slaves
这是程序自带的一些区域数据文件,其中name.ca是根域的记录,named.loacalhost和named.loopback是本机(localhost)的记录,一个是正向域数据文件,一个是反向域数据文件。正向、反向域数据文件是分开写的。slaves是一个文件夹,当dns服务器作为从服务器时,从主服务器传递过来的数据一般设置保存在该文件夹内。
注意,留意这里面的文件的权限和属主以及属主。自己创建新的区域数据文件也应当保持相同的权限。[zhang@server 桌面]$ sudo cat /var/named/named.localhost $TTL 1D //用宏定义一个TTL默认值为1天,下面数据直接引用此值. @ IN SOA @ rname.invalid. ( 0 ; serial 版本号,每更新一版+1 1D ; refresh 更新时间 1H ; retry 重试时间 1W ; expire 过期时间 3H ) ; minimum 否定答案的TTL值 NS @ A 127.0.0.1 AAAA ::1
拿第一条资源记录来简单解释一下这个文件(此条记录从“@”开始到“: minium”结束),分号后面表示注释
列 含义 @ named字段,@为简写,表示默认域,可用于引用当前区域的名字(/etc/named.conf的‘zone’中定义的本域名),其后应该跟ttl项的,但因为前面已经定义了,算是全局继承。另外在写其他记录时,可以写FQDN(全限定域名),但最后一定要跟一个点,比如www.biadu.com.,也可以直接写主机名www。 IN internet,表示将该记录标志为一个Internet DNS资源记录 SOA type字段,记录类型 @.... value字段 注:这里的“ NS @”、“A 127.0.0.1”、“AAAA ::1”分别是第二条、第三条、第四条记录,之所以直接从记录类型开始,表示前面空的列值直接继承上一条记录的。
named字段值 含义 . 根域以” . “结束,并且只有一个,没有上级域。而在Internet中,根域一般不需要表现出来。 @ 默认域,文件使用$ORIGIN domain 来说明默认域。紧跟其后的记录,其值后面可默认跟上该域 ttl 全称”Time to Live “,以秒为单位记录该资源记录中存放高速缓存中的时间长度。通常此处设为空,表示采用SOA的最小ttl值。 IN internet,表示将该记录标志为一个Internet DNS资源记录 下面说一下记录类型:
类型 含义 SOA记录 Start Of Authority一个授权区的开始,配置文件的第一个记录必须是SOA的开始,并设定了了记录的版本号,刷新时间间隔等配置。会值内会有两个主机域名,前一个指定本域的主NS服务器(因为一个区域内,除了主服务器还有其它的从服务器),后一个指定管理者邮箱(因为@有特殊作用,所以邮箱中的“@”,用“.”代替)。 NS记录 记录说明了在众多记录里哪一台才是名称服务器(无论主或从服务器都是该类型),其值一般是服务器域名,所以其后面还要跟一个正向解析该服务器ip地址的A记录,所以要成对出现。(一个域记录中之所以有NS记录,其作用一是标记哪些是ns服务器,另外还能用来在主从服务器同步同步记录时,作为向哪些机器发送通知信息的依据) MX记录 Mail eXchanger,邮件交换器,其值内会有一个0-99之间的数字表示其在所有邮箱服务器中的优先级。另外同NS一样,还要有一条A记录,解析其ip地址,所以也是成对出现。邮件交换记录可将该域下所有邮件服务器 指向自己的邮件服务器,只需在线填写服务器的IP地址 CNAME记录 Canonical NAME 别名记录,可允许多个名字映射到同一计算机,通常用于同时提供Web和邮件服务器的计算机。 A记录 主机名对应的IP地址记录,用户可将该域名下网站服务器指向自己的Web服务器,同时也可设置域名的二级域名。值为ipv4地址。 AAAA记录 主机名对应的IP地址记录,值为ipv6地址。 PTR记录 用于地址到主机名的映射,反向映射。(区域数据文件分正向反向文件,反向映射记录在不同的文件里) HINFO记录 由一组描述主机的信息文件组成,通常包括硬件名称和操作系统名称。 手动创建一个区域数据文件
[root@server named]# cat lingfu.com.zone $TTL 1D @ IN SOA nscp.lingfu.com wal.lingfu.com. (;指定主ns服务器和管理者邮箱 20200317 ; serial版本号 2D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS nscp ;主ns服务器 IN NS nscp2 ;从ns服务器 IN MX 10 mail nscp IN A 192.168.0.1 ;主ns服务器 nscp2 IN A 192.168.0.2 ;从ns服务器 mail IN A 192.168.0.3 wal IN A 192.168.0.10 law IN A 192.168.0.11 ssss IN CNAME ysys ysys.lingfu.com. IN A 192.168.0.99 *.lingfu.com. IN A 192.168.0.5 ;泛域名
测试检查配置文件错误的工具:nslookup、dig、named-checkzone、host、named-checkconf及dlint。
启动服务:
配置完成后,启动服务(并设置开机启动)
service named start
chkconfig named on修改网络dns,测试dns服务器。
修改/etc/resolv.conf :修改后可即时生效,启动同样有效
或修改/etc/sysconfig/network-scripts/ifcfg-eth修改指定网卡的dns(添加项,dns1、dns2等,需要重启网络生效)参考文章